您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > Java > Java Web 培训
JavaWebApplicationDevelopmentWorkshop©2006Hewlett-PackardDevelopmentCompany,L.P.TheinformationcontainedhereinissubjecttochangewithoutnoticeChapter1WebDevelopmentFastTrackGDCCJavaCoE/AMSCaiYunyi(yunyi.cai@hp.com)32008年9月24日星期三Agenda1.前言和体系结构2.Servlet3.JSP4.应用部署和安全5.国际化42008年9月24日星期三前言和体系结构52008年9月24日星期三1Web体系结构•HTTP协议基础•高层Web应用体系结构62008年9月24日星期三HTTP协议72008年9月24日星期三HTTPGET请求82008年9月24日星期三HTTPPOST请求92008年9月24日星期三GETVS.POST102008年9月24日星期三HTTP响应112008年9月24日星期三如果有Java,但是没有servlet或容器,会怎样?122008年9月24日星期三Web容器•通信支持•生命周期管理•多线程支持•声明方式实现安全•JSP支持132008年9月24日星期三容器如何处理请求142008年9月24日星期三容器如何处理请求152008年9月24日星期三容器如何处理请求162008年9月24日星期三容器如何处理请求172008年9月24日星期三容器如何处理请求182008年9月24日星期三容器如何处理请求192008年9月24日星期三Servlet202008年9月24日星期三部署描述符文件(DD)①servlet把内部名映射到完全限定类名②servlet-mapping把内部名映射到公共URL名212008年9月24日星期三要点•HTTP协议的组成•GET和POST请求•Web容器的作用•servlet及其部署222008年9月24日星期三Servlet232008年9月24日星期三2请求和响应•Servlet生命周期•HttpServletRequest•HttpServletResponse242008年9月24日星期三Servlet生命周期252008年9月24日星期三请求对象HttpServletRequest接口由(应用服务器)开发商来实现,实现类不在API中。262008年9月24日星期三得到HTTP请求参数272008年9月24日星期三从请求对象得到其他内容•客户的平台和浏览器信息−getHeader(“User-Agent”)•与请求相关的cookie−getCookies()•与客户相关的会话−getSession()•请求的HTTP方法−getMethod()•请求的输入流−getInputStream()282008年9月24日星期三响应对象292008年9月24日星期三响应输出方式ØOutputStream(字节型)示例:ServletOutputStreamout=response.getOutputStream();out.write(aByteArray);ØPrintWriter(字符型)示例:PrintWriterwriter=response.getWriter();writer.println(“sometextandHTML”);302008年9月24日星期三请求重定向①客户原来键入的是:②请求到达名为”bar.do“的servlet时,servlet调用sendRedirect():sendRedirect(“foo/stuff.html”);③容器建立完整的URL,并把它放在HTTP响应的”Location”首部中:④浏览器收到响应后,向“Location”首部中指定的URL自动发起一个请求312008年9月24日星期三请求分派使用请求分派让应用的其他组件来接管全部或部分请求。示例:RequestDispatcherview=request.getRequestDispatcher(“result.jsp”);view.forward(request,response);或RequestDispatcherview=getServletContext().getRequestDispatcher(“/result.jsp”);view.forward(request,response);322008年9月24日星期三重定向VS.请求分派•重定向在客户端进行−用户在浏览器地址栏看到新的URL•重定向只是告诉浏览器去访问另一个URL•请求分派在服务器端发生−客户并不知道,因为浏览器地址栏上的URL没有任何改变•请求分派把请求传递给服务器上的另一个组件332008年9月24日星期三要点•servlet生命周期和API•HTTP和HttpServletRequest•HttpServletResponse及响应输出方式•请求重定向和请求分派342008年9月24日星期三3属性和监听者•初始化参数•监听者•servlet属性352008年9月24日星期三Servlet初始化参数在DD文件(web.xml)中:servletservlet-nameBeerParamTests/servlet-nameservlet-classTestInitParams/servlet-classinit-paramparam-nameadminEmail/param-nameparam-valuelikewecare@sample.com/param-value/init-param/servlet在servlet代码中:out.println(getServletConfig().getInitParameter(“adminEmail”));362008年9月24日星期三上下文初始化参数在DD文件(web.xml)中:servletservlet-nameBeerParamTests/servlet-nameservlet-classTestInitParams/servlet-class/servletcontext-paramparam-nameadminEmail/param-nameparam-valuelikewecare@sample.com/param-value/context-param在servlet代码中:out.println(getServletContext().getInitParameter(“adminEmail”));372008年9月24日星期三如果想在servlet或JSP之前运行一段代码,如何做到呢?382008年9月24日星期三ServletContextListener在web.xml文件放一个listener元素:listenerlistener-classcom.example.MyServletContextListener/listener-class/listenerServletContextListener类:publicclassMyServletContextListenerimplementsServletContextListener{publicvoidcontextInitialized(ServletContextEventevent){//doinitialization}publicvoidcontextDestroyed(ServletContextEventevent){//dofinalization}}392008年9月24日星期三监听者•属性监听者−ServletRequestAttributeListener−ServletContextAttributeListener−HttpSessionAttributeListener•生命周期监听者−ServletRequestListener−ServletContextListener−HttpSessionListener−HttpSessionBindingListener−HttpSessionActivationListener402008年9月24日星期三属性•属性作用域−上下文(ServletContext)−请求(ServletRequest)−会话(HttpSession)•存取属性的API−ObjectgetAttribute(Stringname)−setAttribute(Stringname,Objectvalue)−removeAttribute(Stringname)−EnumerationgetAttributeNames()412008年9月24日星期三要点•servlet和ServletContext初始化参数•作用域属性•属性监听者422008年9月24日星期三4会话状态•会话管理机制•HttpSession•会话监听者432008年9月24日星期三JEE中的会话•通过会话ID标识一个会话•容器和客户通过Cookie或URL重写方式交换会话ID•使用HttpSession来保存跨多个请求的会话状态442008年9月24日星期三cookie通过cookie交换会话ID信息452008年9月24日星期三URL重写•URL重写:URL++;jsessionid=1234567462008年9月24日星期三创建和得到会话创建会话:HttpSessionsession=request.getSession();从请求中得到会话:HttpSessionsession=request.getSession();创建会话和得到一个会话可以使用相同的方法!472008年9月24日星期三容器怎么知道cookie不能正常工作呢?容器什么时候决定使用URL重写?482008年9月24日星期三关键的HttpSession方法•返回第一次创建会话的时间getCreationTime()•返回容器最后一次得到有此会话ID的请求的时间getLastAccessedTime()•对于此会话,指定客户请求的最大间隔时间setMaxInactiveInterval(intinterval)•对于此会话,返回客户请求的最大间隔时间getMaxInactiveInterval()•结束会话invalidate()492008年9月24日星期三设置会话超时•在DD中配置会话超时web-app…session-configsession-timeout15/session-timeout/session-config/web-app•设置一个特定会话的超时session.setMaxInactiveInterval(20*60);502008年9月24日星期三使用Cookie•创建一个新的CookieCookiecookie=newCookie(“username”,name);•设置cookie在客户端上存活多久cookie.setMaxAge(30*60);•把cookie发送到客户response.addCookie(cookie)•从客户请求得到cookie(或多个cookie)Cookie[]cookies=request.getCookies();for(intI=0;icookies.length;i++){Cookiecookie=cookies[i];out.println(cookie.getName()+“:“+cookie.getValue());}512008年9月24日星期三会话迁移522008年9月24日
本文标题:Java Web 培训
链接地址:https://www.777doc.com/doc-6404907 .html