JSP与Servlet技术.ppt
第12章JSP与Servlet技术,主要内容,12.1 JSP简介 12.2 JSP页面元素 12.3 JSP内置对象 12.4 Servlet 12.5 Servlet API接口12.6 开发Servlet,12.1 JSP 概念,Java 服务器页面(Java Server Page,JSP)以扩展名.jsp 保存在Java Server Page里面使用 Java 编程语言和基础类库HTML 用于表示页面,而 Java 代码用于访问动态内容,并有效控制动态内容的生成,JSP 概念,简单jsp页面举例:avceit你好,这就是一个JSP页面,JSP 执行过程,Tomcat,JSP 执行过程,Jsp容器管理jsp页面生命周期,分为两个阶段:转换阶段和执行阶段转换阶段当有一个对jsp页面的请求到来时,jsp容器检查jsp页面的语法是否正确,将jsp页面转换为Servlet源文件,然后调用javac命令编译Servlet源文件生成字节码文件.执行阶段Servlet容器加载转换后的Servlet类,主要内容,12.1 JSP简介 12.2 JSP页面元素 12.3 JSP内置对象 12.4 Servlet 12.5 Servlet API接口12.6 开发Servlet,12.2 JSP 页面元素,脚本元素,包含三个部分:声明,脚本段,表达式声明:用于声明在其它脚本元素中可以使用的变量和方法脚本段:是一段java代码表达式:java语言中完整的表达式,声明,声明以结束利用声明的变量,在jsp容器将jsp转换为servlet时将作为servlet类的属性,声明的方法将成为servlet的方法,脚本段,在请求处理期间要执行的java代码段 在脚本段中可以声明变量,并且在后面的脚本中可以使用该变量。容器转换jsp页面为servlet的时候,一次性被转换为_jspService()方法中的代码,表达式,计算表达式的值插入到当前流中,例:计数器 您是第个访问本站的客户 注意和以下代码的区别:,您是第个访问本站的客户,分析:1、这两个代码唯一的区别是声明变量i的方式不同,前者是成员变量,后者是局部变量。2、这个计数器有计数漏洞,有可能出现计数不同步的可能,原因是可能会有若干人同时访问i的值,这样大家获取的是同一个i值,与事实不符。解决的办法是synchronized加锁。,声明方法举例,您是第个访问本站的客户,JSP 指令元素,page指令,page指令作用于整个jsp页面,定义了许多与页面相关的属性,这些属性将规定和jsp容器通信时的约定。语法:属性值总是用单引号或双引号括起来。如果一个属性有多个值的时候,这些值用逗号分开。例如:,page指令属性,Include指令,该指令的作用是将JSP页面出现该指令的位置处静态的插入一个文件。其语法为:例:,JSP动作元素,JSP中一共制定了7种标准的“动作元素”,分别是:,动作,include动作标签格式为:Include动作标签的功能:告诉JSP页面动态包含一个文件,即JSP页面运行时才将文件加入。,JSP 页面元素,JSP 页面构成 JSP页面构成早上好!下午好!,动作,forward 指令格式:forward 指令功能:从该指令处停止当前页面的继续执行,而转向其他的一个jsp页面。,JSP example1,demo1.jsp/,JSP example2-文件访问,取得目录中的文件取得目录中的文件,在 目录下的文件有,主要内容,12.1 JSP简介 12.2 JSP页面元素 12.3 JSP内置对象 12.4 Servlet 12.5 Servlet API接口12.6 开发Servlet,12.3 JSP内置对象,九种内置对象request,response,out,session,application,cookie,config,page,exception。HttpServletRequest类的Request对象 该对象封装了用户提交的信息,通过调用该对象的方法可以获取用户提交的信息。getParameter(String strTextName)获取表单提交的信息。getRermoteAddr()获取客户的IP地址。getProtocol()获取客户使用的协议。,JSP内置对象,HttpServletResponse类的Respone对象 对客户的请求做出动态的响应,向客户端发送数据。(1)将客户重新引导至另一个页面 使用response的sendRedirect(URL)方法实现客户的重定向。例如:response.sendRedirect(index.jsp);(2)动态响应contentType属性使用response对象的setContentType(String s)方法来改变contentType的属性值。格式:response.setContentType(String s);参数s可取text/html,application/x-msexcel,application/msword等,HttpSession类的session对象 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。public String getId():获取Session对象编号;public void setAttribute(String key,Object obj):将参数Object指定的对象obj添加到Session对象中,并为添加的对象指定一个索引关键字。public Object getAttribute(String key):获取Session对象中含有关键字的对象。如:session.setAttribute(“username,“jack);,JSP内置对象,JSP内置对象,ServletContex类的application对象 服务器启动后产生了Application对象,直到服务器关闭。与Session对象不同的时,所有客户的Application对象都是同一个,即所有客户共享这个内置的Application对象。setAttribute(String key,Object obj):getAttribute(String key):,JSP example3-模拟登陆,Login.jspCH5-Login.jspjavax.servlet.http.HttpSession-session 对象 Login Name:Login Password:,JSP example3-模拟登陆,Member.jspCH5-Member.jspjavax.servlet.http.HttpSession-session 对象,主要内容,12.1 JSP简介 12.2 JSP页面元素 12.3 JSP内置对象 12.4 Servlet 12.5 Servlet API接口12.6 开发Servlet,12.4 什么是 Servlet,Servlet(java服务器小程序)是一个用 Java 编写的程序,此程序在服务器上运行以处理客户端请求。是按照Servlet规范编写的java类,ServletAPI,javax.servlet包中定义了所有的servlet类都必须实现的接口和类。Servlet的框架的核心是:接口,所有的Servlet都必须实现这一接口.javax.servlet.http包中定义了采用HTTP协议通信的HttpServlet类,ServletAPI,创建自定义Servlet,public void doGet(HttpServletRequest req,HttpServletResponse res),public void doPost(HttpServletRequest req,HttpServletResponse res),1.实现servlet接口 2.继承GenericServlet类3.继承HttpServlet类,并重写doGet()或doPost()方法实现对HTTP请求信息的动态响应。(在Web程序设计中,表单数据的提交方法常用有两种:Post方法和Get方法),创建自定义Servlet,有两个参数:HttpServletRequest和HttpServletResponse,这两个类实现了ServletRequest接口和ServletResponse接口ServletRequest接口中封装了客户请求信息.如客户请求方式,参数名,参数值,客户端正在使用的协议,以及发出客户请求的远程主机信息等ServletResponse接口为Servlet提供了返回响应结果的方法,HelloWordServlet,编写一个HelloWordServlet类,Servlet 的生命周期,Servlet 容器创建 Servlet 的一个实例Servlet 的生命周期就是指创建 Servlet 实例之后其存在的时间以及何时消失生命周期的 3个方法为:,Servlet 的生命周期,生命周期的各个阶段为:,Service方法会自动根据请求的方式,调用doGet或者doPost方法,如果Service方法被重写,则doGet或者doPost方法失效,部署、运行HelloWorldServlet,在web.xml中部署Servlet后才能够使用Servlet,在浏览器中输入,“http:/localhost:8080/HelloWordServlet”,,主要内容,12.1 JSP简介 12.2 JSP页面元素 12.3 JSP内置对象 12.4 Servlet 12.5 Servlet API接口12.6 开发Servlet,12.5 Servlet API接口,一个简单的JSP+Servlet实例,Sayhi.htmlServlet范例程序 请访问者输入姓名:,import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class Sayhi extends HttpServlet public void init(ServletConfig config)throws ServletException super.init(config);public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException response.setContentType(“text/html;charset=UTF-8”);PrintWriter out=response.getWriter();request.setCharacterEncoding(“UTF-8”);String Name=request.getParameter(“Name”);out.println(“”);out.println(“Sayhi”);out.println(“”);out.println(“Hi”+Name);out.println(“”);out.println(“”);out.close();/RequestDispatcher rd=request.getRequestDispatcher(userlist.jsp);/request.setAttribute(“Name“,hello“+Name);/rd.forward(request,response);,一个简单的JSP+Servlet实例,一个简单的JSP+Servlet实例,Sayhi Sayhi Sayhi/Sayhi,HttpSession使用实例,import java.io.*;import javax.servlet.*;import javax.servlet.annotation.*;import javax.servlet.http.*;public class Login extends HttpServlet protected void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException String user=req.getParameter(“user”);String passwd=req.getParameter(“passwd”);if(“caterpillar”.equals(user),主要内容,12.1 JSP简介 12.2 JSP页面元素 12.3 JSP内置对象 12.4 Servlet 12.5 Servlet API接口12.6 开发Servlet,12.6 开发 Servlet,MyEclipse 提供最新的功能以开发 Web 应用程序MyEclipse 是基于 Java 的应用程序,用于开发应用程序(如 Applet、Servlet、JSP 和 JavaBean)MyEclipse 工程是一个组织单元,它存储特定 Web 应用程序的所有文件、目录、路径和设置MyEclipse 使用户可以创建三种类型的 Servlet,即标准 Servlet、监听器 Servlet 和过滤器 Servlet在开发 Servlet 之前,有必要为此 Servlet 开发一个 Web 模块Web 模块包含一个名为 web.xml 的文件,该文件存储正在开发的 Web 应用程序的内容,新建工程,新建Web模块,创建一个Servlet,创建一个Servlet,创建一个Servlet,配置servlet,