您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第4讲Servlet基础
1.5SERVLET中的页面跳转方式:重定向和请求转发Servlet技术重定向重定向是指页面重新定位到某个新地址,之前的request请求失效,发送一个新的request请求,并且,跳转后浏览器地址栏的内容将变成新的指定地址。重定向是通过HttpServletResponse对象的sendRedirect()方法实现的,该方法用于生成302响应码和Location响应头,从页通知客户端去重新访问Location响应头中指定的URL。publicvoidsendRedirect(Stringlocation)throwsIOExceptionlocation参数指定了重定向的URL,可以是相对路径也可以是绝对路径。示例代码:response.sendRedirect(/app/index.html);请求转发请求转发是指将请求转发到另一页面,此过程依然在request范围内,转发后浏览器地址栏的内容不变。请求转发使用RequestDispatcher接口中的forward()方法来实现。RequestDispatcher是一个接口,通过使用HttpRequest对象的getRequestDispatcher()方法可以获得该接口的实例对象。示例代码如下:RequestDispatcherrd=request.getRequestDispatcher(path);rd.forward(request,response);【操作演示】重定向与转发的区别重定向与转发的区别转发前后共享同一个request对象。而重定向前向不在一个请求中。1.6SERVLET配置基础Servlet技术1.6Servlet的配置编译好的Servlet源文件并不能响应用户请求,还必须将其编译成class文件。将编译后的.class文件放在WEB-INF/classes路径下,如果Servlet有包,则还应该将class文件放在对应的包路径下。为了让Servlet能响应用户请求,还必须将Servlet配置在Web应用中。从Servlet3.0开始,配置Servlet有两种方式:在部署描述符web.xml文件中进行配置。在Servlet中使用@WebServletAnnotation进行配置。方式一:在web.xml中配置Servlet配置Servlet的名字:对应web.xml中的Servlet/元素Servlet//表示要加载的Servlet类所在位置及Servlet的名称Servlet-namehello/Servlet-nameServlet-classtest.chapter5.hello.HelloServlet/Servlet-class/Servlet配置Servlet的URL:对应web.xml中的Servlet-mapping/元素Servlet-mapping//表示访问Servlet类的时候所采用的url路径Servlet-namehello/Servlet-nameurl-pattern/myhello/url-pattern/Servlet-mapping部署描述符属性属性描述ServletDeclarations指定Servlet属性值ServletMappings指定Servlet与地址间的映射WelcomeFileList指定Web应用程序的欢迎文件ServletConfigInitParameters指定Web应用程序的初始化参数ApplicationLifecycleListenerclasses指定监听器类FilterDefinitionsandFilterMappings指定过滤器类SessionConfiguration指定会话持续时间SecurityConstraints指定Web应用的安全模式Taglibraries指定JSP页面使用的标签库MIMETypeMappings指定MIME文件JNDInames指定EJB的JNDI名称web-app的servlet元素servlet元素的DTD格式的定义:!EKENENTservlet(icon?,servlet-name,display-name?,description?,(servlet-class|jsp-file),init-param*,load-on-startup?,run-as?,security-role-ref*)说明:?代表可以有0或1个,*代表可以有0或任意个,|表示二选一。指定该Servlet的初始化参数。形如:init-paramparam-name参数名/param-nameparam-value参数值/param-value/imit-paramservlet元素内可以有任意数量的init-param配置Servlet对象的创建时间,load-on-startup数字/load-on-startup,表示服务器启动时创建,并依照数字大小按顺序创建。通常,只有提供重要的后台服务的Servlet才会用这个设置。web-app的servlet-mapping元素servlet-mapping元素的DTD格式定义:!ELEMENTservlet-mapping(servlet-name,url-pattern)URL的组成:URL中的三个路径上下文路径(ContextPath):web应用程序的根目录,一般就是web应用程序的名称。由HttpServletRequest提供的getContextPath()获取。Servlet路径(Servletpath):在上下文路径之后由部署描述符中Servlet映射指定的路径。由HttpServletRequest提供的getServletPath()获取。路径信息(PathInfo):在Servlet路径之后的字符串均为路径信息。由HttpServletRequest提供的getPathInfo()获取。请求URI(RequestURI):请求URI=Contextpath+ServletPath+PathInfo由HttpServletRequest提供的getRequestURI()获取。Servlet映射的类型和顺序1.精确映射例如:url-pattern/test/do/url-pattern即,Servlet映射路径是/test/do,则请求路径必须是/test/do2.路径映射例如:url-pattern/test/*/url-pattern即,Servlet映射路径是/test/*,请求路径可能是/test/index.html或test/aa.jsp3.扩展映射例如:url-pattern*.jsp/url-pattern即,Servlet映射路径是*.jsp,则请求路径可能是/test/do/aa.jsp或/test.jsp4.默认映射如果无法找到匹配的Servlet,则将请求转发给默认的Servlet;如果没有默认的Servlet,则返回一个代表未找到指定Servlet的错误页面。方式二:使用@WebServletAnnotation配置@WebServlet(name=helloServlet,urlPatterns={/hello})publicclassHelloServletextendsHttpServlet{...}@WebServlet(/hello)publicclassHelloServletextendsHttpServlet{...}@WebServlet支持的属性属性是否必需说明asyncSupported否指定该Servlet是否支持异步操作模式。displayName否指定该Servlet的显示名initParams否用于为该Servlet配置参数loadOnStartup否用于将该Servlet配置成load-on-startup的Servletname否指定该Servlet的名称urlPatterns/value否这两个属性的作用完全相同。都指定该Servlet处理的URLServlet3.0规范提供的AnnotationServlet3.0规范在javax.servlet.annotation包下提供了如下Annotation:Annotation描述@WebServlet用于声明部署一个Servlet类@WebInitParam用于为Servlet或Filter配置参数@WebListener用于声明部署监听器@WebFilter用于声明部署过滤器@MultipartConfig指定某Servlet负责处理multipart/form-data类型的请求(主要用于文件上传)@ServletSecurity用于指定Servlet的安全与授权控制@HttpConstraint与@ServletSecurity一起使用@HttpMethodConstraint与@ServletSecurity一起使用部署描述符优先于注释部署描述符优先于注释。即部署描述符覆盖通过注释机制所规定的配置信息。如果打算使用Annotation来配置Servlet,有两点需要指出:不要在web.xml文件的根元素web-app.../中指定metadata-complete=true。该属性定义了web描述符是否完整,或者web应用程序的类文件是否针对指定部署信息的注释而进行检查。不要在web.xml文件中配置该Servlet。选择使用一种配置方式即可。
本文标题:第4讲Servlet基础
链接地址:https://www.777doc.com/doc-2195445 .html