MVC架构中的servlet层重定向404小坑

servlet层中的UserLoginServlet.java

java 复制代码
package com.mhys.servlet; /**
 * ClassName: ${NAME}
 * Description:
 *
 * @Author 数开_11
 * @Create 2024-05-29 20:32
 * @Version 1.0
 */

import com.mhys.pojo.User;
import com.mhys.service.UserService;
import com.mhys.service.impl.UserServiceImpl;

import javax.naming.Name;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.annotation.Repeatable;
import com.mhys.servlet.UserLoginServlet;
@WebServlet(name = "UserLoginServlet",value = "/UserLoginServlet")
public class UserLoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request,response);
    }


    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        // 创建userServlet
        UserService service = new UserServiceImpl();
        User user = service.findByNameAndPassword(name, pwd);
        if (user != null) {
            request.getRequestDispatcher("/index.jsp").forward(request, response);
//            response.sendRedirect("/login.jsp");
        } else {
            request.setAttribute("msg", "user/pwd错误哦");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
//            response.sendRedirect("login.jsp");
        }

    }
}

创建servlet映射对应到页面表单的跳转

login.jsp

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <style>
        .centered-element{
            margin: 300px auto ;
            width: 200px;
            display: block;
        }
    </style>
    <meta charset="UTF-8" >
    <title>HadoopWebLogin</title>
</head>
<body>
    <form action="/UserLoginServlet" class="centered-element">
<%--        使用外部css来居中这个table--%>
        <table class="centered-element">
<%--            caption标签定义了表格的标题--%>
            <caption>用户登录</caption>
<%--            tr标签表示的时表格的row--%>
            <tr>
<%--                td标签表示的是单元格cell--%>
                <td>账户:</td>
<%--    input标签是一个输入的控件--%>
                <td><input type="text" name="name"></td>
            </tr>
            <tr>
                <td> 密码: </td>
                <td><input type="text" name="pwd"></td>
            </tr>
            <tr>
                <td><input type="submit" value="登录"></td>
                <td><input type="reset" value="重置"></td>
            </tr>
<%--    从request域中拿info--%>
            <tr>
                <td colspan="2"><span style="color: red;">${msg}</span></td>
            </tr>
        </table>
    </form>

</body>
</html>

submit之后去找servlet层中的UserLoginServlet.java 进行逻辑判断---> 重定向操作

注!: 这里必须要在web.xml中配置上**!!!!!(我是在这里犯错了,U小写了,找了半天没看出了,笑晕)**

XML 复制代码
   <servlet>    
        <servlet-name>UserLoginServlet</servlet-name>
        <servlet-class>com.mhys.servlet.UserLoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UserLoginServlet</servlet-name>
        <url-pattern>/UserLoginServlet</url-pattern>
    </servlet-mapping>
复制代码

这里的webservlet中的路径是严格区分大小写的,写错小个小点都会在登录时重定向报404找不到资源!!!!

另一个注意点:就是创建对象获取数据库中的user/pwd时new 数据类型是UserService 父类

不要是接口的实现类

utils 层中的JDBCUtils.java

java 复制代码
package com.mhys.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

/**
 * ClassName: JdbcUtils
 * Description:
 *
 * @Author 数开_11
 * @Create 2024-05-29 17:46
 * @Version 1.0
 */
public class JdbcUtils {
    public static Connection getConnection() throws Exception{
        Connection connection=null;
        try{
            //1-读取db.properties文件
            Properties properties=new Properties();
            InputStream in=JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
            properties.load(in);

            //2-读取属性
            String driver=properties.getProperty("driver");
            String url=properties.getProperty("url");
            String username=properties.getProperty("username");
            String password=properties.getProperty("password");

            //3-注册驱动
            Class.forName(driver);

            //4-获取连接
            connection= DriverManager.getConnection(url,username,password);

            //5-日志打印连接信息
            System.out.println("连接信息: " + url + " " + username + " " + password);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("数据库连接失败,请检查连接参数是否正确!");
        }
        return connection;
    }
}

和项目的资源目录下配置db.properties文件

复制代码
内容:
java 复制代码
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:33306/javaweb?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username=root
password=root
相关推荐
企业通信技术笔记22 分钟前
企业IM内外网隔离部署:DNS、证书、WebSocket与跨网接口设计
websocket·网络协议·架构·php·信息与通信
Triv20251 小时前
24位ADC+IIR可编程滤波:Q.bloxx A104热电偶模块的精度与隔离架构解析
架构
智购科技自动售货机工厂2 小时前
2026自动售货机大规模部署挑战:从8万台设备到百万级的架构演进~YH
架构
掘金者阿豪2 小时前
OceanBase 和金仓怎么选?别只看分布式,复杂查询更考验架构取舍
前端·后端·架构
海宇数据2 小时前
零信任架构实战:基于海宇柠檬查出险-登记证构建自动化残值评估网关
人工智能·python·架构·自动化
Erishen2 小时前
从 SQLite 到 LLM 重排:一个 Rust RAG 服务的七层设计决策
架构·开源·agent
yindeshuiketang3 小时前
企业FDE架构方法论到实战指南从想法到商业变现:需求·设计·技术·测试·运维·交付·变现-小红书&抖音 AI马教授 职场启航宝
运维·人工智能·架构
凌风的跨境分享3 小时前
Temu店群运维提效:定时策略自动化任务全场景实操指南
大数据·运维·前端·人工智能·架构·自动化
萧瑟余晖3 小时前
JPA 规范与 Hibernate 入门详解
后端·架构·hibernate
Seoyoneh4 小时前
AI Agent落地后,云客服系统部署架构与多租户隔离的深度技术拆解
人工智能·架构