jsp之简单的用户管理系统(4,mvc模式)

这里写图片描述

源代码:http://download.csdn.net/detail/kaikai_sk/9676590

界面层:

Login.JSP

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'Login.jsp' starting page</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="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body bgcolor="pink"> 
  <center>
   用户登录<br><hr>
   <!-- 注意了,虽然的servlet这里的有一个/但是在这里的action中不能加/ -->
   <form action="LoginCl" method="post">
   用户名:<input type="text" name="username"/><br>
   密&nbsp;&nbsp;码:<input type="password" name="password"/><br>
   <input type ="submit" value="提交" />
   <input type="reset" value ="重置"/>
   </form>
   </center>
  </body>
</html>



Wel.jsp
<%@ page language="java" import="java.util.*,java.sql.*, com.hao.model.*" pageEncoding="gbk"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'Wel.jsp' starting page</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="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body> 
  <form action="UserClServlet" method="get">
   恭喜<%=request.getParameter("username")%>!登陆成功!!!
   <br>
   <a href ="Login.jsp">返回重新登录</a>
   <h1>用户信息列表</h1>
   <%

            int pageNow =Integer.parseInt(request.getAttribute("pageNow").toString());
             int pageCount =Integer.parseInt(request.getAttribute("pageCount").toString());
            ArrayList al=(ArrayList)request.getAttribute("al");
             %>
             <table border=1>
             <tr><td>用户编号</td><td>用户名</td><td>用户密码</td><td>电子邮件</td><td>等级</td></tr>
             <%
             for (int i =0;i<al.size();i++)
             {
             //从al中取出UserBean
             UserBean ub =(UserBean)al.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)
                {
                %>
                    <!-- 第一页 -->
                    <a href=UserClServlet?pageNow=1&username=<%=request.getParameter("username")%>>第一页</a>
                    <a href=UserClServlet?pageNow=<%=pageNow-1 %>&username=<%=request.getParameter("username")%>>上一页</a>

                <%      
                }
             %>
            <%

            //显示超链接
            for (int i=1;i<=pageCount;i++)
            {
                %>
                 <a href=UserClServlet?pageNow=<%=i %>&username=<%=request.getParameter("username")%>> <%=i %> </a>
                <%
            }
             %>
             <!-- 下一页 -->
             <%
             if (pageNow!=pageCount)
             {
             %>
             <a href=UserClServlet?pageNow=<%=pageNow+1 %>&username=<%=request.getParameter("username")%>>下一页</a>
             <!-- 最后一页 -->
             <!--声明:这里的sevlet转跳一定不能加/写成/UserClServlet?否则就错了!!! -->
             <a href=UserClServlet?pageNow=<%=pageCount %>&username=<%=request.getParameter("username")%>>最后一页</a>
             <%
             }
              %>
            </form>
  </body>
</html>


控制层:


LoginCl.java

//这是一个控制器,主要完成对用户身份的验证
//本身并不实际完成身份验证的业务逻辑,而是去调model的业务逻辑完成对数据处理...
package com.hao.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hao.model.*;

public class LoginCl 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 username=request.getParameter("username");
        String password=request.getParameter("password");
        //使用模型UserBeanCl,完成对用户身份的验证
        //创建UserBeanCl对象
        UserBeanCl ubc=new UserBeanCl();
        //调用方法
        if (ubc.checkUser(username, password))
        {
            //登陆成功!!
            //这种跳转为转向
            //response.sendRedirect("Wel.jsp");
            //在跳转到Wel.jsp页面前就要把要显示的数据就要准备好!!!
            ArrayList al =ubc.fenye(1);
            int pageCount =ubc.getPageCount();
            //将al pageCount放入request中...
            request.setAttribute("al", al);
            request.setAttribute("pageCount", pageCount);
            request.setAttribute("pageNow", 1);

            //因为sendRedirect跳转的效率不高,在公司里常常用转发的方法....
            //这种转发效率高,并且request中的对象还可以在下个页面中使用
            //在本案例中request对象指的是上面的两句话result和pageCount
            request.getRequestDispatcher("Wel.jsp").forward(request, response);
        }
        else
        {
            //登录失败!!!
            //response.sendRedirect("Login.jsp");
            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 {
        this.doGet(request, response);
    }

}

