没有web.xml的Java Web应用程序
发布时间:2023-03-29 11:03:39 所属栏目:教程 来源:
导读:没有web.xml的Java Web应用程序
1.概述
在本教程中,我们将使用Servlet 3.0+创建Java Web应用程序。
-我们将在三个注释看一看@WebServlet,@WebFilter和@WebListener -这可以帮助消除我们的web.xml文件。
1.概述
在本教程中,我们将使用Servlet 3.0+创建Java Web应用程序。
-我们将在三个注释看一看@WebServlet,@WebFilter和@WebListener -这可以帮助消除我们的web.xml文件。
|
没有web.xml的Java Web应用程序 1.概述 在本教程中,我们将使用Servlet 3.0+创建Java Web应用程序。 -我们将在三个注释看一看@WebServlet,@WebFilter和@WebListener -这可以帮助消除我们的web.xml文件。 2. Maven依赖 为了使用这些新的注释,我们需要包括javax.servlet-api依赖项: <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> 3.基于XML的配置 在Servlet 3.0之前,我们将在web.xml文件中配置Java Web应用程序: version="2.5"> <listener> <listener-class>com.baeldung.servlets3.web.listeners.RequestListener</listener-class> </listener> <servlet> <servlet-name>uppercaseServlet</servlet-name> <servlet-class>com.baeldung.servlets3.web.servlets.UppercaseServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>uppercaseServlet</servlet-name> <url-pattern>/uppercase</url-pattern> </servlet-mapping> <filter> <filter-name>emptyParamFilter</filter-name> <filter-class>com.baeldung.servlets3.web.filters.EmptyParamFilter</filter-class> </filter> <filter-mapping> <filter-name>emptyParamFilter</filter-name> <url-pattern>/uppercase</url-pattern> </filter-mapping> </web-app> 让我们开始用Servlet 3.0中引入的相应注释替换每个配置部分。 4. Servlet Servlet 3.0附带的JEE 6使我们能够对Servlet定义使用批注,从而最大程度地减少了Web应用程序对web.xml文件的使用。 例如,我们可以定义一个servlet并使用@WebServlet批注公开它 让我们为URL模式/ uppercase定义一个servlet 。它将输入请求参数的值转换为大写: @WebServlet(urlPatterns = "/uppercase",name = "uppercaseServlet") public class UppercaseServlet extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException { String inputString = request.getParameter("input").toupperCase(); PrintWriter out = response.getWriter(); out.println(inputString); } } 注意,我们为servlet定义了一个名称(uppercaseServlet) ,我们现在可以对其进行引用。我们将在下一部分中使用它。 通过@WebServlet批注,我们将替换web.xml文件中的servlet和servlet映射部分。 5.过滤器 甲过滤器是用来拦截请求或响应,执行前或后处理任务的对象。 我们可以使用@WebFilter注释定义一个过滤器。 让我们创建一个过滤器来检查输入请求参数是否存在: @WebFilter(urlPatterns = "/uppercase") public class EmptyParamFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain) throws IOException,servletexception { String inputString = servletRequest.getParameter("input"); if (inputString != null && inputString.matches("[A-Za-z0-9]+")) { filterChain.doFilter(servletRequest,servletResponse); } else { servletResponse.getWriter().println("Missing input parameter"); } } // implementations for other methods } 使用@WebFilter批注,我们将替换web.xml文件中的filter和filter-mapping部分。 6.侦听器 我们经常需要根据某些事件触发操作。这是侦听器进行救援的地方。这些对象将侦听事件并执行我们指定的行为。 像以前一样,我们可以使用@WebListener注释定义一个侦听器。 让我们创建一个监听器,该监听器在每次向服务器执行请求时进行计数。我们将实现ServletRequestListener,侦听ServletRequestEvent: @WebListener public class RequestListener implements ServletRequestListener { @Override public void requestDestroyed(ServletRequestEvent event) { HttpServletRequest request = (HttpServletRequest)event.getServletRequest(); if (!request.getServletPath().equals("/counter")) { ServletContext context = event.getServletContext(); context.setAttribute("counter",(int) context.getAttribute("counter") + 1); } } // implementations for other methods } 请注意,我们排除了对URL模式/ counter的请求。 使用@WebListener批注,我们将替换web.xml文件中的listener 部分。 7.构建和运行 对于后续人员,请注意,为了进行测试,我们为/ counter端点添加了第二个servlet ,该servlet仅返回 counter servlet上下文属性。 因此,让我们使用Tomcat作为应用程序服务器。 如果我们使用3.1.0之前的maven-war-plugin版本,则需要将属性failOnMissingWebXml设置为false。 现在,我们可以将.war文件部署到Tomcat,并访问我们的servlet。 8.仍然需要XML 即使使用Servlet 3.0中引入的所有功能,在一些用例中,我们仍然需要一个web.xml文件,其中包括: 我们无法使用批注定义过滤器顺序-如果我们需要按特定顺序应用多个过滤器,则仍然需要<filter-mapping>部分 要定义 会话超时,我们仍然需要使用<session-config>部分 对于基于容器的授权,我们仍然需要<security-role>元素 要指定欢迎文件,我们仍然需要一个<welcome-file-list>部分 或者,Servlet 3.0也通过ServletContainerInitializer引入了一些编程支持,这也可以填补其中的一些空白。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
