1、第第9章章 基于基于Servlet的的Web开发开发Servlet概述概述l由于由于JSP在被执行之前总是被翻译为在被执行之前总是被翻译为Servlet。lServlet是用是用Java Servlet API开发的一种开发的一种Java类。类。l这些这些API被包含在被包含在javax.Servlet和和javax.Servlet.http这两个包中这两个包中创建创建ServletServlet类名类名继承继承HttpServlet类类Servlet实例名实例名URL路径路径HttpServletl编写自己的编写自己的Servlet时,继承时,继承javax.servlet.http.Htt
2、pServlet类。类。lHttpServlet是抽象类,它的是抽象类,它的Http处理方处理方法只有定声明没有具体实现。法只有定声明没有具体实现。l开发开发Servlet类,一般需要重写类,一般需要重写doGet()或或doPost()方法。方法。一个简单的一个简单的Servletpublic class HelloServlet extends HttpServlet private static final String CONTENT_TYPE=text/html;charset=GBK;public void doGet(HttpServletRequest request,Http
3、ServletResponse response)throws ServletException,IOException public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException 实现实现doGet()方法方法/Process the HTTP Get requestpublic void doGet(HttpServletRequest request,HttpServletResponse response)throws Ser
4、vletException,IOException response.setContentType(CONTENT_TYPE);PrintWriter out=response.getWriter();out.println();out.println(HelloServlet);out.println();out.println(Hello,Servlet!);out.println();out.println();out.close();配置配置web.xml firstServlet servlet.HelloServlet firstServlet /hello 访问访问Servlet
5、地址栏:地址栏:http:/localhost:8080/web/hello 地址地址 端口端口 站点站点 路径路径l例:使用例:使用Servlet在页面上显示一个登录表在页面上显示一个登录表单单和一个链接和一个链接。l使该表单和链接的提交地址指向一个使该表单和链接的提交地址指向一个Servlet。Servlet生命周期生命周期public class HelloServlet extends HttpServlet private static final String CONTENT_TYPE=text/html;charset=GBK;/初始化初始化 public void init()
6、throws ServletException /对对Get方法请求响应服务方法请求响应服务 public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException /对对Post方法请求响应服务方法请求响应服务 public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException /销毁销毁 pu
7、blic void destroy()HttpServletRequest接口接口ljavax.servlet.http.HttpServletRequest接接口类型的对象对应口类型的对象对应JSP中的中的request内置对内置对象。象。l常用方法常用方法lpublic String getParameter(String param)lpublic String getParameterValues(String param)lpublic void setAttribute(String attname,Object o);lpublic Object getAttribute(Str
8、ing attname);HttpResponse接口接口ljavax.servlet.http.HttpResponse接口接口类型的对象对应类型的对象对应JSP中的中的response内置内置对象。对象。l常用方法常用方法lpublic void setContentType(String contentType);lpublic void sendRedirect(String url);JSP到到Servlet的转化的转化%int sum=0;for(int i=1;i 1到到100的连续和是:的连续和是:SumServletServletContext接口接口ljavax.servl
9、et.ServletContext接口类型的接口类型的对象对应对象对应JSP中的中的application内置对象。内置对象。l定义定义ServletContext app=this.getServletContext();l常用方法常用方法lpublic void setAttribute(String attname,Object o)lpublic Object getAttribute(String attname)ServletConfig接口接口ljavax.servlet.ServletConfig接口类型的对接口类型的对象对应象对应JSP中的中的config内置对象,用于在内置
10、对象,用于在Servlet初始化时向初始化时向Servlet传递一些信息。传递一些信息。l定义定义ServletConfig config=this.getServletConfig();l常用方法常用方法lpublic String getInitParameter(String paraname)WelcomeServlet会话管理会话管理ljavax.servlet.http.HttpSession接口类型的对象接口类型的对象对应对应JSP中的中的session内置对象。内置对象。l定义定义lHttpSession session=request.getSession();lHttpSe
11、ssion session=request.getSession(boolean value);l常用方法常用方法lpublic void setAttribute(String attname,Object o)lpublic Object getAttribute(String attname)LoginServlet会话管理会话管理public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException String uname=request
12、.getParameter(uname);String upass=request.getParameter(upass);User person=new User();person.setUname(uname);person.setUpass(upass);UserDAO userDAO=new UserDAOImpl();boolean flag=userDAO.isExist(person);if(flag)HttpSession session=request.getSession();session.setAttribute(users,person);response.sendR
13、edirect(index.jsp);else response.sendRedirect(error.jsp);HttpSession接口接口l维护维护session状态的方法:状态的方法:方法方法功能功能getCreationTime()返回第一个创建会话的时间返回第一个创建会话的时间 getLastAccessedTime()返回容器最后一次得到返回容器最后一次得到 有此会话有此会话ID的请求的时间(毫秒数)的请求的时间(毫秒数)setMaxInactiveInterval()对于此会话,指定客户请求的最大对于此会话,指定客户请求的最大间隔时间间隔时间 getMaxInactiveInt
14、erval()对应次会话,返回客户请求的最大对应次会话,返回客户请求的最大间隔时间(秒数)间隔时间(秒数)invalidate()结束会话。当前存储在这个会话中结束会话。当前存储在这个会话中的所有会话属性也会解除绑定的所有会话属性也会解除绑定 使使session失效的几种方法失效的几种方法l关闭浏览器关闭浏览器lsetMaxInactiveInterval()linvalidate()l在在web.xml中配置如下:中配置如下:5 定义定义session超时时间间隔,这里以分钟为单位超时时间间隔,这里以分钟为单位Servlet异常处理机制异常处理机制l程序式异常处理:程序式异常处理:try-c
15、atch-finallyl声明式异常处理声明式异常处理lHTTP错误代码的处理错误代码的处理 404 /fileNotFound.html lJava异常的处理异常的处理 java.io.FileNotFoundException /index.jsp Servlet的线程安全问题的线程安全问题/线程不安全访问计数线程不安全访问计数public class WelcomeServlet extends HttpServlet private Integer num;public void init()throws ServletException ServletConfig config=su
16、per.getServletConfig();num=Integer.parseInt(config.getInitParameter(count);public void doGet()ServletContext application=this.getServletContext();Integer n=(Integer)application.getAttribute(num);if(n=null)application.setAttribute(num,num);else application.setAttribute(num,n+1);out.print(application.
17、getAttribute(num);Servlet的线程安全问题的线程安全问题/线程安全访问计数线程安全访问计数public class WelcomeServlet extends HttpServlet private Integer num;public void init()throws ServletException ServletConfig config=super.getServletConfig();num=Integer.parseInt(config.getInitParameter(count);public synchronized void doGet()Serv
18、letContext application=this.getServletContext();Integer n=(Integer)application.getAttribute(num);if(n=null)application.setAttribute(num,num);else application.setAttribute(num,n+1);out.print(application.getAttribute(num);属性的线程安全属性的线程安全lServletContext对象:不是线程安全的对象:不是线程安全的lHttpSession对象:不是线程安全的对象:不是线程安全
19、的synchronized(session)lServletRequest对象:线程安全对象:线程安全过滤器过滤器l过滤器是一个程序,它先于与之相关的过滤器是一个程序,它先于与之相关的Servlet或或JSP页面运行在服务器上。过滤器可附加到页面运行在服务器上。过滤器可附加到一个或多个一个或多个Servlet或或JSP页面上,并且可以检页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:器可以作如下的选择:l以常规的方式调用资源(即,调用以常规的方式调用资源(即,调用Servlet或或JSP页页面)。面)。l利用修改过的请求信息
20、调用资源。利用修改过的请求信息调用资源。l调用资源,但在发送响应到客户机前对其进行修改。调用资源,但在发送响应到客户机前对其进行修改。l阻止该资源调用,代之以转到其他的资源,返回一阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。个特定的状态代码或生成替换输出。创建过滤器的步骤创建过滤器的步骤l建立一个实现建立一个实现javax.servlet.Filter接口的接口的类类 l在在doFilter方法中放入过滤行为方法中放入过滤行为 l调用调用FilterChain对象的对象的doFilter方法方法 l对相应的对相应的Servlet和和JSP页面注册过滤器页面注册过
21、滤器 过滤器应用实例过滤器应用实例解决请求数据中文乱码问题解决请求数据中文乱码问题 l建立一个实现建立一个实现Filter接口的类接口的类EncodingCharacterFilter:public class EncodingCharacterFilter implements Filter public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException request.setCharacterEncoding(
22、GB2312);chain.doFilter(request,response);过滤器应用实例过滤器应用实例解决请求数据中文乱码问题解决请求数据中文乱码问题l注册过滤器注册过滤器 EncodingCharacterFilter filter.EncodingCharacterFilter EncodingCharacterFilter /*过滤器应用实例过滤器应用实例身份验证问题身份验证问题 l建立一个实现建立一个实现Filter接口的类接口的类AuthorizationFilter:public class AuthorizationFilter implements Filter pub
23、lic void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException PrintWriter out=response.getWriter();HttpSession session=request.getSession(false);if(session=null)out.println(“请先登录请先登录”);/此处应页面跳转此处应页面跳转 else if(!session.getAttribute(“user”).get
24、Role().equals(“admin”)out.println(“不具备管理员权限不具备管理员权限”);/此处应页面跳转此处应页面跳转chain.doFilter(request,response);过滤器应用实例过滤器应用实例身份验证问题身份验证问题 l注册过滤器注册过滤器 AuthorizationFilter filter.AuthorizationFilter AuthorizationFilter /admin/*总结总结lServlet的工作原理的工作原理l了解了解Servlet的生命周期的生命周期l能够创建并运行能够创建并运行Servletl了解了解Servlet API中的类和接口中的类和接口l了解了解Servlet API如何处理请求并产生如何处理请求并产生响应响应l了解了解Servlet如何进行会话管理如何进行会话管理l了解了解Model I和和Model II 的不同的不同
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。