




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章基于Servlet的Web开发Servlet概述由于JSP在被执行之前总是被翻译为Servlet。Servlet是用JavaServletAPI开发的一种Java类。这些API被包含在javax.Servlet和javax.Servlet.http这两个包中创建ServletServlet类名继承HttpServlet类Servlet实例名URL路径HttpServlet编写自己的Servlet时,继承javax.servlet.http.HttpServlet类。HttpServlet是抽象类,它的Http处理方法只有定声明没有具体实现。开发Servlet类,一般需要重写doGet()或doPost()方法。一个简单的ServletpublicclassHelloServletextendsHttpServlet{privatestaticfinalStringCONTENT_TYPE= "text/html;charset=GBK";publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{ … }publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{ …}}实现doGet()方法//ProcesstheHTTPGetrequestpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType(CONTENT_TYPE);PrintWriterout=response.getWriter();out.println("<html>");out.println("<head><title>HelloServlet</title></head>");out.println("<bodybgcolor=\"#ffffff\">");out.println("<p>Hello,Servlet!!!</p>");out.println("</body>");out.println("</html>");out.close();}配置web.xml<web-app><servlet> <servlet-name>firstServlet</servlet-name><servlet-class>servlet.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>firstServlet</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping></web-app>访问Servlet地址栏:http://localhost:8080/web/hello
地址端口站点路径例:使用Servlet在页面上显示一个登录表单<form>和一个链接<a>。使该表单和链接的提交地址指向一个Servlet。Servlet生命周期publicclassHelloServletextendsHttpServlet{privatestaticfinalStringCONTENT_TYPE="text/html;charset=GBK";
//初始化publicvoidinit()throwsServletException{}
//对Get方法请求响应服务publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{}//对Post方法请求响应服务publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{}
//销毁publicvoiddestroy(){}}HttpServletRequest接口javax.servlet.http.HttpServletRequest接口类型的对象对应JSP中的request内置对象。常用方法publicStringgetParameter(Stringparam)publicString[]getParameterValues(Stringparam)publicvoidsetAttribute(Stringattname,Objecto);publicObjectgetAttribute(Stringattname);HttpResponse接口javax.servlet.http.HttpResponse接口类型的对象对应JSP中的response内置对象。常用方法publicvoidsetContentType(StringcontentType);publicvoidsendRedirect(Stringurl);JSP到Servlet的转化<%@pagecontentType="text/html;charset=GBK"%><html><bodybgcolor="#ffffff"><fontcolor="red"><%intsum=0;for(inti=1;i<=100;i++){sum+=i;}%><p>1到100的连续和是:<br/><%=sum%></p></font></body></html>SumServletServletContext接口javax.servlet.ServletContext接口类型的对象对应JSP中的application内置对象。定义ServletContextapp=this.getServletContext();常用方法publicvoidsetAttribute(Stringattname,Objecto)publicObjectgetAttribute(Stringattname)
ServletConfig接口javax.servlet.ServletConfig接口类型的对象对应JSP中的config内置对象,用于在Servlet初始化时向Servlet传递一些信息。定义ServletConfigconfig=this.getServletConfig();常用方法publicStringgetInitParameter(Stringparaname)WelcomeServlet会话管理javax.servlet.http.HttpSession接口类型的对象对应JSP中的session内置对象。定义HttpSessionsession=request.getSession();HttpSessionsession= request.getSession(booleanvalue);常用方法publicvoidsetAttribute(Stringattname,Objecto)publicObjectgetAttribute(Stringattname)LoginServlet会话管理publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringuname=request.getParameter("uname"); Stringupass=request.getParameter("upass"); Userperson=newUser(); person.setUname(uname); person.setUpass(upass); UserDAOuserDAO=newUserDAOImpl(); booleanflag=userDAO.isExist(person); if(flag){
HttpSessionsession=request.getSession(); session.setAttribute("users",person); response.sendRedirect("index.jsp");}else{ response.sendRedirect("error.jsp"); }}HttpSession接口维护session状态的方法:方法功能getCreationTime()返回第一个创建会话的时间getLastAccessedTime()返回容器最后一次得到有此会话ID的请求的时间(毫秒数)setMaxInactiveInterval()对于此会话,指定客户请求的最大间隔时间getMaxInactiveInterval()对应次会话,返回客户请求的最大间隔时间(秒数)invalidate()结束会话。当前存储在这个会话中的所有会话属性也会解除绑定使session失效的几种方法关闭浏览器setMaxInactiveInterval()invalidate()在web.xml中配置如下:<session-config> <session-timeout>5</session-timeout> </session-config>
定义session超时时间间隔,这里以分钟为单位Servlet异常处理机制程序式异常处理:try-catch-finally声明式异常处理HTTP错误代码的处理<error><error-code>404</error-code><location>/fileNotFound.html</location></error>Java异常的处理
<error> <exception-type> java.io.FileNotFoundException</exception-type><location>/index.jsp</location></error>Servlet的线程安全问题//线程不安全访问计数publicclassWelcomeServletextendsHttpServlet{privateIntegernum;publicvoidinit()throwsServletException{ ServletConfigconfig=super.getServletConfig();num=Integer.parseInt(config.getInitParameter("count"));}publicvoiddoGet(…)…{…ServletContextapplication=this.getServletContext();Integern=(Integer)application.getAttribute("num");if(n==null){application.setAttribute("num",num);}else{application.setAttribute("num",n+1);}out.print(application.getAttribute("num"));…}Servlet的线程安全问题//线程安全访问计数publicclassWelcomeServletextendsHttpServlet{privateIntegernum;publicvoidinit()throwsServletException{ ServletConfigconfig=super.getServletConfig();num=Integer.parseInt(config.getInitParameter("count"));}publicsynchronizedvoiddoGet(…)…{…ServletContextapplication=this.getServletContext();Integern=(Integer)application.getAttribute("num");if(n==null){application.setAttribute("num",num);}else{application.setAttribute("num",n+1);}out.print(application.getAttribute("num"));…}属性的线程安全ServletContext对象:不是线程安全的HttpSession对象:不是线程安全的synchronized(session){…}ServletRequest对象:线程安全过滤器过滤器是一个程序,它先于与之相关的Servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个Servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:以常规的方式调用资源(即,调用Servlet或JSP页面)。利用修改过的请求信息调用资源。调用资源,但在发送响应到客户机前对其进行修改。阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。创建过滤器的步骤建立一个实现javax.servlet.Filter接口的类在doFilter方法中放入过滤行为调用FilterChain对象的doFilter方法对相应的Servlet和JSP页面注册过滤器过滤器应用实例——解决请求数据中文乱码问题
建立一个实现Filter接口的类EncodingCharacterFilter:publicclassEncodingCharacterFilterimplementsFilter{…publicvoiddoFilter( ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{request.setCharacterEncoding("GB2312");chain.doFilter(request,response);}…}过滤器应用实例——解决请求数据中文乱码问题注册过滤器<filter><filter-name>EncodingCharacterFilter</filter-name><filter-class>filter.EncodingCharacterFilter</filter-class></filter><filter-mapping><filter-name>EncodingCharacterFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>过滤器应用实例——身份验证问题
建立一个实现Filter接口的类AuthorizationFilter:publicclassAuthorizationFilterimplementsFilter{publicvoiddoFilter( ServletRe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度个人投资版证券交易委托合同
- 2025年度室内外装饰装修合同违约赔偿标准与环保检测协议
- 2025年度夜间搬运工劳动合同保障方案
- 2025年度个体工商户现代农业租赁服务协议
- 2025年度仓储物流行业劳动合同工伤赔偿及仓储安全协议
- 2025年度农业生态环境评估与合作协议
- 2025年度XX互联网企业股东退股及网络安全协议
- 咖啡厅装修简易合同模板
- 2025年度人体模特摄影作品授权使用协议
- 2025年江苏省安全员《A证》考试题库
- 年度得到 · 沈祖芸全球教育报告(2024-2025)
- 2025年日历表(A4版含农历可编辑)
- 南京旅游职业学院单招职业技能测试参考试题库(含答案)
- 新视野大学英语(第四版)读写教程4(思政智慧版)课件 Unit1 Urban development Section A
- 初中英语 沪教牛津版 8B U1-4 More Practice Success for Spring Buds 课件
- 生产现场作业十不干PPT课件
- 雨污水管网劳务施工分包合同
- 通信杆路工程施工
- 初中物理光学经典题(共23页)
- 封条VVTT检查流程程序参考模板
- 二次回路和电缆编号原则
评论
0/150
提交评论