15.MVC案例

今天學(xué)習(xí)MVC模式,嘗試著做個(gè)用戶登陸功能的MVC案例

  • 1.新建login.jsp文件,向servlet端提交信息,提交方式為post(view層)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>login</title>
  </head>
  <body>
<form action="loginServlet" method="post" >
  用戶名<input type="text" name="uname">
  密碼<input type="password" name="upwd">
  <input type="submit" value="提交">

</form>
  </body>
</html>
  • 2.在src文件夾中建立package Dao(模型層)
    1.png

DAO層中的LoginDao實(shí)現(xiàn)對mysql數(shù)據(jù)庫連接驗(yàn)證傳入的數(shù)據(jù)是否存在

package Dao;
import login.Login;

import java.sql.*;
public  class LoginDao {
  static String URL = "jdbc:mysql://localhost:3306/user";
  //數(shù)據(jù)庫的用戶名
  static String USERNAME = "root";
  //數(shù)據(jù)庫的密碼
  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");// 加載具體的驅(qū)動(dòng)類


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




        //原因是sql查詢語句 where查詢中文會(huì)導(dǎo)致錯(cuò)誤,英文不會(huì)

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




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

          else{
              return 0;
          }


          // 5.處理結(jié)果



      } 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中會(huì)報(bào)錯(cuò)。
因?yàn)閙ysql中sql語句用where會(huì)使中文查詢產(chǎn)生異常,這里的查詢只對英文數(shù)據(jù)有效

  • 3.新建login package包,在包中創(chuàng)建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;


    }
//構(gòu)造函數(shù),如果不寫這個(gè),在servlet中new對象時(shí)報(bào)錯(cuò)
    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會(huì)返回一個(gè)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的配置
<?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">
</web-app>
  • 6.測試
    英文用戶可以登陸,中文的不行,還需要改進(jìn)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,017評論 0 11
  • IOC 控制反轉(zhuǎn)容器控制程序?qū)ο笾g的關(guān)系,而不是傳統(tǒng)實(shí)現(xiàn)中,有程序代碼之間控制,又名依賴注入。All 類的創(chuàng)建,...
    irckwk1閱讀 1,097評論 0 0
  • 本系列博客主要展示一下,在C-S(Client - Server)系統(tǒng)開發(fā)當(dāng)中,如何使用MVC的架構(gòu)來實(shí)現(xiàn)安卓端的...
    谷谷_z閱讀 1,615評論 3 3
  • 對于java中的思考的方向,1必須要看前端的頁面,對于前端的頁面基本的邏輯,如果能理解最好,不理解也要知道幾點(diǎn)。 ...
    神尤魯?shù)婪?/span>閱讀 901評論 0 0
  • 1.abstract class 和interface 有什么區(qū)別? 抽象類可以有構(gòu)造方法 接口不行 抽象類可以有...
    sunnysans閱讀 962評論 0 1

友情鏈接更多精彩內(nèi)容