使用MVC模式进行JSP Servlet JDBC的使用

管理员登录的MVC

“MVC”就是“Model-View-Controller”模式

  • Servlet用来处理请求事务,充当控制器 C 的角色。
  • JSP是表示层,担任视图 V 的角色。
  • JavaBean负责数据处理,模型 M 的角色,Model层是在复杂的商务逻辑上,提供简单统一的应用接口
    在这里插入图片描述

以下是整体的程序结构
在这里插入图片描述
Servlet代码

  • 这里说一下要注意的点,
  • request.getRequestDispatcher("/View/index.jsp").forward(request, response);
  • 这条语句,我调试了接近一天的时间吧,因为这个路径的问题,就出现找不到JSP页面的问题,报404,400,各种报问题,后来通过调试,一步步看整体的运行,最终锁定了这条语句是有问题的,在不断的查资料,发现这个路径不是说你在idea里面按ctrl 点击会有反应就说明这个路径是对的,不是这样的,甚至你直接放绝对路径的时候,也不一定是对的,我尝试了连接到百度,发现是可以的,所以我就确定了,这个函数没问题,是我调用的问题,我看到了一句话,在getRequestDispatche里面,/是代表你的webroot的路径的,所以,我原来用…/web/View/index.jsp这种相对路径,虽然你idea里面是可以访问这个路径的,但是你在Servlet里面是访问不到的,所以一定要注意:
  • 用 / 开始表示web目录下的东西"/View/index.jsp",像这样,然后还有一个问题,即使你终于可以转到jsp页面了,但显示中文乱码,这个问题很容易解决,就是在doPost那边加一句response.setCharacterEncoding(“UTF-8”);,就解决了。
package Control;

import Model.Admin;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "LoginControl")
public class LoginControl extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String adminuser, adminpwd;
        adminuser = request.getParameter("adminuser");
        adminpwd = request.getParameter("adminpwd");
        Admin admin = new Admin();
        if (admin.validate(adminuser, adminpwd)) {
            //可以运行到这一个步 说明 数据库没问题,有问题的是下面转向页面的语句有问题,所以要调试一个可以
            //可以成功转向jsp页面的语句
            System.out.println("匹配成功,登陆成功");
            HttpSession session = request.getSession();
            session.setAttribute("admin", adminuser);
            //利用requestDispatcher对象的forward方法来跳转
            //要..去返回上面 不然找不到
//            response.sendRedirect("/AdminLoginMVC/web/adminLogin.jsp");
//            可以将页面跳转到任何路径,不局限于web应用中,跳转的过程中url地址变化,无法使用request.setAttribute来传递。
            request.getRequestDispatcher("/View/index.jsp").forward(request, response);
        } else {
            System.out.println("匹配失败,登陆失败");
            request.setAttribute("msg", "登录失败");
            request.getRequestDispatcher("/View/adminLogin.jsp").forward(request, response);
        }
    }
}

在Admin.java里面实现了对数据库的操作,进行了用户名密码的判断,JavaBean的简单实用

package Model;

import java.sql.ResultSet;

public class Admin {
    public boolean validate(String adminuser,String adminpwd){
    DBbean connDB=null;
    try {
        connDB=new DBbean();
        String sql="select adminpwd from admin where adminuser='"+adminuser+"'";
        ResultSet rs=connDB.executeQuery(sql);
        if(rs.next()&&rs.getString(1).equals(adminpwd))
            return true;
        else return  false;
    }catch (Exception e){
        return  false;
    }finally{
        connDB.close();
    }
    }
}

DBbean.java是一个工具类,将我们的数据库的基本信息封装在这个类中

package Model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DBbean {
    private String driveStr= "com.mysql.cj.jdbc.Driver";
    private String connStr="jdbc:mysql://127.0.0.1:3306/totoro?useSSL=true&characterEncoding=utf8&";
    private String usernameStr = "root";
    private String passwordStr = "root";
    private Connection conn=null;
    private Statement stmt=null;
    //设计该工具类的静态初始化器中的代码,该代码在装入类时执行一次
    public DBbean(){
        try {
            Class.forName(driveStr);
            conn= DriverManager.getConnection(connStr,usernameStr,passwordStr);
            stmt=conn.createStatement();
        } catch (Exception e) {
            System.out.println("无法同数据库连接");
        }
    }
    //修改数据库用户记录的方法
    public int executeUpdate(String s){
        int result=0;
        try {
            result=stmt.executeUpdate(s);
        }catch (Exception e){
            System.out.println("执行更新错误");
        }
        return result;
    }
    //查询数据库用户记录的方法
    public ResultSet executeQuery(String s){
        ResultSet rs=null;
        try {
            rs=stmt.executeQuery(s);
        }catch (Exception e){
            System.out.println("执行查询错误");
        }
        return rs;
    }
    public void close(){
        try {
            stmt.close();
            conn.close();
        }catch (Exception e){

        }
    }
}

在web.xml中只加了这几句,Servlet-class指定你的Servlet,url-pattern是显示的地址,本来是有/Servlet在前面的,但看了很多文章,其实不加最好,可以避免很多路径上的问题

 <servlet>
        <servlet-name>LoginControl</servlet-name>
        <servlet-class>Control.LoginControl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginControl</servlet-name>
        <url-pattern>/LoginControl</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>/View/adminLogin.jsp</welcome-file>
    </welcome-file-list>

然后是两个JSP的简单实现
adminLogin.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<%--<%--%>
<%--    String adminuser;--%>
<%--    adminuser=request.getParameter("adminuser")==null?"":request.getParameter("adminuser");--%>
<%--%>--%>
<body>
<table width="41%" align="center">
    <tr>
        <td>
            <form name="adminLogin" action="LoginControl" method="post">
                <br>管理员登录<br>
                管理员:<input type="text" name="adminuser">
                密码:<input type="password" name="adminpwd">
                <input type="submit" name="submit" value="登录">
                <input type="reset" name="reset" value="取消">
            </form>
        </td>
    </tr>
</table>

</body>
</html>

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>default page</title>
  </head>
  <body>
  登录成功!
  </body>
</html>

结果截图:实现了可以读数据库,在Servlet进行比较,在jsp进行显示,大致逻辑是OK的
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
总的来说,调bug真的累,但是但有了进展出现思路的时候,还是会非常开心,虽然很累,这里MVC告一段落。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值