^秋^ 2022-03-09 22:33 采纳率: 33.3%
浏览 72
已结题

maven部署可以访问html,但无法访问servlet,如何解决?

用的是idea2021.3+jdk17.0.2+maven3.8.4+tomcat10.0.16

当我用maven部署时,可以访问html,但无法访问servlet,无论是注解还web.xml配置都不行。
但我用tomcat部署时,却可以正常访问,这是为什么呢?

pox配置如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <packaging>war</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <path>/demo</path>
                    <uriEncoding>utf-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>5.0.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <groupId>com.gqiu</groupId>
    <artifactId>travelNetwork</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

</project>

web配置如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <servlet>
        <servlet-name>registerUserServlet</servlet-name>
        <servlet-class>com.travel.servlet.RegisterUserServlet</servlet-class>
    </servlet>
<servlet-mapping>
    <servlet-name>registerUserServlet</servlet-name>
    <url-pattern>/registerUserServlet</url-pattern>
</servlet-mapping>
</web-app>

html文件如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>注册</title>

    <!-- Bootstrap -->
    <link rel="stylesheet" href="css/bootstrap.min.css" >

    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="js/jquery-3.6.0.min.js" ></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="js/bootstrap.min.js" ></script>

    <!--外部css样式-->
    <link rel="stylesheet" href="css/register.css">
    <!--外部JavaScript-->
    <script src="js/register.js"></script>

<!--    <script>-->
<!--        $(function () {-->
<!--            // 当表单提交校验所有方法-->
<!--            $("#registerForm").submit(function () {-->
<!--                // 发送数据到服务器-->
<!--                if(checkUsername() && checkPassword() &&checkEmail()-->
<!--                    &&checkTel()&& checkName()&&checkCode()&&checkBirthday()){-->
<!--                    // 校验通过,发送ajax请求-->
<!--                    $.post("registerUserServlet",$(this).serialize(),function (data) {-->
<!--                        alert("方法执行了");-->
<!--                    });-->
<!--                }-->
<!--                return false;-->
<!--            });-->

<!--            // 当某个组件失去焦点调用校验方法-->
<!--            $("#username").blur(checkUsername);-->
<!--            $("#password").blur(checkPassword);-->
<!--            $("#email").blur(checkEmail);-->
<!--            $("#tel").blur(checkTel);-->
<!--            $("#name").blur(checkName);-->
<!--            $("#check_code").blur(checkCode);-->
<!--            $("#birthday").blur(checkBirthday);-->
<!--        });-->

<!--        // 校验用户名-->
<!--        function checkUsername(){-->
<!--            // 获取用户名-->
<!--            let username = $("#username").val();-->
<!--            // 定义正则表达式-->
<!--            let reg_username=/^\w{8,20}$/;  // 8到20个字符,只能是字母,数字,下划线-->
<!--            // 判断给出提示信息-->
<!--            let flag = reg_username.test(username);-->
<!--            if(flag){-->
<!--                // 用户名合法-->
<!--                $("#username").css("border","1px solid green");-->
<!--            }else {-->
<!--                // 用户名不合法,红色边框提示-->
<!--                $("#username").css("border","1px solid red");-->
<!--            }-->
<!--            return flag;-->
<!--        }-->

<!--        // 校验密码-->
<!--        function checkPassword(){-->
<!--            // 获取密码-->
<!--            let password = $("#password").val();-->
<!--            // 定义正则表达式-->
<!--            let reg_password=/^\w{8,20}$/;  // 8到20个字符-->
<!--            // 判断给出提示信息-->
<!--            let flag = reg_password.test(password);-->
<!--            if(flag){-->
<!--                // 密码合法-->
<!--                $("#password").css("border","1px solid green");-->
<!--            }else {-->
<!--                // 密码不合法,红色边框提示-->
<!--                $("#password").css("border","1px solid red");-->
<!--            }-->
<!--            return flag;-->
<!--        }-->

<!--        // 校验邮箱-->
<!--        function checkEmail(){-->
<!--            // 获取邮箱-->
<!--            let email = $("#email").val();-->
<!--            // 定义正则表达式-->
<!--            let reg_email=/^\w+@\w+\.\w+$/;-->
<!--            // 判断并给出提示信息-->
<!--            let flag = reg_email.test(email);-->
<!--            if(flag){-->
<!--                // 邮箱合法-->
<!--                $("#email").css("border","1px solid green");-->
<!--            }else {-->
<!--                // 邮箱不合法,红色边框提示-->
<!--                $("#email").css("border","1px solid red");-->
<!--            }-->
<!--            return flag;-->
<!--        }-->

<!--        // 校验手机号-->
<!--        function checkTel(){-->
<!--            // 获取手机号-->
<!--            let tel = $("#tel").val();-->
<!--            // 定义正则表达式-->
<!--            let reg_tel=/^1[3-9]\d{9}$/;  // 11个数字-->
<!--            // 判断并给出提示信息-->
<!--            let flag = reg_tel.test(tel);-->
<!--            if(flag){-->
<!--                // 手机号合法-->
<!--                $("#tel").css("border","1px solid green");-->
<!--            }else {-->
<!--                // 手机号不合法,红色边框提示-->
<!--                $("#tel").css("border","1px solid red");-->
<!--            }-->
<!--            return flag;-->
<!--        }-->

