编辑: 摇摆白勺白芍 2019-09-04
JavaEE

6 Servlet 3.

0 中的新特性

2 议题 ? 易于开发和部署 ? 模块化 web.xml ? 动态配置 ? 异步 Servlet

3 ? 用于 Web 应用程序的功能全面的中型 profile ? web profile 中的各种技术 C Servlet 3.

0、JSP 2.

1、对其他语言的调试支持、EL 1.

2、JSTL 1.

2、JSF 2.0 C EJB Lite 3.

1、JTA 1.

1、JPA 2.

0、通用批注 C Bean validation 1.0 Web Profile 完整的 JavaEE

6 Web Profile

4 易于开发和部署

5 简化的打包 foo.ear foo_web.war WEB-INF/web.xml WEB-INF/classes com.sun.FooServlet com.sun.TickTock foo_ejb.jar com.sun.FooBean com.sun.FooHelper foo.war WEB-INF/classes com.sun.FooServlet com.sun.TickTock com.sun.FooBean com.sun.FooHelper Java EE

5 Java EE

6 6 Servlet ― 下一代 ? Servlet 3.0 ― 易于开发 C 主要关注点 ? 增强了 API 以便使用 SE

5 中新的语言特性 C 例如:批注、泛型(Generics) C 在上次 JavaEE

5 中漏掉的 Servlet ? 部署描述批注 C 现在 web.xml 为可选 ? 用于保证 API 类型安全的泛型(Generics) C 不影响后向兼容性 ? 惯例优先原则(Convention over) C 更好的默认值 C 例外配置

7 Servlet 2.x public class HelloServlet extends HTTPServlet { public void doGet(HttpServletRequest req , HttpServletResponse res) throws Exception { … } } HelloServlet myservlet.HelloServlet HelloServlet /hello . . .

8 Servlet 3.0 ― 示例

1 无web.xml @WebServlet(name=‖HelloServlet‖, urlPatterns=D/hello‖) public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest req , HttpServletResponse res) throws Exception { . . . } //name=‖HelloServlet‖, urlPatterns=‖/hello‖ @WebServlet(D/hello‖) public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest req , HttpServletResponse res) throws Exception { . . . }

9 @WebServlet ? 用于指定 servlet ? 批注至少必须有 urlPattern C urlPattern 属性是默认属性 ? 即value() ? 所有其他字段都有合理的 默认值 C 例如,servlet 的名称默认为 servlet 的全称类名 ? 类的其余内容与之前相同 C 必须扩展 HttpServlet 类C重写 doXXX() 来处理行为 ? @WebListener、@WebFilter 的工作方式相同

10 Servlet 3.0 ― 示例

