JavaWeb-Servlet3.0新特性-注解
来源:互联网 发布:dw软件怎么下载 编辑:程序博客网 时间:2024/06/16 20:51
话说:
不知道有读者看我的博客后,发觉这个人好傻,早都有新东西了,还在写一些陈芝麻烂稻谷的功能,是的。因为这是我的博客,主要还是给自己作思维梳理和回味人生用的。如果一不小心帮助到了你,那就更好了。
前面我们依次用上古的方式写了Servlet、Filter、Listener,主要是因为一些类和接口使用的Servlet的版本都是Servlet2.3或者2.几的。我们使用它们,都是在web.xml里面配啊配。
这里用Servlet3.0的新特性@——注解的方式来简化一下。
目录
案例一:Servlet注解配置
案例二:Filter注解配置
案例三:Listener注解配置
笔者的测试环境是这样的:
IntelliJ IDEA 开发版本
Tomcat 7.0.5
导入:javax.servlet-api-3.1.0.jar包(Maven仓库)
是在上一个工程JavaWeb_Servlet基础上做的测试。
案例一:Servlet注解配置
之前是这样配置的:
<servlet> <servlet-name>news</servlet-name> <servlet-class>com.hmc.jdbc.news.servlet.NewsServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>news</servlet-name> <url-pattern>/news.do</url-pattern> </servlet-mapping>
注解配置是这样的:
package com.hmc.jdbc.news.servlet;import com.hmc.jdbc.news.dao.BaseDao;import com.hmc.jdbc.news.dao.NewsDao;import com.hmc.jdbc.news.model.News;import com.hmc.jdbc.news.util.StringConvertUtil;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.List;/** * User:Meice * 2017/10/5 */@WebServlet(urlPatterns = "/news.do")public class NewsServlet extends BaseServlet { NewsDao nd = new NewsDao(); BaseDao bd = new BaseDao(); //查(R) // 未避免代码混乱,把显示新闻列表封装成方法;这里采用最高级的显示新闻方法listShow3() private void list (HttpServletRequest req, HttpServletResponse resp){ String sql = "select * from t_news"; List<Object> list =bd.listShow3(sql,News.class,null); //3 存储到req中 req.setAttribute("list", list); try { req.getRequestDispatcher("newsShow.jsp").forward(req, resp); } catch (ServletException e) { } catch (IOException e) { } }}
变化的部分就在类上方的@这里
@WebServlet(urlPatterns = "/news.do")
可以展开想象的翅膀,之前我们一开始针对CURD,每个功能都写了一个Servlet,配置后的场面是这样的:
<!--news Add Servlet--> <servlet> <servlet-name>newsAdd</servlet-name> <servlet-class>com.hmc.jdbc.news.servlet.NewsAddServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>newsAdd</servlet-name> <url-pattern>/newsAdd.do</url-pattern> </servlet-mapping> <!--news Show Servlet--> <servlet> <servlet-name>newsShow</servlet-name> <servlet-class>com.hmc.jdbc.news.servlet.NewsShowServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>newsShow</servlet-name> <url-pattern>/newsShow.do</url-pattern> </servlet-mapping> <!-- news Update Servlet--> <servlet> <servlet-name>newsUpdate</servlet-name> <servlet-class>com.hmc.jdbc.news.servlet.NewsUpdateServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>newsUpdate</servlet-name> <url-pattern>/newsUpdate.do</url-pattern> </servlet-mapping> <!--news Update Do Servlet--> <servlet> <servlet-name>newsUpdateDo</servlet-name> <servlet-class>com.hmc.jdbc.news.servlet.NewsUpdateDoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>newsUpdateDo</servlet-name> <url-pattern>/newsUpdateDo.do</url-pattern> </servlet-mapping> <!--news Del Servlet--> <servlet> <servlet-name>newsDel</servlet-name> <servlet-class>com.hmc.jdbc.news.servlet.NewsDelServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>newsDel</servlet-name> <url-pattern>/newsDel.do</url-pattern> </servlet-mapping>
配置得好辛苦啊!可是,如果不回味这样一个过程,就无法体会到多个Servlet整合为一个Servlet的妙处,也无法更加深刻的体会到注解的妙处!
注解,大大简化配置。
我们看看前辈7年前发表的文章,里面有详细讲解,仅供参考。
https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/
案例二:Filter注解配置
回顾我们前面那篇关于Filter的博客,其中有个案例是关于字符编码初始化过滤的。之前我们写好Filter之后,在web.xml里面是这么配置的。
<filter> <filter-name>encoding</filter-name> <filter-class>com.hmc.jdbc.news.filter.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param></filter><filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
现在,我们用注解是这么配置的:web.xml里面通通不用配置啦!
package com.hmc.jdbc.news.filter;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.annotation.WebInitParam;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * User:Meice * 2017/10/8 */@WebFilter(urlPatterns = "/*", initParams = { @WebInitParam(name = "encoding",value = ""), @WebInitParam(name = "encoding2",value ="gbc" ),})public class EncodingFilter implements Filter { String encoding = null; @Override public void init(FilterConfig config) throws ServletException { System.out.println("过滤器初始化啦......"); System.out.println("初始化参数值: "+config.getInitParameter("encoding")); //对初始化做个设置 encoding = config.getInitParameter("encoding"); if(encoding == null || "".equals(encoding)){ encoding="UTF-8"; } System.out.println("初始化参数值: "+encoding); } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { //向下转型一下,因为用这个响应和请求熟悉,而且可以用到session HttpServletRequest request =(HttpServletRequest) req; HttpServletResponse response =(HttpServletResponse)resp; //我们设置初始化值的目的是什么?就是为了在初始化的时候就设置好值,而不用人为设置 request.setCharacterEncoding(encoding); response.setCharacterEncoding(encoding); System.out.println("过滤请求....."); chain.doFilter(request,response); System.out.println("过滤响应....."); } @Override public void destroy() { System.out.println("过滤器销毁...."); }}
这里变化点也在类的头部:
@WebFilter(urlPatterns = "/*", initParams = { @WebInitParam(name = "encoding",value = ""), @WebInitParam(name = "encoding2",value ="gbc" ),})
以上需要注意的是,初始化参数的配置方式以及多个初始化参数的配置。这个的返回类型是WebInitPararm[]数组,可以配置多个,结尾用逗号隔开。
案例三:Listener注解配置
同样,前面那篇JavaWeb_Filter博客里面的案例——HttpSessionListener,我们在web.xml中是这么配置的。
<listener> <listener-class>com.hmc.jdbc.news.listener.TestHttpSessionListener</listener-class></listener>
用注解配置是这样的:
package com.hmc.jdbc.news.listener;import javax.servlet.annotation.WebListener;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;/** * User:Meice * 2017/10/8 */@WebListener()public class TestHttpSessionListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent e) { HttpSession session = e.getSession(); System.out.println("会话创建了....."+"sessionID为: "+session.getId()); //注意,这里测试可以,实际运行的时候,一旦销毁,页面就不显示啦!刚创建,又销毁;刚创建,又销毁...销毁销毁无穷期也... //session.invalidate(); //还有一种方式就是设置session-timeout } @Override public void sessionDestroyed(HttpSessionEvent e) { //促使会话失效;在这里设置没用滴 // e.getSession().invalidate(); System.out.println("会话销毁了...."); }}
变化点依旧在那里:
@WebListener()
因为监听器只需要指定类就可以了,所以@起来很简单。
当然,Servlet还有很多其他新特性,读者如果感兴趣,我们一同去探索吧!午安!
- JavaWeb-Servlet3.0新特性-注解
- [Servlet3.0新特性]注解替代配置文件
- servlet3.0新特性 Annotation注解配置
- JavaWeb学习之Servlet3.0新特性详解
- servlet3.0 新特性
- servlet3.0新特性
- Servlet3.0新特性
- servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- servlet3.0新特性
- Servlet3.0新特性
- servlet3.0新特性——注解支持
- servlet3.0新特性——注解支持
- Servlet3.0新特性,注解配置,@WebServlet,@WebFilter
- 线段树扫描线总结
- spring boot 整合 resteasy+fastjson
- Ubuntu16.04下配置caffe(亲测成功)
- Portlet 通信时候的选取
- 解决ubunto下firefox无法在线观看视频的问题
- JavaWeb-Servlet3.0新特性-注解
- 找第n个默尼森数实现
- Microsoft SQL Server学习(六)--查询语句
- Kotlin学习(四): 基本类型(Basic Types)
- 数据分析介绍之九——双变量建立关系之平滑噪音
- 排除节假日的功能
- [BZOJ3531][SDOI2014]旅行(树剖+线段树)
- 第四届广东省网络安全技术及成果展示会简记
- opencv2.4.13配置VS2015(永久配置)