Jsp 学习笔记[三](2002版《Jsp Web 编程指南》)

Jsp 学习笔记[三](2002版《Jsp Web 编程指南》)

今天游泳有了较大的进步,可以换气了,游了两个来回;感觉还行,只是手、脚、口还不太协调。
备注:是室外游泳。

--------------------------------------------------
1、Jsp 网站的结构化
本章主要讲了一些进行结构化的技术,以使程序达到可维护性和可重用性。

 include机制:
<%@ include file="footer.jsp" %>
这种机制的缺点:如果被包含页 footer.jsp 做了修改,但不修改包含页 index.jsp 的话,包含页 index.jsp 的内容不会发生变化。因为包含页将被包含页做了编译包含了进去;但现在被包含页做了变化,变化后的内容没有被包含进去(没有被编译)

动态包含:
<jsp:include page="footer.jsp" flush="true" />
这句话同样包含了footer.jsp页,并且增加了参数flush="true",这样可以保证,如果footer.jsp发生了改变,index.jsp页也会发生变化。
使用下面的语法还可以给被包含页传递参数:
<jsp:include page="footer.jsp" flush="true">
    <jsp:param name="menuitem1" value="news"/>
    <jsp:param name="menuitem2" value="new2">
</jsp:include>


JSP Model 1:

Model 1 结构的主要特征是:
    a、表现层用HTML 文件或JSP文件。如果需要,Jsp 文件可以用 JavaBean 去存取数据。
    b、Jsp 文件还负责所有的业务和处理逻辑,如接收到来的请求,转给适当的JSP,激活适当的JSP页等。这意味着 Model 1 结构是以页面设计为中心的---所有的逻辑和处理逻辑都出现在JSP页面上。
    c、数据访问要么通过JavaBean 实现,在Jsp中用JavaBean ,要么在Jsp 页面中写 scriptlet 实现。
在Model 1 结构下,应用程序的逻辑和程序流程都在页面中出现,因此页面与应用程序的逻辑是紧耦合的。
缺点:
在大型应用程序中,这种把逻辑耦合在页面中,以及需要将页锚链在一起的方式会带来问题,由于页面间是紧耦合的,因此分工很麻烦,有可能做美工的还需要了解程序的逻辑;


JSP Model 2 结构:

由于 Model 1 存在的缺限,因此为了将表示逻辑与控制逻辑分开,就产生了第二种结构,Model 2。
 


Model 2结构也就是著名的MVC结构。在这种结构中,将应用程序分了三种角色Model、 Controller、 View
在这种结构中,View视图是指表示层,Controller是控制器,Model 是与数据打交道的部分。

控制器接收应用程序的所有请求,对每一个接收到的请求,控制器将选择是做相应的处理还是要显示数据。若要显示数据,它将把请求转发给含有表示逻辑(叫view的应用)的JSP;如果要进行处理(如从数据库中读取数据),要么调用适当的JavaBean自己进行处理,要么把请求指派或转发给包含所需处理逻辑的JSP。

转发标签的写法:
<jsp:forward page="menu.jsp">
    <jsp:param name="userid" value="wuxs">
    <jsp:param name="pwd" value="pwd">
</jsp:forwar>

个人理解:所谓控制器,Controller 就是一个纯粹的Jsp页,它实现业务逻辑后(或处理后),转发给另外一个显示页。也就是说,应用程序可能经过了称为控制器的JSP页,但不会在此处停留。

也可以是一个servlet,使用 servlet 的缺点是代码中会包含有太多的HTML 代码。

-------------------------
2、servlet 技术介绍
servlet :是一种组件或程序,它可以动态的生成web内容。servlet 用Java Servlet API 编写,用像Tomcat 这样的服务器或容器管理。

web 应用程序中servlet 的作用:
自定义的servlet 继承自:java.servlet.http.HttpServlet。在写HTTP Servlet 时,我们可以得到一个实现了java.servlet.http.HttpServletRequest 接口的request 对象和一个实现了java.servlet.http.HttpServletResponse接口的response对象。
典型的,当开发基于HTTP的servlet 时,servlet 开发者只关心doGet()和 doPost() 方法。servlet 必须重载至少这两个方法中的一种方法。 
还有另外五种可重载的不常用的方法:
doHead() :用于处理 Http Head 请求。在HttpServlet 中 doHead()方法是一个特殊的方法,它将执行doGet()方法,但只给客户返回由doGet()产生的头信息。
doOptions() :用于处理Http Options 请求。 doOptions() 方法自动决定servlet 直接支持哪一种Http 方法,并把信息返回给客户。
doTrace() :用于处理Http Trace请求。 doTrace()方法引起一个响应,该响应带有包含Trace请求中所有头的信息。
doPut() :用于处理Http Put 请求。
doDelete() :用于处理 Http Delete 请求。

int() :初始化
destroy() :析构。
getServletInfo() : 让servlet 提供自身的信息。

servlet 的生存周期:
a)、装载、实例化及初始化:当第一次请求时,服务器动态装载并实例化servlet 。也可以通过配置服务器,使web 服务器初始化时就加载servlet 。因此,在开发过程中,如果更改了servlet 内容,而服务器没有重启,servlet  的响应是不会产生变化的。
b)、处理请求:容器在接收到客户的访问请求时,会查找servlet,并加载(如果还没有加载的话),并根据用户的请求使用doPost()或doGet()方法进行响应。

Request 对象:Request 对象封装了所有的用户请求信息。
获取传递的参数:
    getParameter() getParameterValues() 
    getQueryString() ,针对Http Get请求,获取参数串,需要自己处理
    getReader() ,针对Http Post 请求,返回一个BufferedReader 对象
    getInputStream() ,针对Http Post 请求,返回一个ServletInputStream 对象

Response 对象:HttpServletResponse 接口为应答客户定义了servlet方法。Response 对象封装了从服务器向客户返回的所有信息。
HttpServletResponse 对象提供了getWriter() 方法和getOutputStream()方法。
getWriter() ,返回Writer对象,用于输出文本数据;
getOutputStream() ,返回servletOutputStream对象,用于输出二进制数据。
在送出响应之后关闭Writer对象或servletOutputStream对象。
其它方法:
sendRedirect(),把客户重定向到另外的URL,这里的URL必须是绝对地址;
sendError(),用当前的出错代码状态送给客户一个出错信息。

c)、卸载:
典型情况下,servlet 从内存中卸载是在要求关闭容器时。容器会调用servlet的destroy()方法。

还有servlet 中的环境配置、参数获取及会话跟踪等不详细列出。

你可能感兴趣的:(Jsp 学习笔记[三](2002版《Jsp Web 编程指南》))