java 软件工程师 web 课程总结 达内科技_第1页
java 软件工程师 web 课程总结 达内科技_第2页
java 软件工程师 web 课程总结 达内科技_第3页
java 软件工程师 web 课程总结 达内科技_第4页
java 软件工程师 web 课程总结 达内科技_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

WEB 课程总结GTZhou,纲要,ServletServlet基础Servlet生命周期表单处理Servlet中访问数据源Servlet中的重定向技术跟踪用户状态的技术过滤器监听器,纲要,JSPJSP基础运行JSP的三个阶段JSP1.2静态内容JSP代码元素指令动作(标签)注释异常处理JSP内置对象Scope,纲要,JSPJSP2.0EL表达式 JSTL,纲要,StrutsMVC基础WEB开发中的MVC实现Struts基础开发步骤FormbeanStruts标签国际化异常处理预置ActionTokenValidation FrameworkTiles Framework,Servlet,Servlet基础,一、概念 用Java语言编写的,运行在服务器上可处理客户端请求的程序。二、运行环境。Servlet运行在Web容器当中。Web容器就是控制Servlet生命周期的程序。Web容器有很多,如Tomcat,Weblogic,Jboss等。,Servlet基础,三、WEB应用程序文件夹指含有WEB-INF目录的文件夹。WEBRootcsshtmlimagejsjspWEB-INF web.xml classes lib,Servlet基础,四、在Tomcat中配置Web应用程序的几种方法。A、在%CATALINA_HOME%webapps下建立web应用程序文件夹。B、把web应用程序文件夹打包成war文件,放在%CATALINA_HOME%webapps下。C、在%CATALINA_HOME%confCatalinalocalhost下建立一个 $web应用程序名.xml。,Servlet基础,五、Servlet的配置。 CurrentTimeServlet .tarena.web.servlet.day1.CurrentTimeServlet CurrentTimeServlet /servlet/day1/time ,Servlet基础,六、url-pattern的匹配方式A、精确匹配/servlet/day1/timeB、模糊匹配/servlet/day1/*.func,Servlet生命周期,Servlet生命周期的四个阶段。实例化 调用Servlet的构造函数。初始化 调用init(ServletConfig config)方法。处理请求 调用service(ServletRequest req,ServletResponse res)方法。销毁实例 调用destroy()方法。,Servlet生命周期,实例化 调用Servlet的构造函数。 一旦客户端发送http请求至web容器,web容器会根据客户端请求的url实例化此url对应的servlet。 如果在web容器中已经有此url对应的servlet的实例,容器便不再实例化,即一个servlet在容器中只有一个实例。,Servlet生命周期,初始化 调用init(ServletConfig config)方法。 。 容器实例化Servlet之后,紧接着调用init方法,并传入一个ServletConfig对象。此方法容器只会调用一次,所以没有并发问题。 ServletConfig对象封装了web.xml中的标签。每个servlet都会有一个ServletConfig对象。 通过ServletConfig对象可以获得标签中的servlet-name,servlet-class,init-param标签的值。,Servlet生命周期,处理请求 调用service(ServletRequest req,ServletResponse res)方法。 当init方法正常执行完毕,servlet就可通过调用service方法处理客户端发送的Http请求。 容器会传入HttpServletRequest, HttpServletResponse这两个对象。 客户每次请求相同的servlet,都会调用此方法。由于同一个servlet在容器中只有一个实例,所以多个客户同时请求同一个servlet,会导致线程的不安全。,Servlet生命周期,销毁实例 调用destroy()方法。 当容器shutdown时,容器会undeploy所有的web应用程序(context)。 应用程序被容器undeploy时,容器会依次调用此应用程序中所有的servlet的destroy方法。 只有当所有的destroy方法都执行完毕的时候,容器才会真正的停止。,几个重要对象,Web容器传递给Servlet的几个重要对象。ServletConfigServletContextHttpServletRequestHttpServletResponse,表单处理,表单的两种请求方式。GET请求POST请求,表单处理,GET请求 表单中的内容放在请求头中提交给服务器。URL是请求头中的一个内容,所以提交的URL会发生变化,浏览器会把表单中所有控件的内容做为参数跟在URL的后面。 形式为 ?参数名=参数的值&参数名=参数的值&参数名=参数的值 ?后面的字符串被称作做QueryString(查询字符串),在Servlet中可以通过HttpServletRequest.getQueryString()来获得。 查询字符串中如有汉字,在Tomcat环境下必须修改%CATALINA_HOME%/conf/server.xml中的Connector标签。在其中增加一个URIEncoding=xxxxx的属性。 否则取得参数的时候会发生乱码。 安全性低,传送的数据量较小。,表单处理,POST请求 表单中的内容放在请求主体中提交给服务器。URL不发生改变。 安全性相对较高,可传送任意大小的数据,但一般服务器会对此有所限制。,表单处理,表单处理中的编码问题。 请求中的编码如果不是iso8859-1,必须使用HttpServletRequest中的setCharacterEncoding方法来设置编码。一般可在过滤器中使用此方法,减少重复编码。public void setCharacterEncoding(java.lang.String env) throws java.io.UnsupportedEncodingException,表单处理,获取请求的中的参数可通过HttpServletRequest的以下四个方法。public java.lang.String getParameter(java.lang.String name)Returns Stringpublic java.util.Enumeration getParameterNames()Returns Enumerationpublic java.lang.String getParameterValues(java.lang.String name)Returns Stringpublic java.util.Map getParameterMap()Returns Map,Servlet中访问数据源,在Servlet中访问数据源,必须先在Web容器中配置数据源。 在不同的Web容器中配置数据源的方式各不相同,有图形化的方式配置,也有修改xml配置文件的方式配置。 在tomcat5.5中,如果是采用上文中所描述的c方案部署web应用程序的话,可以通过在$web应用程序名.xml中增加Resource标签的方式来配置。,Servlet中访问数据源, ,Servlet中访问数据源,在Servlet中访问数据源,必须先在Web容器中配置数据源。 在不同的Web容器中配置数据源的方式各不相同,有图形化的方式配置,也有修改xml配置文件的方式配置。 在tomcat5.5中,如果是采用上文中所描述的c方案部署web应用程序的话,可以通过在$web应用程序名.xml中增加Resource标签的方式来配置。,Servlet中访问数据源,在Servlet中通过数据源的名称取得数据源,然后再取得数据库链接。数据源的名称前必须加上java:comp/env/前缀。Context cxt = new InitialContext();DataSource ds = (DataSource)cxt.lookup(java:comp/env/jdbc/pointbase);Connectoin conn = ds.getConnection();,Servlet中的重定向技术,实现了服务器中不同资源之间的跳转。MVC架构中,C层调用V层就是通过这些技术来实现的。Servlet中的两种重定向技术。Forward(转发)Redirect(重定向),Servlet中的重定向技术,Forward(转发) 服务器端做的重定向。只能在当前应用程序中重新定向,是同一个request。 表现为浏览器地址栏中的URL不发生变化。 通过ServletContext取得请求分发器,然后转发。参数只能是绝对路径。RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(/servlet/day3/studentlist3);dispatcher.forward(request, response); 通过HttpServletRequest取得请求分发器,然后转发。参数可以是绝对路径,也可以是相对路径。RequestDispatcher dispatcher = request.getRequestDispatcher(studentlist.jsp);dispatcher.forward(request, response);,Servlet中的重定向技术,Forward(转发) 转发时,可在服务器上多个资源之间传递对象。request.setAttribute(String,Object); 在转发代码之前不应往response中写入任何内容。如果写入的话,只要写入response的字符串没超过缓存的大小,那么缓存会被自动清空,然后转发。 如果已经超过了缓存的大小,那么转发便会失败,抛出IOException的异常。 转发代码之后往response中写入的任何字符串会被容器忽略。 对于转发的路径,建议用绝对路径。因为访问服务器上Servlet的URL都是虚拟路径,虚拟路径经常会发生变化,如果再用相对路径去转发的话,就会找不到目标资源了。,Servlet中的重定向技术,Redirect(重定向) 服务器向客户端发出重定向指令,让客户端重新请求服务器上的资源。可重定向至Internet上的任何资源,是跨应用程序的重定向,会产生新的request。 表现为浏览器地址栏中的URL会变成新的请求的URL。完全路径: response.sendRedirect();相对路径: response.sendRedirect(./studentList.jsp);带应用程序名的绝对路径:例如、MyServlet为应用程序名。response.sendRedirect(/MyServlet/studentList.jsp); 在sendRedirect代码之前和之后不应往response中写入任何内容。如果有写入的话,那么服务器也会忽略。,跟踪用户状态的技术,Session技术Cookie技术URL Rewriting技术Hidden输入框技术,跟踪用户状态的技术,Session技术 一种服务器端保存数据的技术,可在短时间内保存任意类型的数据。 Web容器开辟一块内存空间,用于保存客户端用户的数据,然后再生成一个序列号用来标识这个内存空间。 这个内存空间就是HttpSession对象,序列号就是sessionId。 Web容器为了识别用户在服务器上使用的是哪个Session,还是需要借助客户端保存数据的技术把sessionid保存在客户端。 以后,客户端再次请求服务器的时候,把sessionid再次提交给服务器,服务器即可知道此用户对应的session。 sessionid保存在客户端的技术,可采用下述的Cookie技术和URL Rewriting技术。,跟踪用户状态的技术,Session技术Session的生命周期创建在当前用户没有session的场合,通过request.getSession(true)方法可创建Session。销毁session.invalidate();或者session超时。,跟踪用户状态的技术,Session技术设置Session超时的方法。代码session.setMaxInactiveInterval(int interval);web.xml配置 20,跟踪用户状态的技术,Session技术获得session的方法。request.getSession(boolean create);true: 如果有session ,return session,否则 create session ,return session;false: 如果有session ,return session,否则 return null;request.getSession() = request.getSession(true);,跟踪用户状态的技术,Session技术在Session中存取删对象。session.setAttribute(String,Object);session.getAttribute(String);session.removeAttribute(String);,跟踪用户状态的技术,Cookie技术 一种客户端保存数据的技术,可在长时间内保存字符串类型的数据。 产生Cookie、往浏览器种Cookie的代码。Cookie cookie = new Cookie(name,value);response.addCookie(cookie); Cookie的默认生存期为浏览器进程,一旦客户端的浏览器进程终止了,那么Cookie也没有了。,跟踪用户状态的技术,Cookie技术 服务器往客户端种的sessionid的cookie的生存期即是浏览器进程。所以客户端浏览器进程如果终止了,比如浏览器关闭了。 那么即使服务器上的Session还在,客户端由于无法通过Cookie获得sessionid、所以也无法取得服务器上的Session了。 对于Windows下的单窗口多标签的浏览器来说,由于多个标签在一个进程当中,所以这些标签共享的是同一组Cookie,那也就共享了同一个sessionid,因此也共享了同一个Session。,跟踪用户状态的技术,Cookie技术设置Cookie的生存期。Cookie cookie = new Cookie(name,value);cooke.setMaxAge(60 * 60 * 24 * 365);response.addCookie(cookie);获取Cookie。Cookie cookies = request.getCookies();,跟踪用户状态的技术,Cookie技术 浏览器可以禁用Cookie,这样服务器往客户端种的Cookie全部失效。 例如,如果禁用Cookie的话,那么服务器生成的sessionid将不能保存在客户端,客户端就不能使用服务器上的session了。 此时就只能采用下述的URL Rewriting技术来保存sessionid了。,跟踪用户状态的技术,URL Rewriting技术response.encodeURL(String url)response.encodeRedirectURL(String url),跟踪用户状态的技术,Hidden输入框技术略。,过滤器,过滤器是可以对请求或者响应执行过滤任务的对象。 过滤器可以在一个request进入某服务器资源(Servlet,JSP等)之前,对request进行拦截,并处理。 也可在一个response传递给客户端之前,对response进行拦截,并处理。 在这些拦截处理中,一般可以做一些共通的业务。比如权限验证,编码处理,判断Session是否过期等等。,过滤器,过滤器的生命周期public void init(FilterConfig filterConfig) throws ServletException当前应用程序加载时实例化过滤器并调用init方法。public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws java.io.IOException, ServletException执行过滤任务。chain.doFilter(request,response)方法是把请求传递给下一个FilterChain中的下一个资源。链条中如果有多个过滤器,那么过滤器在链条中的顺序是由web.xml中的filter-mapping的顺序决定的。public void destroy()当前应用程序卸载时调用。,过滤器,过滤器中常常结合HttpServletRequest或HttpServletResponse的包装器一起使用,目的是为了改变这两个对象的原有功能,以达到“欺骗”目标资源的目的。 从而可以在不改变目标资源代码的前提下,方便地改变或增加原有资源的功能,建立了松散的耦合,实现了面向方面编程的思想。,监听器,事件源被观察的对象。ServletRequest,HttpSession,ServletContext。监听器观察事件源的对象。ServletRequestListener, ServletRequestAttributeListenerHttpSessionListener, HttpSessionAttributeListenerServletContextListener, ServletContextAttributeListener,监听器,事件对象的状态发生了变化。事件源的创建,销毁,改变。Web应用程序中的两类监听器。监听Scope对象本身的监听器。监听Scope的属性的监听器。,JSP,JSP基础,JSP是基于文本的、可包含静态和动态内容的在服务器端运行的程序。 静态内容可以是: HTML , XML, Text, JavaScript, CSS. 动态内容可以是:JAVA代码, JAVABEAN属性, JSTL, 自定义标签库。 JSP的本质即是Servlet。,运行JSP的三个阶段,翻译容器根据一定的规则把JSP转换为Servlet源代码。Tomcat翻译后的文件放在%CATALINA_HOME%/work/Catalina/localhost/$webapp/org/apache/jsp下。 编译容器调用javac命令,编译翻译出来的Servlet源代码,生成class文件。翻译和编译对于一个JSP文件来说只做一次,除非文件发生了改动。执行运行class文件。,JSP1.2,静态内容客户端负责解析的内容。翻译阶段、静态内容会放在jspService方法的out.write()方法中。,JSP1.2,JSP代码元素声明块java code 可以声明全局变量或方法,不能访问jsp内置对象。 翻译阶段、声明块中的代码会原封不动地放在jspService方法外。,JSP1.2,代码块java code 可以写任意的java代码(代码以分号结尾),使用jsp内置对象,声明局部变量,控制程序的流程,求值并输出。 优点,控制程序的流程。 缺点,不善于输出表达式的值。因为表达式往往是静态内容混合动态内容。 翻译阶段、代码块中的代码会原封不动地放在jspService方法中。,JSP1.2,表达式java expression 求java表达式的值并输出(不能以分号结尾),可以使用jsp内置对象。 优点,求值并输出。容易和静态内容混合。 缺点,不能控制程序的流程。 翻译阶段、表达式中的代码会原封不动地放在out.print()中。,JSP1.2,指令 能够影响JSP容器翻译出来的servlet代码的结构,不会产生输出。,JSP1.2,指令Page指令 默认为 false 默认根据servlet的版本决定,JSP1.2,指令Include指令包含资源至当前jsp中,发生在翻译阶段,是静态包含。Taglib指令引用标签库,并定义标签库的前缀。,JSP1.2,动作(标签)Include包含资源至当前jsp中,发生在运行阶段,是动态包含。Forward用于转发的标签,功能同RequestDispatcher.forward(request,response)相同。,JSP1.2,动作(标签)UseBean对javabean进行相关操作的标签。定义:任何的JAVA类满足以下标准都可以说是JAVABEAN序列化拥有一个缺省构造器有类的一些属性(实例变量)有公共的 setter/getter方法通过事件机制可以与其它的组件通信,JSP1.2,动作(标签)用于实例化javabean,实例化后放在scope中。id:实例化后在JSP中的变量名。 实例化后在Scope中的属性名。class:javabean的类名。type:javabean的类型。scope:javabean实例化的作用域。,JSP1.2,动作(标签)把value中的值赋值给javabean中的id属性。把请求中的参数student赋值给javabean的id属性。把请求中的参数id赋值给javabean中同名的属性。 把请求中所有的参数赋值给javabean中同名的属性。,JSP1.2,注释,JSP1.2,异常处理JSP中声明异常处理在可能发生异常的JSP中使用如下page指令。当前jsp如果发生任何异常,将会转发至error.jsp错误页面。在错误页面中使用如下page指令可取得jsp的内置对象exception。此指令不是必须的,仅在需要取得内置对象exception的场合才使用。,JSP1.2,异常处理web.xml中声明全局的异常处理404/notFound.htmljava.lang.RuntimeException /error.jsp,JSP1.2,JSP的内置对象,JSP1.2,JSP的内置对象 在 pageContext中,可以取得servletcontext、session、request、response、config等对象。 查看JSP翻译成Servlet的代码可以发现,JSP就是通过pageContext来获得这些对象的。 pageContext是不能跨越请求的,它只在当前页面有效,离开jspService(req,res) 方法就会销毁.,JSP1.2,Scope Scope是Web应用程序中共享对象的范围,也叫作用域。 需要共享的对象可以放在下面四个对象的属性中。 application 属性为整个应用所共享。 session 属性为同一客户端发出的不同请求所共享。 request 属性为同一请求的不同页面所共享。 page 属性只能在当前页面共享。可作为JSP代码块、JSP表达式、JSTL标签和EL表达式的通信接口。 上述四个对象的顺序,也就是scope从大到小的顺序。,JSP1.2,Scope设置属性setAttribute(String,Object);读取属性getAttribute(String);删除属性removeAttribute(String);,JSP2.0,EL表达式 是一种简单的表达式语言,可以求值并输出。 有以下这些特点。可用的命名空间(PageContext 属性)嵌套属性和集合的访问器关系,逻辑,算数操作符映射到Java类中静态方法的可扩展方法。一组内置对象,JSP2.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论