servlet 3.0 @WebServlet use..what将在web.xml中?

时间:2012-04-01 17:41:40

标签: servlets servlet-3.0

我想知道使用带有Tomcat 7的servlet 3.0的目录结构。 我使用了没有初始化参数的注释@WebServlet。

我想知道web.xml文件中要写的是什么? 是否还有待写...... ??

该文件存储在tomcat的classes文件夹中。

2 个答案:

答案 0 :(得分:24)

这就是web.xml中所需的全部内容:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">

3.0兼容的servlet容器(如Tomcat 7)将自动找到@WebServlet

答案 1 :(得分:2)

我从Tomasz Nurkiewicz那里读到了答案,到目前为止已有22人受到赞成。请注意,他回答 4年前

我想知道为什么我需要一个几乎空的xml文件?

我尝试使用Servlet 3的hello世界。

package com.servlet3;


import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/helloServlet3")
public class HelloServlet3 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.print("<html><body>");
        out.print("<h3>Hello Servlet</h3>");
        out.print("</body></html>");
    }
}

我能够成功运行这个小小的网络应用程序。

enter image description here

重要提示:

请注意,此示例中不存在web.xml

enter image description here

所以,我们需要这种几乎空的 web.xml。

但是,如果您需要基于表单的身份验证(但没有Spring 安全性),web.xml是必需。因为,没有等效注释可用于<login-config&gt;。

根据SO

中的这篇文章
<login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
    <form-login-page>/login</form-login-page>
    <form-error-page>/login?event=Retry</form-error-page>
  </form-login-config>
</login-config>

... 配置基于表单的身份验证的唯一方法是使用部署描述符(web.xml或web-fragment.xml)。

根据JSR-315 Servlet 3.0规范:: Ch13.6.3(第132页):

  

“Web应用程序部署描述符包含a的条目   登录表单和错误页面......“

规范是指表单登录配置的Web部署描述符,不是基于任何注释的配置。

<强>更新

上述警告输出信息与Java EE6 有关。

在Java EE7 中,我们可以进行基于表单的身份验证编程方式 ..

来自Java EE7 official tutorial

  

48.3.1以编程方式验证用户

     

HttpServletRequest接口的以下方法使您能够   以编程方式验证Web应用程序的用户。

     

身份验证允许应用程序启动身份验证   在不受约束的请求中通过容器请求调用者   上下文。将显示一个登录对话框并收集用户名和   用于身份验证的密码。

     

登录允许应用程序收集用户名和密码   信息作为指定基于表单的身份验证的替代   在应用程序部署描述符

     

注销允许应用程序重置a的来电者身份   请求。