<!--        // 校验姓名-->
<!--        function checkName(){-->
<!--            // 获取姓名-->
<!--            let name = $("#name").val();-->
<!--            // 定义正则表达式-->
<!--            let reg_name=/^[a-zA-Z]\w+$/;   // 必须以字母开头-->
<!--            // 判断并给出提示信息-->
<!--            let flag = reg_name.test(name);-->
<!--            if(flag){-->
<!--                // 姓名格式正确-->
<!--                $("#name").css("border","1px solid green");-->
<!--            }else {-->
<!--                // 姓名格式不正确,红色边框提示-->
<!--                $("#name").css("border","1px solid red");-->
<!--            }-->
<!--            return flag;-->
<!--        }-->

<!--        // 校验验证码-->
<!--        function checkCode(){-->
<!--            // 获取验证码-->
<!--            let check_code = $("#check_code").val();-->
<!--            // 判断是否为空-->
<!--            let flag = check_code==="";-->
<!--            if(!flag){-->
<!--                // 验证码为不空-->
<!--                $("#check_code").css("border","1px solid green");-->
<!--            }else {-->
<!--                // 验证码为空,红色边框提示-->
<!--                $("#check_code").css("border","1px solid red");-->
<!--            }-->
<!--            return !flag;-->
<!--        }-->

<!--        // 校验生日-->
<!--        function checkBirthday(){-->
<!--            // 获取生日-->
<!--            let birthday = $("#birthday").val();-->
<!--            // 判断是否为空-->
<!--            let flag = birthday==="";-->
<!--            if(!flag){-->
<!--                // 生日为不空-->
<!--                $("#birthday").css("border","1px solid green");-->
<!--            }else {-->
<!--                // 生日为空,红色边框提示-->
<!--                $("#birthday").css("border","1px solid red");-->
<!--            }-->
<!--            return !flag;-->
<!--        }-->
<!--    </script>-->
</head>
<body>
    <div class="div1">
        <form method="post" id="registerForm">
            <!--创建表格-->
            <table>
                <!--第一行-->
                <tr>
                    <td>
                        <label for="username" class="label">用户名</label>
                    </td>
                    <td>
                        <input type="text" class="cls" name="username" placeholder="请输入用户名" id="username">
                    </td>
                </tr>

                <!--第二行-->
                <tr>
                    <td>
                        <label for="password" class="label">密码</label>
                    </td>
                    <td>
                        <input type="password" class="cls" name="password" placeholder="请输入密码" id="password">
                    </td>
                </tr>

                <!--第三行-->
                <tr>
                    <td>
                        <label for="tel" class="label">手机号</label>
                    </td>
                    <td>
                        <input type="text" class="cls" name="tel" placeholder="请输入手机号" id="tel">
                    </td>
                </tr>

                <!--第四行-->
                <tr>
                    <td>
                        <label for="email" class="label">Email</label>
                    </td>
                    <td>
                        <input type="email" class="cls" name="email" placeholder="请输入邮箱" id="email">
                    </td>
                </tr>

                <!--第五行-->
                <tr>
                    <td>
                        <label for="name" class="label">姓名</label>
                    </td>
                    <td>
                        <input type="text" class="cls" name="name" placeholder="请输入姓名" id="name">
                    </td>
                </tr>

                <!--第六行-->
                <tr>
                    <td>
                        <label class="label">性别</label>
                    </td>
                    <td>
                        <label class="cls">
                            <input type="radio" name="gender" value="male" checked><input type="radio" name="gender" value="female" ></label>
                    </td>
                </tr>

                <!--第七行-->
                <tr>
                    <td>
                        <label class="label">出生日期</label>
                    </td>
                    <td>
                        <label>
                            <input type="date" class="cls" name="birthday" id="birthday" placeholder="年/月/日">
                        </label>
                    </td>
                </tr>

                <!--第七行-->
                <tr>
                    <td>
                        <label class="label">验证码</label>
                    </td>
                    <td>
                        <label class="cls1">
                            <input type="text" name="check_code" id="check_code">
                            <img src="#" id="check">
                            <a href="" id="change">看不清?换一张</a>
                        </label>
                    </td>
                </tr>

                <!--第九行-->
                <tr id="tr">
                    <td colspan="2">
                        <input type="submit" value="注册" id="sub">
                    </td>
                </tr>
            </table>
        </form>
    </div>
</body>
</html>

servlet如下

package com.travel.servlet;

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

import java.io.IOException;

//@WebServlet("/registerUserServlet")
public class RegisterUserServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        System.out.println("hello");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }
}

  • 写回答

1条回答 默认 最新

  • £漫步 云端彡 2022-03-09 22:43
    关注

    servlet导错了,这个是最常用的

    
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 已采纳回答 3月9日
  • 创建了问题 3月9日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分