1、 Web应用概述 1. URL与URI URL:统一资源定位器 URI:统一资源定位符 2. 常见HTML标签 3. 表单的处理 4. 静态文档与动态文档的概念:静态文档是一种以文件的形式存放在服务器端的 文档,客户发出对该文档的请求,服务器返回这个文档。动态文档是指文档的内容可根据需要动态 生成,又可分为服务器端动态文档和客户端动态文档技术。 5. Servlet概念:服务器端小程序,是 使用ServletAPI以及相关类编写的java程序, 主要用来扩展web服务器的功能。 6. 处理404错误:查看给定的路径名是否正确,查看Servlet类文件是否在classes 目录下,查看web.xml文件内容是否正确,查看tomcat是否启动 2、 Servlet技术模型 1. Servlet的API:javax.servlet包,javax.servlet.http包 Servlet接口及方法 : 1) publicvoidinit(ServletConfigconfig):完成Servlet初始化并准备提供服务。 容器传给该方法一个ServletConfig类型的参数。 2) publicvoidservice(ServletRequestreq,ServletResponseres)throw ServletException,IOException:对每个客户请求容器调用一次该方法,它允许Servlet为请求提供 响应。 3) public voiddestroy()该方法由容器调用,指示Servlet清除本身,释放请求的 资源并准备结束服务。 4) publicServletConfiggetServletConfig()返回关于Servlet的配置信息,如传递 给init()方法的参数。 5) public String getServletInfo()返回关于Servlet的信息,如作者,版本及版权信 息。 ServleConfig接口作用及方法 HttpServlet类 :新的service方法,doGet,doPost HttpServletRequest接口及常用方法 HttpServletResponse接口及常用方法 2. Servlet的开发步骤 编写一个Servlet类 编译 部署 (1)在tomcat的虚拟目录下,创建Web目录 (2)将编译好的.class文件复制到Web目录的WEB-INF\classes目录 (3)修改配置文件WEBINF\web.xml(4)启动tomcat 运行 3. Servlet的执行过程 1) 用户通过单击超链接或提交表单向容器请求访问Servlet,容器分析这个请 求,创建request和response两个对象 2) 容器根据请求的URL找到正确的Servlet,为这个请求创 建一个线程对象(每 次请求都创建一个线程) 3) 容器调用Servlet的service方法,把请求和响应对象作为参数传递给该方法 4) 调用Servlet的 doGet()或doPost()方法 5) 向客户发送响应:Servlet使用相应对象获得输出流对象,调用有关方法将 响应写给客户,响应通过容器发送给浏览器。 4. Servlet的生命周期 加载实例化Servlet——初始化Servlet(init)——为客户提供服务(service)——销毁 Servlet(destroy) 5. 分析请求 http请求结构:请求行——请求头——空行——数据 get方法与post方法的对比 public String getParameter(String name) public String[] getParameterValues(String name)public Enumeration getParameterNames()6. 请求转发 RequestDispatcher dispatcher=request.getRequestDispatcher(location);Dispatcher. forward(request, response)request.setAttributerequest.getAttribute 7. 发送响应 响应结构:状态行——响应头——空行——响应数据 response.setContentType(“text/html;charset=gb2312”);PrintWriter out=response.getWriter(); 响应重定向:response.sendRedirect(“URL”); return; 响应重定向与请求转发的比较:forward()方法转发请求是服务器端控制权的转向,客户端地址栏中 不显示转发后的资源地址。sendRedirect()方法是服务器向浏览器发送一个特殊的响应,它使浏览 器连接到新的位置,浏览器地址栏可看到地址的变化。使用重定向,资源不能位于WEB-INF目录下。 页面错误: 200表示请求成功,404表示页面没有找到,500表示服务器内部错误 3、 Servlet容器模型 1. Web应用程序的部署 (1)在tomcat的虚拟目录下,创建Web目录 (2)将编译好的.class文件复制到Web目录的WEB-INF\classes目录 (3)修改配置文件WEBINF\web.xml (4)启动tomcat 2. 理解Web应用程序的部署描述文件web.xml 下面的代码展示了在部署描述文件中元素的一个典型的使用: helloServlet 定义Servlet名称 com.myserver.HelloServlet指定Servlet类的完整名称 向Servlet传递的初始化参数,可以定义多个 email hacker@163.com 定义一个映射 HelloServlet /Hello 2 3. ServletConfig 得到ServletConfig接口对象的方法 : ServletConfig config = getServletConfig();覆盖Servlet的init方法。 ServletConfig接口共定义了下面4个方法: public String getInitParameter(String name):返回指定名称的初始化参数值(是从DD文件中取 出) public Enumeration getInitParameterNames () public String getServletName():返回DD文件中的名称 public ServletContext getServletContext():返回Servlet所在上下文对象 4. ServletContext接口 使用RequestDispatcher实现请求转发 ServletRequest的getRequestDispatcher()方法,可以传递一个相对路径, ServletContext的getRequestDispatcher()方法只能传递以“/”开头的路径。 通过ServletContext对象共享数据 4、 会话管理 1. 会话管理 理解会话的基本思想和管理机制 了解会话对象HttpSession及常见方法 调用request.getSession获取HttpSession对象: HttpSession session = request.getSession(true); 将信息存入会话 public void setAttribute (String name, Object value) 查找与会话相关联的信息 public Object getAttribute(String name) public Enumeration getAttributeNames() public void removeAttribute(String name) 使用HttpSession对象通常需要三步: (1)为客户创建或获得与请求关联的会话对象; (2)在会话对象中添加或删除名/值对属性; (3)如果需要可使会话失效。 2. 通过Cookie(一小段文字信息)支持会话 Cookie类的常用方法: getName、 getValue、setValue、setMaxAge和getMaxAge; 向客户端发送Cookie 创建Cookie对象 • Cookie c = newCookie("username", "hacker"); 将Cookie放入到HTTP响应中 • response.addCookie(c) • 从客户端读取Cookie Cookie[] cookies = request.getCookies(); if (cookies!=null){ for(int i = 0;i<cookies.length;i++){ cookie="" if(cookie.getname().equals(cookiename))="" cookievalue="cookie.getValue();" }="" 3.="" url重写与隐藏表单域="" 重写正在重定向的url="" 调用encoderedirecturl(="" )方法="" response.sendredirect(="" response.encoderedirecturl(http:="" localhost="" store="" catalog)="" 在html页面中,可以使用下面代码实现隐藏的表单域:="" <inputtype="hidden" name="session" value="a1234"> 5、 JSP技术模型 1. JSP基本语法 <%@ %> JSP指令:page指令、include指令和taglib指令 <%! %> JSP声明:理解<%! int count = 0; %>和<% int count = 0; %>的区别 <% %> JSP小脚 本 <%= %> JSP表达式 JSP动作:jsp标准动作、JSTL中的动作、用户自定义动作 jsp标准动作包括、、、、 、 <%-- --%> JSP注释 2. JSP页面生命周期 理解JSP的执行过程 浏览器访问一个jsp页面,服务器端的web容器将jsp转换为servlet,并处理执行此servlet中 的相关内容,产生响应结果,然后再由web容器将响应结果返回客户端浏览器。 理解JSP页面转换 理解JSP页面的生命周期 页面转换——页面编译——加载类——创建实例——调用jspInit()方法——调用_jspService()方 法——调用jspDestroy()方法 3. 理解page指令属性 page指令用于告诉容器关于JSP页面的全局属性,该指令适用于整个转换单元而不仅仅是它所声明 的页面。 语法格式如下: <%@ page [ language="java" ] [extends="package.class"]合法的实现了javax.servlet.jsp.JspPage接口的java类 [ import="{package.class | package.*},..." ]导入在jsp中使用的java类和接口 [ contentType="mimeType [;charset=characterSet]" | "text/html; charset=ISO-8859-1" ]指定输出类型 [ session="true | false" ]指定jsp是否参加http会话 [ buffer="none | 8kb | sizekb" ]指定 输出缓冲区的大小 [ autoFlush="true | false" ][ isThreadSafe="true | false" ] [ info="text" ] [ errorPage="relativeURL" ]用相对URL指定另一个jsp页面来处理错误 [ isErrorPage="true | false" ]指定是否要用另一个jsp页面来处理错误 %> 4. JSP隐含变量(内置对象) JSP有以下九种内置对象,包括: request,请求对象(是HttpServletRequest的隐含变量) session,会话对象(是HttpSession的隐含变量) application,应用程序对象(是ServletContext的隐含变量) page,页面对象 response,响应对 象 pageContext,页面上下文对象 out,输出对象 config,配置对象 exception,例外对象 5. 作用域对象 应用作用域application: ServletContext:在整个web应用程序有效 会话作用域 session:HttpSession:在一个用户会话范围内有效 请求作用域request: ServletRequest:在用户的请求和转发的请求内有效 页面作用域page: PageContext:只在当前页面内有效 6、 Web组件重用与JavaBeans 1. 静态包含和动态包含 静态包含是在JSP页面转换阶段将另一个文件的内容包含到当前JSP文件中产生一个servlet。静态 包含使用include指令,语法: <%@ include file="relativeURL" %> 包含的文件在当前Web应用程序下,可以是任何基于文本的文 件,如HTML、JSP、XML文件,甚至是简单的.txt文件。 动态包含是通过JSP标准动作实现的,它是在请求时将另一个页面的输出包含到主页 面的输出中。 动态包含使用jsp:include标准动作,其语法如下所示: 使用 <%@cincludefile=” ”%> 修改了被包含的文件后,需更新源文件 包含外部页面的过程在原JSP页面被编译成Servlet时进行 修改了被包含的文件后,不需更新源文件 包含外部页面的过程在运行时进行 动作把请求转发到其他组件,然后由转发到的组件把响应发送给 客户 该动作的格式为: page属性的值为转发到的组件的相对URL,它可以使用请求时属性表达式。 它与动作的不同之处在于,当转发到的页面处理完输出后,并不将控制转回主页面 。 使用动作,主页面也不能包含任何输出。 2. JavaBeans及序列化 JavaBean就是使用Java语言定义的类,而这种类的设计需要遵循Sun制定的JavaBean规范文档中描 述的有关约定。 在Java模型中,通过JavaBean可以无限扩充Java程序的功能。 JavaBean的最大好处是可以实现代 码的重复利用,另外在JSP页面中使用JavaBean可使代码更简洁,也易维护,也可充分利用面向对象 语言的特性。 在JSP程序中常用JavaBean来封装业务逻辑、数据库操作等等,可以很好地实现业务逻辑和表示逻 辑的分离。 3. Javabeans规范 遵循下面3个规范的Java类作为JavaBean 类必须是public的;类必须具有无参数的public构造方法, JavaBeans类的成员变量一般称为属性 (property)。对每个属性访问权限一般定义为private或protected,而不是定义为public的。注 意:属性名必须以小写字母开头。 对每个属性,一般定义两个public方法,它们分别称为访问方法(getXxx)和修改方法 (setXxx),允许容器访问和修改bean的属性。 JavaBean的主要特性 是一个Java类 有一个无参数的构造函数 不应该有公开的实例变量 对值的获取采用getXxx和setXxx方法来访问 boolean型属性,允许用is代替get和set 4. 在Servlet中使用JavaBeans 通过JavaBeans共享数据 //创建实例并设置属性 CustomerBean customer =new CustomerBean(); customer.setCustName(request.getParameter("custName"));customer.setEmail(request.getPar ameter("email"));customer.setPhone(request.getParameter("phone"));request.setAttribute( "customer"customer); getServletContext().getRequestDispatcher("/customer.jsp").forward(request,response); 5. 在JSP中使用JavaBeans 使用 动作通过五个属性来定制该动作的行为: id、scope、class、type、beanName <jsp:usebeanid=”customer” class="”com.model.CustomerBean”" scope="session"> 使用 <%@ page import="com.model.CustomerBean" %> 使用 6. 理解MVC设计模式及其开发步骤 理解MVC设计模式 Model—代表了数据对象,用JavaBeans实现 View—用来在屏幕上显示数据对象的当前状态,是应用程序的外观,用JSP页面实现 Controller—定义了用户接口对用户输入反应的方式,它处理数据对象,用Servlet实现 开发步 骤 1.定义JavaBeans表示数据 2.使用Servlet处理请求 3.调用业务逻辑完成相应功能,填写JavaBeans对象数据 4.结果的存储 5.转发请求到JSP页面 6.从JavaBeans对象中提取数据 7、 JDBC数据库访问 1. JDBC数据库访问的一般步骤 1)加载驱动程序:使用Class类的forName()静态方法,如 Class.forName("com.mysql.jdbc.Driver"); 2)建立连接对象:使用DriverManager类的getConnection(),如 String dburl = jdbc:mysql://localhost:3306/bank Connection conn = DriverManager.getConnection(dburl, "root", "111111"); 3)创建语句对象 :使用Connection接口的不同方法创建,如 Statement stmt = conn.createStatement(); 4)获得SQL语句的执行结果:对于查询语句,调用executeQuery(Stringsql)方法,如: String sql = "SELECT * FROM books" ;ResultSet rst = stmt.executeQuery(sql) ;while(rst.next()){ out.print(rst.getString(1)+"\t") ;} 对于语句如CREATE、ALTER、DROP、INSERT、UPDATE、DELETE等须executeUpdate(String sql)方 法。 5)关闭建立的对象: close()方法释放资源 2. JDBC API:Connection接口、Statement接口、ResultSet接口 3. 理解DAO设计模式 DAO(Data Access Object)称为数据访问对象。 DAO设计模式可以在使用数据库的应用程序中实现业务逻辑和数据访问逻辑分离,从而使应用的维 护变得简单。 它通过将数据访问实现(通常使用JDBC技术)封装在DAO类中,提高应用程序的灵活性。 8、 自定义标签 1. 自定义标签的开发步骤 创建标签处理类(tag handler); 创建标签库描述文件(TLD); 在JSP文件中导入标签库和使用标签。 2. 理解TLD文件 1.0http://localhost/sampleLibhello2sampleLib.HelloTag2emptyPrints Hello user!userfalsetrue 3. 空标签、带属性标签和带标签体的开发 在JSP页面要使用自定义标签,需要通过指令声明自定义标签的前缀和 标签库的URI,格式如下所示: <%@ taglib prefix= "test" uri="http://localhost/sampleLib"%> hello.jsp的代码如下: <%@ page contentType="text/html" %> <%@ taglib prefix="test" uri="http://localhost/sampleLib"%> <

9、 Web事件处理与过滤器 1. 监听并处理Servlet上下文事件的例子 实现ServletContextListener接口:MyServletContextListener.java 在web.xml添加以下代码注 册事件监听器 event.MyServletContextListener listenerTest.jsp页面对监听器进行测试:数据库连接对象的使用: 2. 理解Web应用的事件模型 3. 处理监听事件的开发 4. 过滤器的概念、作用和工作原理 过滤器是Web服务器上的组件,它们对客户和资源之间的请求和响应进行过滤。 过滤器的一些常见应用包括: • 登录和审计过滤器 • 验证过滤器 • 图像转换过滤器 • 数据压缩过滤器 • 加密过滤器 • XSLT(eXtensible Stylesheet Language Transformation,可扩展样式表语言转换)过滤器 当容器接收到对某个资源的请求,它要检查是否有过滤器与之关联。如果有过滤器与该资源关联 ,容器将把该请求发送给过滤器,而不是直接发送给资源。在过滤器处理完请求后,它将做下面3件 事: • 产生响应并将其返回给客户; • 如果有过滤器链,它将把(修改过或没有修改过)请求传递给下一个过滤器; • 将请求传递给不同的资源。 当请求返回到客户时,它是以相反的方向经过同一组过滤器返回。过滤器 链中的每个过滤器够可能修改响应。 5. 开发过滤器的步骤 编写代码,编译,部署和运行