MVC模型之用户登录系统

来源:互联网 发布:qqps源码 编辑:程序博客网 时间:2024/06/05 10:13


1、什么是MVC模型



2、用户登录系统的MVC模型





3、用户登录系统详解

3.1 登录界面 login.jsp

它主要完成用户登录界面,只是完成MVC中的V(view),也就是他只完成登录界面。
当提交登录按钮以后,把用户验证交给一个servlet去完成,因servlet的效率较高。
跳转的servlet通过loginClServlet完成。

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML><html>  <head>    <base href="<%=basePath%>">        <title>用户登录</title>    <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="login"><meta http-equiv="description" content="login page">  </head>    <body bgcolor=pink><center><h1>用户登录</h1><form action="LoginClServlet" method="post">用户名:<input type="text" name="username"><br>密  码:<input type="password" name="passwd"><br><input type="submit" value="登录"><input type="reset" value="重置">   </form></center>   </body></html>

3.2 用户欢迎界面welcome.jsp

它也是MVC中的V(view)层。
他的数据来源分为两个servlet,分别是loginClServlet获取首次登录数据,UsersClServlet获取翻页后数据。

<%@ page language="java" import="java.util.*,java.sql.*,com.controller.*,com.ms.*" pageEncoding="gbk"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML><html>  <head>    <base href="<%=basePath%>">        <title>欢迎界面</title>    <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="welcome"><meta http-equiv="description" content="welcome page">  </head>    <body bgcolor=pink>    <h1>恭喜您,登录成功</h1><a href="login.jsp">返回重新登录</a><hr><h1>用户信息列表</h1><%//获取数据        Vector<UsersBean> v = (Vector<UsersBean>)request.getAttribute("result");             int pageCount = Integer.parseInt((String)request.getAttribute("pageCount"));        int pageNow = Integer.parseInt((String)request.getAttribute("pageNow"));%><table border=1><tr><th>用户id</th><th>姓名</th><th>密码</th><th>Email</th><th>级别</th></tr><%for(int i = 0; i < v.size(); i++) {UsersBean ub = (UsersBean)v.get(i);%><tr><td><%=ub.getUserId() %></td><td><%=ub.getUserName() %></td><td><%=ub.getPasswd() %></td><td><%=ub.getEmail() %></td><td><%=ub.getGrade() %></td></tr><%}%></table><% //上一页 if(pageNow != 1) out.println("<a href=UsersClServlet?pageNow="+(pageNow-1)+">上一页</a>"); //显示超链接     for(int i = 1; i <= pageCount; i++){out.println("<a href=UsersClServlet?pageNow="+i+">["+i+"]</a>");     }     //下一页     if(pageNow != pageCount) out.println("<a href=UsersClServlet?pageNow="+(pageNow+1)+">下一页</a>");%>  </body></html>

3.3 用户登录处理loginClServlet

用于验证用户是否合法,属于MVC中的C(controller)。
通过查询数据库验证,因此它需要调用MVC中的M(model),UsersBeanCl

