【问题标题】:servlet 3.0 @WebServlet use..what will be in web.xml?servlet 3.0 @WebServlet 使用.. web.xml 中会有什么?
【发布时间】:2012-04-01 17:41:40
【问题描述】:

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

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

文件存放在tomcat的classes文件夹中。

【问题讨论】:

标签: servlets servlet-3.0


【解决方案1】:

这就是您在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。

【讨论】:

  • 此注解@WebServlet 是否有强制属性??
  • 导入 javax.servlet.annotation.WebServlet;这里的servlet、注解和WebServlet是什么javax包中的类或接口?
  • @user460920:它们都不是必需的(否则代码甚至无法编译)
  • 如果我有一个 gradle 项目没有正确生成 web.xml.. 我该如何添加它?在 STS 的任何项目中都没有看到它..
【解决方案2】:

我阅读了 Tomasz Nurkiewicz 的答案,到目前为止,该答案已获得 22 人的支持。请注意,他回答 4 年前。

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

我尝试使用 Servlet 3 构建一个 hello world。

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>");
    }
}

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

重要提示:

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

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

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

根据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 (pg132):

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

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

更新:

以上删除信息与Java EE6有关。

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

来自 Java EE7 official tutorial,

48.3.1 以编程方式对用户进行身份验证

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

authenticate 允许应用程序发起对 容器从不受约束的请求中请求调用者 语境。登录对话框显示并收集用户名和 用于身份验证的密码。

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

logout 允许应用程序重置呼叫者的身份 请求。

【讨论】:

  • 问题是...... web.xml 中会有什么?我回答说“什么都没有”。评论其他答案有什么问题吗?我很困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 2017-01-19
  • 2013-05-10
  • 1970-01-01
  • 2011-04-29
相关资源
最近更新 更多