servlet和jsp核心编程(第2版)第十五章servlet和JSP的集成,模型-视图-控制器构架

本文介绍如何使用Servlet和JSP实现模型-视图-控制器(MVC)架构,详细讲解了六个步骤,包括定义bean、处理请求、填充结果bean、存储结果、转发请求到JSP页面以及从bean中提取数据。
[size=x-large]第十五章:servlet和JSP的集成,模型-视图-控制器构架[/size]
[size=large]一MVC的需求[/size]
[size=medium]1[/size].MVC框架,在复杂的应用中,使用更为复杂精致的MVC框架有时会更有利,这些框架中最流行的是Apache Struts,尽管Struts很有用且被广泛采用,但实现MVC方案并不一定要使用Struts,对于简单和中等复杂的应用,使用RequestDispatcher从零开始实现MVC更为直观和灵活。

[size=large]二、用RequestDispatcher实现MVC[/size]以下是步骤:
[size=medium]1[/size].定义bean来表示数据(我们也可以理解他为结果bean:表示请求结果的java对象),我们在jsp中使用getProperty访问bean中的属性,我们不需要修改和创建bean,这些工作由servlet或其他java例程来做,因此,我们可以把这个bean定义为值对象:仅表示结果的对象,只是很少甚至根本没有任何其他功能。

[size=medium]2[/size].编写servlet处理请求:servlet读取请求参数,请求报头,也可以使用populateBean方法填写表单bean,注意不是结果bean。特别要注意采用MVC方案时,servlet并不创建任何输出,输出完全由JSP页面来完成。

[size=medium]3[/size].填写结果bean,读取请求参数之后,由servlet调用相应的商业逻辑或数据访问代码,获得最后的结果,然后将结果放置在第一步我们定义的bean中,也就是值对象中。

[size=medium]4[/size].结果的存储,这一步当中,我们需要将这些bean存储在jsp页面能够访问的位置。servlet可以在3个位置存储JSP页面所需的数据,分别是,HttpServletRequest,HttpSession,ServletContext中。对应jsp:useBean的scope属性的3种非默认值。即request,session和application。比如
request.setAttribute("key",value);session.setAttribute("key",value);getServletContext().setAttribute("key",value);

[size=medium]5[/size].转发请求到JSP页面,转发请求使用RequestDispatcher的forward方法,RequestDispatcher的获取需要调用ServletRequest的getRequestDispatcher的方法并提供相对地址。我们可以指定WEB-INF目录中的地址,<核心方法>如果JSP页面只在由servlet生成的数据的上下文中才有意义,则可以将页面放置在WEB-INF目录中,这样servlet可以将请求转发到该页面,但客户不能直接访问他们。<重点提示>这里要注意RequestDispatcher的forward方法时,客户看到的是初始servlet的URL,而非最终JSP页面的URL。a.我们可以把请求转发到静态资源,但静态页面只能处理get请求,不能处理post请求,因为Post请求中的请求参数是在Http请求正文内,静态页面无法取出其参数。所以我们只要把静态页面的后缀改为jsp,就既可以处理get请求,也可以处理post请求。b.重定向替代转发,即使用response.sendRedirect ,这种用法适用于重新显示不完全的HTML表单,因为我们可以把之前创建的数据从会话中取出。而如果使用RequestDispatcher的forward方法,则无法把之前创建的数据信息取出。
从第二步到第五步,都是在servlet中编写。

[size=medium]6[/size].从bean中提取数据。但要注意我们不在jsp页面中创建bean,所以使用<jsp:useBean id = "" type = ""/>而不是使用
<jsp:useBean id = "" class = ""/>。
第二点要注意的是,我们一般不修改bean中的属性,所以我们不使用<jsp:setProperty/>

[size=large]三、目的页面中相对URL的解释。[/size]1.因为RequestDispatcher的forward方法只维护最初的servlet的URL,那么它所转到的页面的相对地址也是相对于原来的servlet,这几乎会产生错误,比如<link ref = "stylesheet" href = "my-styles.css" type = "text/css"> 这里的href相对的就是原来servlet中的地址,所以我们要把它改为绝对的URL
<link ref = "stylesheet" href = "/path/my-styles.css" type = "text/css">,

同样<img src = "">和<a href ="">也要注意这个问题。
[size=large]四、从jsp页面转发请求[/size]
<jsp:forward page = "relative url">


[size=large]五、包含页面[/size]

1[size=medium][/size].转发forward的一种替代方案是包含include,servlet依旧依靠jsp也页面生成输出,但servlet调用不同的jsp页面生成最终页面的不同部分,事实上,RequestDispatcher的include方法就是jsp:include动作在后台调用的代码。
内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势与长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度与泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研与工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习与智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型与贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建与超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块与混合神经网络结构的设计逻辑,通过调整数据集参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值