servlet3.0新特性
随着JEE6规范上市,在企业应用程序领域中如何开发应用程序方面发生了一些重大变化。 在本文中,我将介绍有关Web应用程序开发的一些更改。
首先,请告别web.xml部署描述符(至少是其中的一部分)。 好吧,它不是不赞成使用,而是随着注释的使用及其用法的增加,新规范允许我们使用注释来定义我们的配置,尽管诸如欢迎文件列表,上下文参数等的某些内容仍然需要去做。在您的web.xml中。 可用的注释有;
- @WebServlet
- @WebFilter
- @WebInitParam
- @WebListener
- @MultipartConfig
在本文中,我将检查@WebServlet和@WebFilter批注。 让我们看看在web.xml时代通常如何映射servlet。
<servlet><servlet-name>myservlet</servlet-name><servlet-class>com.example.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>myservlet</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
使用Servlet 3.0规范,现在配置Servlet就像注释扩展HttpServlet的类一样容易。 让我们看一下它的样子。
@WebServlet('/student')
public class StudentServlet extends HttpServlet{/*** */private static final long serialVersionUID = 2276157893425171437L;@Overrideprotected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)throws ServletException, IOException {StringBuilder response = new StringBuilder(500);response.append('<html><body>').append('Registered Student : ').append(arg0.getParameter('txtName')).append('</body></html>');arg1.getOutputStream().write(response.toString().getBytes());arg1.getOutputStream().flush();arg1.getOutputStream().close();}
}
您只需要@WebServlet批注。 为了使它起作用,该类应驻留在WEB-INF / classes文件夹中或驻留在WEB-INF / lib文件夹中的jar中。 接下来,让我们看看如何配置带有注释的过滤器。
package com.blog.example.servlettest;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;@WebFilter('/student')
public class StudentFilter implements Filter{@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {if(arg0.getParameter('txtName')==null || arg0.getParameter('txtName').isEmpty()){arg1.getWriter().append('Invalid name supplied');arg1.getWriter().flush();arg1.getWriter().close(); }else{arg2.doFilter(arg0, arg1);}}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}
再次非常容易。 仅作为注释即可通知它为过滤器。 注意,这里我们实现了Filter接口。 该值或urlPatterns应该可用。 根据规范,同时使用这两种方法都是非法的。
在接下来的几周中,我将介绍JEE6提供的其他新注释,并结合使用它们的完整示例进行总结。 JEE6是否取代Spring框架本身并不是一个问题,但是我相信我们将会看到两者之间的激烈竞争。 注释vs xml的争论已或多或少地解决了,每个人都倾向于拥有自己的立场。 我相信这两个领域的一点点都会对应用程序有益。
您可以下载并运行我已在此处上传的示例示例。 如果您使用的是JBoss-AS7 ,则只需在独立模式下运行应用程序服务器,然后执行mvn软件包jboss-as:deploy并将浏览器指向http:// localhost:{port} /servlet3.0 。
今天就是这样。 感谢您的阅读,如果您有任何意见或改进建议,请留下评论。
祝你有美好的一天!
参考:在My My Journey Through IT博客上,从我们的JCG合作伙伴 Dinuka Arseculeratne中了解Servlet 3.0的新增功能 。
翻译自: https://www.javacodegeeks.com/2012/12/checking-out-what-is-new-with-servlet-3-0.html
servlet3.0新特性