Servlet 配置文件web.xml实验

本文深入探讨了Servlet的配置细节,包括web.xml中<servlet>和<servlet-mapping>元素的作用,以及它们如何影响Servlet的加载与访问。通过三个实验,详细解析了URL模式、Servlet名称一致性及类路径正确性对Servlet运行的影响。

我们的servlet为

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDemo1 extends HttpServlet{
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException{
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("<h1>Hello Servlet Get</h1>");
        out.println("</body>");
        out.println("</html>");    
    }
}

我们的web.xml配置文件为

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
    <servlet>
        <servlet-name>Servlet Name For Demo1</servlet-name>
        <servlet-class>com.mkyong.ServletDemo</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Servlet Name For Demo</servlet-name>
        <url-pattern>/Demo</url-pattern>
    </servlet-mapping>
</web-app>

现在我们的实验分为三步

1 测试<servlet-mapping>中的<url-pattern>,当我们在浏览器的请求不写成Demo而写成其他任意值得时候,浏览器出现404错误 resource not found。这个显而易见啦

2 测试假如<servlet-mapping><servlet>的这两个标签的<servlet-name>不一致的时候出现的现象

在我们启动tomcat的过程中,此时我们还没有从浏览器发出URL请求。控制台记录中抛出如下异常

 

Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Servlet]]

 

Caused by: java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name

3 测试假如

当我们的<servlet>标签的<servlet-class>写的同web-inf文件夹中的servlet类不一致的时候 当我们的客户端发送URL请求时才会抛出以下错误

 

我们的客户端出现为

HTTP Status 500 - Error instantiating servlet class

javax.servlet.ServletException: Error instantiating servlet class 

root cause

java.lang.ClassNotFoundException: com.mkyong.ServletDemo
控制台显示为
java.lang.ClassNotFoundException

从上面可以看出在启动tomcat的过程中并不会对我们的servlet具体的实例化,而只有在服务器收到客户端浏览器正确的URL请求时才会找相关的类并且实例化。

 

转载于:https://www.cnblogs.com/winAlaugh/p/5456628.html

