<J2EE学习笔记>续上次Servlet部分提升内容 以及JSP的内容纲要
以下全部课件均来自于同济大学刘岩老师的<EnterpriseJavaProgramming> 因为授课语言问题,如果翻译有不正确之处欢迎指正
Section 1. 关于Servlet的部分内容提升
一.如何进行服务器端的重定向
关于服务器的重定向主要有两种方法:
第一种是通过RequestDispatcher(请求分派)类来实现,在Servlet内部通过调用doGet或者doPost函数的request类参数的方法来得到WebContext类来使用getRequestDispatcher类来实现URL请求的重定向。这里值得注意的一点是RequestDispatcher类有两种得到的方法:
1.直接通过request“不明对象(Implict Object)”类来调用getRequestDispatcher方法来得到,参数是一个相对的路径,也就是说,如果发送request请求的网页所在 的目录和要重定向的网页在同一个虚拟目录下的时候,需要进行简写。
2.间接方法(老师的幻灯片中都是使用的匿名类来简化代码量)通过request对象来调用getServletContext方法所得到的匿名类再调用一次getRequestDispatcher 类来实现得到RequestDispatcher类,最后统一使用一个forward(request,response)来完成重定向。
第二种是使用response类的sendRedirect方法,我想这个方法是最简单粗暴的。
二.如何通过request类来传送数据/类(Persisting application data across requests)
上面的表格先给出来了要使用到的类的出处,本章所指的数据/类的传输暂时只是指通过setAttri7bute和getAttribute方法来实现的传送,主要有三种类有set/getAttribute方法分别是来自于request类,session类,和servletcontext类。既然这三种类都有Attribute的getter&setter我们不妨来进行一下比较体会其中的差别。
首先用一张图来看一下服务器--客户端结构中request,session,context顺带上cookie的区别
在这张图中在服务器端的红色ABC表示的是session,在客户端的蓝色ABC表示的是cookie,context是D,而request图中没有表示,request的生命周期在下面链接有具体讲述
http://blog.csdn.net/seablue_xj/archive/2009/11/26/4879847.aspx
1.当使用request的Attribute getter&setter我们所传送的数据的生命周期是和request类的生命周期是相同的,这个也就是使用request来传送数据的最大限制,当request对象被创建之后如果被上面所讲的RequestDispatcher.forward对象处理的的话数据是依然存在的,也就是说request所存信息的最长路线就是“JSP-〉Servlet-〉RequestDispatcher重定向的URL”,当然如果是用sendRedirect来进行重定向的话,那么request的生命周期结束所存的数据自然也就会被销毁。
2.如果是使用session的Attribute getter&setter,实际上所要传输的数据是存在了服务器端的session类中,客户端请求可以通过自己的sessionId来多次访问session也就是可以进行数据的一次存反复取,这样以来所存的数据的生命周期和重定向就没有关系
3.最“大”的方法是使用servletcontext的Attribute getter&setter这种方法可以讲是将数据存在了整个服务器端(不考虑并行主机共享服务端)的背景之中,所存的资源直接存储在服务器端。
Section 2. 关于JSP的主要内容
关于JSP的概念性介绍很简单:1.动态JSP代码+静态HTML的组合 2.JSP和Servlet一般是作为Controller在MVC模式中
这些类都是隐式声明的类,可以在JSP的内嵌动态代码之中直接使用,如果使用了其他Explict的对象而没有声明的的话就会产生一个“NullPointerException”
这里的例子和上一次的例子不同的是在web.xml文件中的servlet-class标签换成了jsp-file标签也就是用jsp文件来代替了javaServlet的类的作用,使用JSP文件可以更好的和HTML5代码融合写出美观人性化的页面,不需要servlet中的response.getWriter来逐行println.
关于JavaBeans的概念性描述
1.javaBean是一个“完美”Encapsulated类,要求内部的数据必须严格按OOP的规范通过getter&setter来进行访问,而且是private限定
2.javaBean必须使用接口Serializable允许该对象并行化写入磁盘文件之中,句式如下
<jsp:useBean id="id" class="classname" scope="page|request|session|application" />
<jsp:setProperty name="id" property="name1" value="xxx1" or param="xxx1" />
<jsp:getProperty name="id" property="name1"/>
关于这张图还是有很多不大懂的地方,因为自己的HTML功底很浅,比如那个单引号是什么来头...但是在jsp:setProperty标签之中,我们既可以静态的将一个值传过去,也可以使用 url目录+“?xxx1=param1&..”查询标记来自己定值
关于jsp:include的用法很简单朴素,这里就不多赘述了:-)