这部分的主要内容:
第一,Java Web应用基础复习
第二,MVC的设计模式
第三,Struts的设计模式
第一部分:Java Web的应用基础
Java Web的核心技术是JSP和Servlet技术。
图一,Java Web的应用的结构图
1,Servlet与JSP
Servlet组件是一个与协议无关的跨平台的服务器组件。Servlet的作用是读取客户发送的显示为数据、读取由浏览器发送的隐藏式请求数据、向客户发送显示数据及发送隐藏式HTTP响应数据等。而JSP则负责显示数据,也就是负责页面显示。
2,JavaBean在Java Web组件的应用
JavaBean封装属性和方法,使之具有独立的功能、可重用的并且与其他控件通讯的类。
以下是jsp对JavaBean的几点应用。
1)<jsp:userBean>
定位并实例化一个JavaBean。
<jsp:JavaBean id="user_page" scope="page" class="com.UserInfoBean"/>
其中,id是类的映射名称,scope为会话的有效范围,class为累的映射路径
2)<jsp:setProperty>
设置一个JavaBean的属性。
<jsp:setProperty name="user_age" property="user" value="<%=user_page.getUser()+1%>"></jsp:setProperty>
其中,name指定了Javabean的对象;property属性表明需要设定值的Javabean属性的名称;value属性表明了需要设定给Javabean的属性的】值。
3)<jsp:getProperty>
读取JavaBean的属性值。
<jsp:getProperty name="user_page" property="user"/>
4)<jsp:include>
包含一个页面
<jsp:include page="index.jsp" flush="true">
在这里有的地方要注意的,那就是
<%@ include file=”relativeURI”%> 是在翻译阶段执行
<jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行.
1) 执行时间上:
<%@ include file=”relativeURI”%> 是在翻译阶段执行
<jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行。
2)引入内容的不同:
<%@ include file=”relativeURI”%> 引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。所以要注意两个页面在引用变量上不要重复
<jsp:include page=”relativeURI” flush=”true” /> 引入执行页面或servlet所生成的应答文本,所以要注意的是在被包含的页面上不能引用到第一个包含页面的那些什么东东的。因为在被包含的页面编译的时候很可能出错。
3,Web组件的三种关系
Web组件的三种关系分别是转发请求、URL重定向和包含。
1)转发请求
这种技术通常运用于Web运用层控制Servlet流程控制器,检查Web请求的数据,并将请求转发到合适的目标组件,以便处理。
Servlet类对象可以使用javax.servlet.RequestDispatcher.forward()方法来转发。
例如:String url=“index.jsp”;
RequestDispatch rd=request.getRequestDispatcher(url);
rd.forward(request,response);
JSP页面中,可以使用<jsp:forward>标签来转发请求,执行代码如下:
<jsp:forward page="index.jsp"/>
对于请求转发,转发的源组件和目标组件共享request范围内的共享数据。
2)URL重定向
URL重定向类似请求转发,不过也有些区别:
其一,Web组件可以将请求转发到任意URL
其二,重定向的源组件和目标组件之间不共享一个HttpServletRequest对象,因此不能共享Request范围内的数据。例如:
String URL=“http://minigrisoft.com”;
response.sendRedirect(URL);
3)包含
包含关系的源组件的目标组件共用一个HttpServletRequest对象,因此它们共享request范围内的数据。
4,自定义标签与JSTL表签库
<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSTL标签的应用</title>
</head>
<body>JSTL循环标签的应用 <br>
<c:forEach var="i" begin="1" end="10" step="1">
${i}
</c:forEach>
</body>
</html>
5,JSF技术简介
JSF(Java Server Faces)技术为构建Java服务应用的用户接口进行了简化。
JSF请求有6个生命周期阶段:回复视图、应用请求、处理验证、更新模型、调用应用及显示响应。
6,XML简介
XML它是一种用来创建自定义标记的标记语言。在Java Web 领域,任何一个Web应用程序都离不开XML文件,它常用来做各种软件应用的配置文件。如在基于Struts 的Web应用中,有两个重要的文件:
web.xml和Struts-config.xml。web.xml用来配置Web应用,而Struts-config.xml用于配置Struts以及各种Action组件。
第二,MVC的设计模式,即是Model-View-Controller
早期的第一种JSP设计模式Model1实质是JSP+javaBean模式;第二种JSP设计模式实质是JSP+Servlet+JavaBean模式。
虽然可以实现各层分离的应用,但是因为页面转换十分复杂,必然导致Servlet代码增多。这时使用多个Servlet来分离不同的转换,可以解决一定的问题,但是同时配置多个Servlet显然不是一个好的办法。在这种状态下,服务器端的各种框架就能解决以上的问题。
3,Struts设计模式
对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化ActionServlet,ActionServlet从struts- config.xml文件中读取配置信息,把它们存放到各种配置对象中,例如Action的映射信息存放在ActionMapping对象中。
在以上那些知识的了解的基础上,我们期待下一步Struts 2的学习
。。。。。。。。。。。。。。。。。。。。。
当ActionServlet接受到一个客户请求时,将执行如下流程。
流程:
(1)减缩和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。
(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
(3)根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。
(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。
(5)ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action。如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。
(6)Action的execute()方法返回一个ActionForward对象,ActinoServlet再把客户请求转发给ActionForward对象只想的JSP组件。
(7)ActionForward对象指向的JSP组件生成动态网页,返回给客户。
对于以上流程的流程(4),如果ActionForm的validate()方法返回一个或多个ActionMessage的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含用户提交表单的JSP组件。再这种情况下,不会再创建Action对象并调用Action的execute()方法。