<think> 首先,用户要求查找Servlet配置文件web.xml的相关信息,特别是使用、配置方法及示例。我需要参考提供的引用,并尽可能多地基于这些引用回答。 关键引用: - [^1]: 介绍Web.xml常用配置项,包括首页修改、Servlet通配符映射、初始化参数、全局参数设置、错误码页面设置等。 - [^2]: 详细讲解Servlet-Web.xml标签知识,示例代码如<servlet>和<servlet-mapping>。 - [^3]: 讨论文件加载方式,比较web.xml、applicationContext.xml、dispatcher-servlet.xml的作用范围和用途。 - [^4]: 提到Servlet 3.0无需web.xml,使用web-fragment.xml。 用户的上一次问题是指令性的,但我需要基于当前查询回答。系统指令要求使用中文回答,结构清晰,逐步解决问题。 回答结构: 1. **介绍web.xml**:简述web.xml是什么及其作用。 2. **配置方法**:详细说明常见配置示例,基于引用提供代码片段。 - 例如,首页修改、Servlet配置、错误处理等。 3. **示例代码**:展示引用中的代码示例,并使用合适的格式。 4. **Servlet 3.0的变化**:提及引用[4]中Servlet 3.0无需web.xml,使用web-fragment.xml。 5. **相关配置比较**:如果需要,可以简要提到引用[3]中的不同配置文件。 系统指令要求: - 行内数学表达式使用$...$,但这里没有数学内容,所以可能不需要。 - 独立公式使用$$...$$,同样不需要。 - LaTeX语法正确:确保任何代码或格式正确。 - 使用中文回答。 - 生成相关问题:在末尾生成相关问题。 - 引用标识:在回答末尾自然地添加引用标识,如[^1]。 用户提到了“参考站内引用”,所以我应该在回答中引用这些来源。 组织回答: - **引言**:解释web.xmlServlet中的作用。 - **配置项详解**: - 首页修改(<welcome-file-list>) - Servlet映射(<servlet>和<servlet-mapping>) - 初始化参数 - 全局参数设置 - 错误页面配置 - **示例**:提供代码块展示配置。 - **Servlet 3.0更新**:讨论如何Servlet 3.0简化配置。 - **总结**:简要回顾。 - **相关问题**:生成至少3个相关问题。 确保回答真实可靠:基于提供的引用,不添加外部知识。 生成相关问题示例: 1. 如何在Servlet中配置过滤器? 2. Servlet 3.0的web-fragment.xml如何工作? 3. web.xml和Spring配置文件有什么区别? 最后,添加引用标识。 </think> ### Servlet配置文件web.xml的使用、配置方法及示例 在Java Web开发中,`web.xml`是Servlet容器的核心配置文件,用于定义Web应用的部署描述符。它指定了Servlet、过滤器、监听器等组件的配置,以及全局设置如首页、错误页面等。以下内容基于提供的引用信息整理,确保真实可靠。我将从基础使用入手,逐步讲解配置方法和常见示例。注意:Servlet 3.0后支持注解配置,无需`web.xml`,但传统项目仍广泛使用此文件[^4]。 --- #### 1. **web.xml的基本作用** - `web.xml`文件位于Web应用的`WEB-INF`目录下,Servlet容器(如Tomcat)在启动时自动加载它。 - 主要功能包括: - 定义Servlet映射和初始化参数。 - 设置欢迎页面(首页)。 - 配置全局上下文参数。 - 处理错误页面(如404或500错误)。 - 注册过滤器和监听器。 - 在Servlet 3.0之前,`web.xml`是必需的;Servlet 3.0引入了`web-fragment.xml`作为替代方案,允许模块化配置[^4]。 --- #### 2. **常见配置方法及示例** 以下配置项基于引用[^1][^2][^3]提供,我将详细说明每个部分的语法和用法。所有代码示例均使用XML格式,需放置在`web.xml`文件中。 **2.1 修改默认首页(欢迎页面)** 通过`<welcome-file-list>`设置访问Web应用时显示的默认页面。容器会按顺序检查文件是否存在。 ```xml <welcome-file-list> <welcome-file>index.html</welcome-file> <!-- 首选首页 --> <welcome-file>default.jsp</welcome-file> <!-- 备选首页 --> </welcome-file-list> ``` - **说明**:如果`index.html`不存在,容器会自动尝试加载`default.jsp`[^1]。 **2.2 Servlet配置与映射** 定义Servlet类并将其映射到URL路径。包括`<servlet>`声明和`<servlet-mapping>`路由。 - **示例:登录Servlet配置** ```xml <servlet> <servlet-name>login</servlet-name> <!-- Servlet名称,自定义 --> <servlet-class>com.niit.LoginServlet</servlet-class> <!-- 完整类路径 --> <init-param> <!-- 可选:初始化参数 --> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <!-- 引用Servlet名称 --> <url-pattern>/login</url-pattern> <!-- 映射的URL路径 --> </servlet-mapping> ``` - **说明**:当用户访问`/login`时,容器会调用`com.niit.LoginServlet`类。`<init-param>`可用于传递参数(如调试模式)[^2]。 - **通配符映射**:支持`*.do`或`/action/*`等模式,例如`<url-pattern>*.do</url-pattern>`匹配所有以`.do`结尾的请求[^1]。 **2.3 设置全局参数** 使用`<context-param>`定义整个应用共享的参数,可在Servlet中通过`ServletContext`读取。 ```xml <context-param> <param-name>databaseURL</param-name> <param-value>jdbc:mysql://localhost:3306/mydb</param-value> </context-param> ``` - **说明**:这些参数在应用启动时加载,适用于数据库连接等全局设置[^1][^3]。 **2.4 配置错误页面** 指定错误代码(如404或500)对应的自定义页面,提升用户体验。 ```xml <error-page> <error-code>404</error-code> <!-- 错误代码 --> <location>/error404.html</location> <!-- 自定义页面路径 --> </error-page> <error-page> <error-code>500</error-code> <location>/error500.jsp</location> </error-page> ``` - **说明**:当发生404错误时,自动重定向到`error404.html`[^1]。 **2.5 完整web.xml示例** 结合以上配置,一个典型的`web.xml`文件如下: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!-- 全局参数 --> <context-param> <param-name>appName</param-name> <param-value>MyWebApp</param-value> </context-param> <!-- 首页设置 --> <welcome-file-list> <welcome-file>home.html</welcome-file> </welcome-file-list> <!-- Servlet声明和映射 --> <servlet> <servlet-name>UserServlet</servlet-name> <servlet-class>com.example.UserServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UserServlet</servlet-name> <url-pattern>/user/*</url-pattern> </servlet-mapping> <!-- 错误页面 --> <error-page> <error-code>404</error-code> <location>/errors/notFound.jsp</location> </error-page> </web-app> ``` --- #### 3. **Servlet 3.0及以后的配置变化** - Servlet 3.0引入了注解(如`@WebServlet`),允许在Java类中直接配置,无需`web.xml`。例如: ```java @WebServlet(name = "LoginServlet", urlPatterns = {"/login"}) public class LoginServlet extends HttpServlet { // Servlet实现代码 } ``` - **替代方案**:如果使用模块化开发,可以创建`web-fragment.xml`文件(放在JAR包的`META-INF`目录),其语法与`web.xml`类似[^4]。 - **与传统配置的比较**:`web.xml`适用于全局设置;而`web-fragment.xml`更适合库或模块的独立配置[^4]。在Spring框架中,`applicationContext.xml`用于全局服务,`dispatcher-servlet.xml`用于Servlet特定配置[^3]。 --- #### 4. **最佳实践与注意事项** - **使用场景**:新项目推荐使用Servlet 3.0+的注解简化配置;遗留项目或需要精细控制时,保留`web.xml`[^4]。 - **常见问题**: - 路径错误:确保`<url-pattern>`和文件路径正确。 - 版本兼容:`web.xml`的根标签`<web-app>`需指定版本(如`version="4.0"`),以适配不同Servlet规范。 - **调试技巧**:在容器日志中检查加载错误,例如类路径问题或XML语法错误[^2]。 通过以上步骤,您可以高效配置Servlet应用的`web.xml`文件。如需更多细节,请参考Servlet官方文档或相关教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值