UserClServlet.java
//处理用户的分页显示
//也用于处理用户的增删改

package com.hao.controller;

import java.io.IOException;
import com.hao.model.*;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UserClServlet 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 {
            this.doPost(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 {
        try
        {
            //得到pageNow 
            int pageNow =Integer.parseInt(request.getParameter("pageNow").toString());
            UserBeanCl ubc =new  UserBeanCl();
            //在跳转到Wel.jsp页面前就要把要显示的数据就要准备好!!!
            ArrayList al =ubc.fenye(pageNow);
            int pageCount =ubc.getPageCount();
            //将al pageCount放入request中...
            //说明这里写成setAttribute那么在下也就要用getAttribute来接受
            //如果是参数就要用getParameter来接受,不能搞混咯!!!!
            request.setAttribute("pageCount", pageCount+"");
            request.setAttribute("al", al);
            request.setAttribute("pageNow", pageNow);

            //重新跳回Wel.jsp
            request.getRequestDispatcher("Wel.jsp").forward(request, response);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            //System.out.println("这是UserClServlet的测试finally");          
        }

    }

}



业务逻辑层:
ConDB.java

//当一段代码被使用三次以上就应该把这样的代码封装到一个函数里面
package com.hao.model;

import java.sql.*;

public class ConDB {
    private Connection ct=null;
    public Connection getct()
    {
        Connection con=null;
        try
        {
             //1加载驱动
            String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
            String url="jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb";
            Class.forName(driver);
            con =DriverManager.getConnection (url,"sa","hao123");
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            return con ;
        }

    }


}

UserBean.java

//这是一个javaBean对应Users表数据.

//表中有几个字段,那么这个java中就有多少个私有属性
//他的一个实例代表一个USers表中的一条记录.
package com.hao.model;

public class UserBean {

    private int userId;
    private String userName;
    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;
    }
    private String passwd;
    private String email;
    private int grade;
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public int getUserId() {
        return userId;
    }
}


UserBeanCl.java
//这是一个处理类,有些人喜欢把它叫做BO business object 
//主要是封装users表的各种操作[增加\删除\修改\查询].

package com.hao.model;

import java.sql.*;
import java.util.*;

public class UserBeanCl {

    private Connection ct =null;
    private Statement  sm =null;
    private ResultSet rs =null;


    private int pageSize=3;
    private int rowCount=0;//从数据库中得到
    private int pageCount =0;//一共有多少页                     通过pageSize和rowCount获得.


    //得到总页数
    public int getPageCount()
    {
        try
        {
            //得到连接
            ct =new ConDB().getct();
            //3创建Statement 
            sm=ct.createStatement();
            //4查询
            rs=sm.executeQuery("select count(*) from users ");
            if(rs.next())
            {
                rowCount =rs.getInt(1);
                //计算pageCount
                pageCount=(rowCount+pageSize-1)/pageSize;

            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            this.closed();
        }
        return pageCount ;
    }
    //分页函数
    public ArrayList fenye ( int pageNow)
    {
        ArrayList al =new  ArrayList();

        try
        {
            //得到连接
            ct =new ConDB().getct();
            //3创建Statement 
            sm=ct.createStatement();
            //查询出需要显示的记录.
             rs=sm.executeQuery("select top "+pageSize
                     +" * from users where userid not in ( select top "+pageSize*(pageNow-1)+" userid from users )");
             while(rs.next())
             {
                 UserBean ub =new UserBean();
                 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));
                 //将ub放进al中
                 al.add(ub);
             }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            this.closed();
            return al;
        }
    }


    //验证用户是否存在!
    public boolean  checkUser (String u,String p)
    {

        boolean b=false;
        String sql ="select top 1 passwd from users where username ='"+u+"'";
        try
        {

            //得到连接
            ct=new ConDB().getct();
            sm =ct.createStatement();
            rs=sm.executeQuery(sql);
            if(rs.next())
            {
                if(rs.getString(1).equals(p))
                {
                    b=true;
                }
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            this.closed();
        }
        return b;
    }
//关闭资源

    public void closed()
    {
        try
        {
        if(rs!=null){rs.close(); rs=null;}
        if(sm!=null){sm.close(); sm=null;}
        if(ct!=null){ct.close(); ct =null;}
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值