今天我们进入第7个war包的学习。
首先我们先看学习要求
自行完成相应的动作和思考
0.读完程序中的文档,即注释,如果有相关问题,则直接回答问题。Servlet的对象参数的作用域
1 request-Request对象
2 session-HttpSession对象
3 application-ServletContext对象在项目中,页面之间或是请求之间会发生跳转,跳转过后,数据还可不可见,能不能传递过去,用户心里要清楚。
1 Servlet与Servlet之间
2 Servlet与JSP之间
3 JSP与JSP之间注意路径,特别是相对路径
老规矩,关于readme文件所提到的问题,我们一个一个进行解决。
Servlet的对象参数的作用域
1.request-Request对象
Request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。
2.session-HttpSession对象
Session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要Session对象。而HttpSession 是服务器端的技术,服务器会为每一个用户创建一个独立的Session,其属于一个会话。
3.application-ServletContext对象
ServletContext是一个“域对象”,它可以用来给多个servlet传递数据,所以其具有存数据与取数据的功能。一个项目只有一个ServletContext对象,对象名通常是application,也就是说可以从多个servlet中获取这唯一一个对象,
这个对象随着服务器的启动而创建,随着服务器的关闭而死亡。
页面之间的跳转
1.Servlet与Servlet之间
Servlet之间可以实现跳转,从一个Servlet跳转到另一个Servlet,利用Servlet的跳转技术可以很方便的把一块业务模块分开,比如使用一个Servlet接收用户请求,根据业务规则转到其他Servlet进行处理,最后跳转到另一个Servlet把处理结果展示出来。
Servlet提供了两种跳转方式:
- request对象提供的:转发Forward
- response对象提供的:重定向Redirect
那么,什么是转发与重定向呢?转发是一种服务器行为,是一种在服务器内部的资源跳转方式,其 通过request对象获取请求转发器对象:RequestDispatcher,getRequestDispatcher(String path),然后使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)。而重定向是另一种客户端行为,其通过客户端浏览器发送http请求,servlet1响应通知浏览器重定向到servlet2,同时浏览器请求servlet2,响应的服务器根据此请求寻找资源并发送给客户。两者的原理图如下图所示。
2.Servlet与JSP之间&JSP与JSP之间
servlet跳转到jsp页面同样是转发和重定向这两种方式。而jsp之间通常可以通过超链接标记、提交表单、JavaScript事件、response对象、forword动作标记等方式进行页面跳转。
好的,接下来我们就开始深入理解第7个war包的示例代码。
第1个项目:实现数字计算的功能。运行dataOperation下的index.html文件,显示如下界面。
该项目的开方、乘十,显示功能分别通过requestparam包下的三个servlet进行实现。
其中servlet之间请求与转发操作的代码分别如下:
//设置请求上属性的参数
request.setAttribute("count",str);
// 转发给另一个Servlet来处理
request.getRequestDispatcher("operTwoServlet").forward(request,response);
// 再次置入请求属性的参数
request.setAttribute("count",String.valueOf(count));
// 转发给另一个Servlet来处理
request.getRequestDispatcher("showServlet").forward(request,response);
//获取请求属性上的参数
String strcount=(String)request.getAttribute("count");
最后运行结果
第2个项目:实现系统消息管理的功能。运行servletContextPara包下的admin.html文件,显示以下界面
然后运行index.html文件,页面显示信息已经被保存。
查看响应servlet代码,发现是通过上下文数据共用进行实现。
ServletContext sc; //APP全局可见
第3个项目:运行shopping目录下的index.html文件,显示如下界面
将商品添加至购物车之后,查看购物车,发现商品已经出现在购物列表之中。
接着我们来查看原理,首先查看index.html文件
<!-- 以下有两个form,请求的URL是不一样的 -->
<form action="../addServlet" name="form1">
输入您要购买的产品名称:<br>
<input type="text" name="product">
<input type="submit" value="添加购物车">
</form>
<form action="../shoppingServlet" name="form2">
<input type="submit" value="查看购物车">
</form>
和第六个war包的原理相似,首先通过form表单的形式将路径提交到servlet上,然后再servlet中创建session对象
// 创建session对象,即创建会话
HttpSession session=request.getSession();
再获取对应属性值
//获取session
HttpSession session=request.getSession();
//获取属性值
String shopping=(String)session.getAttribute("shopping");
最终完成数据的存取功能。
完成第7个war包的学习,又是收获满满的一天!