/** * 控制器,完成对用户身份的验证 * 本身不完成业务逻辑(调用适当的model模型完成验证) */package com.controller;import com.ms.*;import java.io.IOException;import java.util.Vector;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginClServlet extends HttpServlet {/** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. *  * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//得到用户名和密码String u = request.getParameter("username");String p = request.getParameter("passwd");//使用模型(UsersBeanCl)完成对用户的验证//1 创建一个对象UsersBeanCl ubc = new UsersBeanCl();//2 调用方法if(ubc.checkUser(u, p)){Vector<UsersBean> v = ubc.getUsersByPage(1);int pageCount = ubc.getPageCount();request.setAttribute("result", v);request.setAttribute("pageCount", pageCount+"");request.setAttribute("pageNow", "1");//合法//转向的方法,效率不是很高//response.sendRedirect("welcome.jsp");//常常使用转发的方法,效率高并且request中对象还可以在下一页面使用request.getRequestDispatcher("welcome.jsp").forward(request, response);}else{request.getRequestDispatcher("login.jsp").forward(request, response);}}/** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. *  * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}


3.4 用户跳转处理UsersClServlet

它主要用于获取数据库中的分页数据,属于MVC中的C(controller)。
因为要获取数据库中的数据,因此也要调用UsersBeanCl。

package com.controller;import com.ms.*;import java.io.IOException;import java.io.PrintWriter;import java.util.Vector;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class UsersClServlet extends HttpServlet {/** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. *  * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {try {int pageNow = Integer.parseInt(request.getParameter("pageNow"));UsersBeanCl ubc = new UsersBeanCl();//在跳转到welcome.jsp之前把显示数据准备好Vector<UsersBean> v = ubc.getUsersByPage(pageNow);int pageCount = ubc.getPageCount();request.setAttribute("result", v);request.setAttribute("pageCount", pageCount+"");request.setAttribute("pageNow", pageNow+"");request.getRequestDispatcher("welcome.jsp").forward(request, response);} catch (Exception e) {e.printStackTrace();}}/** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. *  * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}

3.5 用户处理类UsersBeanCl

他主要完成数据库的数据查询,完成于数据库有关的操作。
属于MVC中的M(model)。
/** * 主要分装对users表的操作 */package com.ms;import java.sql.*;import java.util.*;public class UsersBeanCl {private Connection ct = null;private PreparedStatement ps = null;private ResultSet rs = null;//分页显示的功能    private int pageSize = 3;//一页显示几条记录    private int pageNow = 1;//希望显示第几页    private int rowCount = 0;//共有几条记录    private int pageCount = 0;//一共有几页        //验证用户是否合法public boolean checkUser(String u,String p) {boolean b = false;try {ct = new ConnDB().getConn();    //4查询ps = ct.prepareStatement("select passwd from users where userName='"+u+"'");    rs = ps.executeQuery();    //根据情况判断    if(rs.next()) {    //用户名存在    if(rs.getString(1).equals(p)) {    b = true;    }    }} catch (Exception e) {e.printStackTrace();} finally {//关闭资源this.close();}return b;}//返回数据库内数据public Vector<UsersBean> getUsersByPage(int pageNow) {Vector<UsersBean> v = new Vector<UsersBean>();try {ct = new ConnDB().getConn();ps = ct.prepareStatement        ("select top "+pageSize+" * from users where userId not in (select top "        +pageSize*(pageNow - 1)+" userId from users)");        rs = ps.executeQuery();        while(rs.next()){        UsersBean ub = new UsersBean();        ub.setUserId(rs.getInt(1));        ub.setUserName(rs.getString(2));        ub.setPasswd(rs.getString(3));        ub.setEmail(rs.getString(4));        ub.setGrade(rs.getInt(5));        //将UsersBean放入Vector        v.add(ub);        }} catch (Exception e) {e.printStackTrace();} finally {this.close();}return v;}//返回数据库数据数量public int getPageCount() {//.....try {ct = new ConnDB().getConn();    //4查询ps = ct.prepareStatement("select count(*) from users");    rs = ps.executeQuery();    //根据情况判断    if(rs.next()) {    //用户名存在    rowCount = rs.getInt(1);    }} catch (Exception e) {e.printStackTrace();} finally {this.close();}//计算pageCount        if(rowCount%pageSize == 0) {             pageCount = rowCount/pageSize;        }else {             pageCount = rowCount/pageSize + 1;        }return pageCount;}//关闭资源函数public void close() {//关闭资源try {if(rs!=null) {rs.close();rs = null;}if(ps!=null) {ps.close();ps = null;}if(ct!=null) {ct.close();ct = null;}} catch (Exception e2) {e2.printStackTrace();}}}

3.6 用户类 UsersBean

他主要完成对用户数据的封装,实现一个用户类。

package com.ms;public class UsersBean {private int userId;private String userName;private String passwd;private String email;private int grade;public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPasswd() {return passwd;}public void setPasswd(String passwd) {this.passwd = passwd;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}}

3.7 数据库连接ConnDB

他主要用于完成数据库的连接。

package com.ms;import java.sql.*;public class ConnDB {private Connection ct = null;public Connection getConn() {try {//1加载驱动    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");    //2得到连接    ct = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb1","sa","****");} catch (Exception e) {e.printStackTrace();}return ct;}}

4、演示









原创粉丝点击