You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未配置web.xml或@WebServlet,能否从JSP页面调用Servlet?

JSP-Servlet映射问题解决方案:注解 vs web.xml配置

嘿,我明白你在JSP-Servlet映射这块的困惑了——注解和web.xml二选一的配置逻辑确实容易让人卡壳,结合你提到的test.jsp页面,我来给你捋清楚两种配置方式的具体操作,帮你解决问题:

一、使用@WebServlet注解实现Servlet映射

这种方式不需要配置web.xml,是Servlet 3.0及以上版本推荐的简化配置方式:

  • 第一步:编写带注解的Servlet类
    直接在Servlet类上添加@WebServlet注解,指定访问路径(urlPatterns):
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/testServlet") // 这里的路径就是浏览器访问该Servlet的URL
    public class TestServlet extends HttpServlet {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.println("<h1>从TestServlet返回的内容</h1>");
        }
    }
    
  • 第二步:修改你的test.jsp页面,添加访问Servlet的入口
    可以用超链接或者表单,示例如下(顺便帮你修正了编码为UTF-8,避免乱码):
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>测试页面</title>
    </head>
    <body>
        <h3>测试Servlet映射</h3>
        <a href="testServlet">点击访问TestServlet(GET请求)</a>
        <br><br>
        <form action="testServlet" method="post">
            <input type="submit" value="提交到TestServlet(POST请求)">
        </form>
    </body>
    </html>
    
  • 注意事项:确保你的项目依赖的是Servlet 3.0及以上版本,服务器会自动扫描项目中带@WebServlet注解的类并完成映射。

二、使用web.xml配置Servlet映射

如果你的项目是Servlet 3.0以下版本,或者更习惯XML配置方式,可以完全依靠web.xml来实现映射:

  • 第一步:编写无注解的Servlet类
    去掉@WebServlet注解,只保留核心逻辑:
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class TestServlet extends HttpServlet {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.println("<h1>从TestServlet返回的内容</h1>");
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
            doGet(request, response); // 复用GET请求逻辑,也可以写单独的POST处理逻辑
        }
    }
    
  • 第二步:在WEB-INF目录下的web.xml中添加配置
    要确保web.xml放在WEB-INF目录下,配置内容如下:
    <?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">
        <!-- 注册Servlet -->
        <servlet>
            <servlet-name>TestServlet</servlet-name>
            <servlet-class>com.yourpackage.TestServlet</servlet-class> <!-- 替换成你的Servlet完整包路径 -->
        </servlet>
        <!-- 配置映射路径 -->
        <servlet-mapping>
            <servlet-name>TestServlet</servlet-name>
            <url-pattern>/testServlet</url-pattern> <!-- 和注解方式的访问路径一致 -->
        </servlet-mapping>
    </web-app>
    
  • 第三步:test.jsp的修改和注解方式完全一致,不需要额外调整。

三、常见问题排查

如果配置后访问不到Servlet,可以从这几个方向检查:

  • 注解方式排查:
    • 确认项目的Servlet版本是否≥3.0,低于该版本不支持注解映射。
    • 检查@WebServlet的路径是否拼写正确,比如有没有多写/漏写斜杠。
    • 确保Servlet类已经被正确编译到项目的WEB-INF/classes目录下。
  • web.xml方式排查:
    • 检查servlet-class的完整包路径是否正确,大小写和实际类名一致。
    • 确认servlet-name在<servlet>和<servlet-mapping>中完全匹配(大小写敏感)。
    • 检查web.xml的位置是否在WEB-INF目录下,文件名是否为web.xml(不能改名)。

内容的提问来源于stack exchange,提问作者SKL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:26:56