15.MVC案例

今天学习MVC模式,尝试着做个用户登陆功能的MVC案例

  • 1.新建login.jsp文件,向servlet端提交信息,提交方式为post(view层)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    login
  
  
用户名 密码
  • 2.在src文件夹中建立package Dao(模型层)
    1.png

DAO层中的LoginDao实现对mysql数据库连接验证传入的数据是否存在

package Dao;
import login.Login;

import java.sql.*;
public  class LoginDao {
  static String URL = "jdbc:mysql://localhost:3306/user";
  //数据库的用户名
  static String USERNAME = "root";
  //数据库的密码
  static String PWD = "199763cbw";

  public static int login(Login login) {// 增删改
      Connection connection = null;
      PreparedStatement pstmt =null;

      ResultSet rs=null;


      try {

          Class.forName("com.mysql.cj.jdbc.Driver");// 加载具体的驱动类


          connection = DriverManager.getConnection(URL, USERNAME, PWD);




        //原因是sql查询语句 where查询中文会导致错误,英文不会

          String sql="select * from users where name=? and password=?";
          pstmt=connection.prepareStatement(sql);
          //同时可以用pstmt.setString方法设置位置的值
          pstmt.setString(1,login.getUanme());
          pstmt.setString(2,login.getUpwd());




          rs= pstmt.executeQuery();
          if(rs.next()){
              return 1;
          }

          else{
              return 0;
          }


          // 5.处理结果



      } catch (ClassNotFoundException e) {
          e.printStackTrace();
          return -1;
      } catch (SQLException e) {
          e.printStackTrace();
          return -1;
      } catch(Exception e) {
          e.printStackTrace();
          return -1;
      }
      finally {
          try {
              if(rs!=null) rs.close();
              if(pstmt!=null) pstmt.close();
              if(connection!=null)connection.close();
          }catch(SQLException e) {
              e.printStackTrace();
          }
      }
  }
}

牢记这里的异常处理,如果不在这里完成异常处理,在servlet中会报错。
因为mysql中sql语句用where会使中文查询产生异常,这里的查询只对英文数据有效

  • 3.新建login package包,在包中创建Login.java(模型层)用于封装传入的用户名和密码,再把Login对象传入Dao层中的LoginDao。
package login;

public class Login {
    private String uanme;
    private String upwd;

    public Login(String uname,String upwd){
        this.uanme=uname;
        this.upwd=upwd;


    }
//构造函数,如果不写这个,在servlet中new对象时报错
    public Login() {

    }


    public String getUanme() {
        return uanme;
    }

    public void setUanme(String uanme) {
        this.uanme = uanme;
    }

    public String getUpwd() {
        return upwd;
    }

    public void setUpwd(String upwd) {
        this.upwd = upwd;
    }
}

-4.新建loginServlet文件,控制层

package servlet;

import java.io.IOException;
import login.Login;
import Dao.LoginDao;
//下面这句话是配置servlet
@javax.servlet.annotation.WebServlet(value = "/loginServlet")
public class loginServlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
String name =request.getParameter("uname");
String pwd=request.getParameter("upwd");
//将view层传过来的东西放入Login对象中
Login login = new Login(name,pwd);


//将login对象放入LoginDao中,LoginDao会返回一个int值用于判断用户是否存在

       int result= LoginDao.login(login);
       if(result>0){
  // 重定向至jsp页面 ,提示登陆成功
           response.sendRedirect("welcome.jsp");
       }else if(result==0){
    // 重定向至jsp页面,登陆失败
           response.sendRedirect("fail.jsp");
       }
       else {
  // 重定向至jsp页面 ,程序异常
           response.sendRedirect("exception.jsp");
       }
    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {


    }
}

  • 5.web.xml的配置



  • 6.测试
    英文用户可以登陆,中文的不行,还需要改进

你可能感兴趣的:(15.MVC案例)