xml怎么添加映射javaweb_学习JavaWeb这一篇就够了 Servlet3 (8/8)

学习JavaWeb这一篇就够了,从入门到精通,由浅至深,共八章,此篇为第八章第1小节。附带安装包下载。

配套资料,免费下载

链接:

https://pan.baidu.com/s/1G1YUANaBvGjzE-c-Z0xUWw

提取码:txnf

Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布。该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署。其中有几项特性的引入让开发者感到非常兴奋,同时也获得了 Java 社区的一片赞誉之声:

  1. 新增的注解支持:该版本新增了若干注解,用于简化 Servlet、过滤器(Filter)和监听器(Listener)的声明,这使得 web.xml 部署描述文件从该版本开始不再是必选的了。
  2. 文件上传API简化:从该版本开始,极大地简化了文件上传的操作。
  3. 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度。
  4. 动态注册组件:在初始化ServletContext容器的时候,可以支持动态注册三大组件。
  5. 可插性支持:如果说 3.0 版本新增的注解支持是为了简化 Servlet/ 过滤器 / 监听器的声明,从而使得 web.xml 变为可选配置, 那么新增的可插性 (pluggability) 支持则将 Servlet 配置的灵活性提升到了新的高度。熟悉 Struts2 的开发者都知道,Struts2 通过插件的形式提供了对包括 Spring 在内的各种开发框架的支持,开发者甚至可以自己为 Struts2 开发插件,而 Servlet 的可插性支持正是基于这样的理念而产生的。使用该特性,现在我们可以在不修改已有 Web 应用的前提下,只需将按照一定格式打成的 JAR 包放到 WEB-INF/lib 目录下,即可实现新功能的扩充,不需要额外的配置。

8.1、注解开发

8.1.1、servlet注解

如何创建:

package com.caochenlei.servlet3.annotation;import javax.servlet.ServletException;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet(        //代表servlet名称        name = "AnnotationServlet",        //代表servlet映射地址,可以写多个,value与urlPatterns一样,二者不能同时出现        value = {"/AnnotationServlet"},        //代表servlet初始化顺序        loadOnStartup = 2,        //代表servlet初始化参数,可以写多个        initParams = {@WebInitParam(name = "user",value = "zhangsan")},         //代表servlet是否支持异步,默认为false        asyncSupported = false)public class AnnotationServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("doPost ...");    }    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("doGet ...");    }}

属性列表:

a2dbc0d57e6ff698547e5cf70d0b52ca.png

如何测试:

打开浏览器输入:http://localhost:8080/servlet3_0_war_exploded/AnnotationServlet

检测控制台输出:

ba199eb4a65531303779624a2ec83b2c.png

8.1.2、filter注解

如何创建:

package com.caochenlei.servlet3.annotation;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.annotation.WebInitParam;import java.io.IOException;@WebFilter(        filterName = "AnnotationFilter",//代表filter名称        value = {"/*"},//代表filter映射路径,可以写多个,value与urlPatterns一样,二者不能同时出现        dispatcherTypes = {DispatcherType.REQUEST},//代表filter拦截类型        initParams = {@WebInitParam(name = "user", value = "zhansan")},//代表filter初始化参数,可以写多个        asyncSupported = false,//代表filter是否支持异步,默认为false        servletNames = {"AnnotationServlet"}//代表filter指定拦截哪几个servlet)public class AnnotationFilter implements Filter {    public void init(FilterConfig config) throws ServletException {    }    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)            throws ServletException, IOException {        System.out.println("doFilter ...");        chain.doFilter(req, resp);    }    public void destroy() {    }}

属性列表:

e177d0ecd5c862870454c334d8638cbe.png

如何测试:

打开浏览器输入:http://localhost:8080/servlet3_0_war_exploded/AnnotationServlet

检测控制台输出:

1cd52aa2ee86aa75ca649315335d9481.png

8.1.3、listener注解

如何创建:

package com.caochenlei.servlet3.annotation;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.annotation.WebListener;@WebListener()public class AnnotationListener implements ServletContextListener {    @Override    public void contextInitialized(ServletContextEvent servletContextEvent) {        System.out.println("contextInitialized ...");    }    @Override    public void contextDestroyed(ServletContextEvent servletContextEvent) {        System.out.println("contextDestroyed ...");    }}

如何测试:

重启服务器,观察控制台:

ab7128dda9730136343598d749640c02.png

8.1.4、两种配置同时存在

  • 对于servlet来说:若两种配置方式的url-pattern值相同,则应用无法启动。若两种配置方式的url-pattern值相同,那么相当该servlet具有两个映射url-pattern。
  • 对于filter来说:无论两种配置方式的url-pattern值是否相同,其都是作为独立的filter出现的。
  • 对于listener来说:如果两种配置方式都进行了同一个listener注册,那么也只能算一个listener。

8.1.5、如何禁用注解组件

如果只想要使用web.xml中的配置而忽略注解注册的组件,只需要在web.xml跟标签添加一个属性即可。

<?xml version="1.0" encoding="UTF-8"?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值