3 @WebServlet( urlPatterns= /hello , loadOnStartup=1 , initParams={ @InitParam(name= db , value= jdbc:derby... ) , @InitParam(name= dbuser , value= fred ) , @InitParam(name= dbpasswd , value= fred ) } ) public class HelloServlet extends HttpServlet { public void init(ServletConfig config) throws ServletException { String jdbc = config.getInitParameter( db );

… } …

11 使用批注 ? 用于部署 servlet、过滤器、监听器的批注 C @WebServlet ― 向web.xml 中添加 servlet 项C@WebFilter ― 添加过滤器项 C @WebListener ― 添加监听器项 C @WebInitParam ― 添加参数项 C @MultiPartConfig ―表示 servlet 要求使用 mime/multipart 数据 格式 ? 在部署时使用 web.xml 覆盖批注值

12 Servlet 3.0 ― 示例

2 @WebFilter(urlPatterns= /hello , dispatcherTypes={ DispatcherType.FORWARD} ) public class HelloServletFilter implements Filter { public void doFilter(HttpServletRequest req , HttpServletResponse res) { . . . }

13 Multipart 支持 ? Multipart 格式用于在 HTTP 流中分割传输内容 C 通常是表单数据、非ASCII 数据、二进制数据等 Name: File to upload: POST /upload HTTP/1.0 Content-Type: multipart/form-data;

boundary=----ABCDEFGHIJK … ----ABCDEFGHIJK Content-Disposition: form-data;

name=‖filename‖ uploaded_file.txt ----ABCDEFGHIJK Content-Disposition: form-data;

name=‖myfile‖;

filename=‖a_text_file.txt‖ …

14 Multipart 支持 ? Servlet 目前原生支持 multipart 数据 C 以前必须借助于第三方库 ? 获得 MIME 内容的新方法 C HttpServletRequest.getParts() C Iterable C HttpServletRequest.getPart(String name) C String ? 类似功能 C HttpServletRequest.getParameter(Dname‖) C HttpServletRequest.getPart(Dname‖) ? 比前者更通用的形式

15 @MultipartConfig 批注 ? 帮助 servlet 容器确定哪个 servlet 将处理 multipart 数据 ? 配置容器处理数据的方式 C 临时文件的位置 C 最大文件大小 @WebServlet(D/hello‖) @MultipartConfig(location=‖/tmp‖) public class HelloServlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) { Part part = req.getPart(Dmyfile‖);

InputStream is = part.getInputStream();

//Read in file . . . }

16 模块化 web.xml

17 最新发展 ― web.xml ? 多种非常高效的 web 框架 ? 框架的使用需要(可能是复杂的)配置 C 如果使用多种框架则难以管理 ― 复杂性增加 C 需要知道各框架之间的整合方式 ? 例如 C 声明控制器 servlet 及其参数 C 处理请求前后所使用的过滤器 C 声明监听器以便管理应用程序生命周期的各点 ? 很多这种配置在应用程序间通用

18 模块化 web.xml ? 允许在没有框架配置的情况下使用框架 C 为您的应用程序保留 web.xml C 将框架配置工作放在框架这边 ? 允许框架将它们的 web.xml 存储在自己的 JAR 中C在应用程序启动期间合并它们 ? web.xml 分段的概念

19 web.xml 与web-fragment.xml web.xml … web-fragment.xml … web-fragment.xml … 来自框架的 JAR

20 web-fragment.xml ? 用于指定整个 web.xml 的一部分 ? 除根元素外与 web.xml 相同 C ? 位于框架的 JAR 中CMETA-INF/web-fragment.xml C JAR 文件必须位于 WEB-INF/lib 中21 web-fragment.xml 示例 javax.faces.STATE_SAVING_METHOD client . . . Faces Servlet javax.faces.webapp.FacesServlet

1 Faces Servlet *.jsf . . .

22 web-fragment.xml 示例 jsf_framework.jar META-INF/web-fragment.xml mywebapp.war WEB-INF/lib/jsf_framework.jar

23 资源共享 ? 静态页面和 JSP 页面,资源不再局限于应用程序的 DOCROOT C 允许框架捆绑自己的资源 ? 资源位于框架的 JAR 文件中 C META-INF/resources C ServletContext.getResourceAsStream() 将知道如何解析资源 位置 ? 应用程序 DOCROOT 中的资源优先于框架 JAR 文件中 的资源 C 如果存在命名空间冲突 ? D/‖ 对应 DOCROOT 或META-INF/resources

24 资源共享示例 mywebapp.war /index.jsp /WEB-INF/lib/framework.jar! /META-INF/web-fragment.xml /META-INF/resources/index.jsp /META-INF/resources/shared.jsp http://server.com/mywebapp/shared.jsp mywebapp.war!/WEB-INF/lib/framework.jar! /META-INF/resources/shared.jsp http://server.com/mywebapp/index.jsp mywebapp.war!/index.jsp

25 动态配置与按需加载

26 动态配置 ? 以编程方式添加 servlet、监听器和过滤器 C 例如,自动添加 Strut 的ActionServlet ? 只能在下列各项中执行配置 C ServletContextListener.contextInitialized() ? 由应用程序实现 ? 应用程序启动时调用 C ServletContainerInitializer.onStartup() ? 稍后详细介绍 C 使用返回的 Registration 对象进一步定制 ? 例如,映射、初始化参数、servlet 名称等

27 web.xml 配置 action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml

2 action *.do

28 编程式配置 @WebListener(DAuto configure Struts‖) public class MyListener implements ServletContextListener { public void contextInitialized(ServletContextEvent evt) { ServletContext ctx = evt.getServletContext();

//Register the servlet ServletRegistration.Dynamic servReg = ctx.addServlet( Daction‖, Dorg.apache.struts.action.ActionServlet‖);

//Set init parameter servReg.setInitParameter(Dconfig‖ , D/WEB-INF/struts-config.xml‖);

servReg.setLoadOnStartup(2);

//Add mappings servReg.addMapping(D*.do‖);

//Annotate with @MultipartConfig servReg.setMultipartConfig( new MultipartConfigElement(D/tmp‖));

} }

29 动态配置的局限 ? 注册仅发生在应用程序启动时 C 之后不能更改 ? 无法以编程方式删除 servlet........

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题