Java-Java基础12之Servlet开发用户管理系统

主要内容有:Java Servlet的应用,开发一个用户管理系统。

文件结构——(纯servlet开发网页)
文件结构

tomcat配置数据源

<!--将数据源的配置加入到server.xml文件中的Host树枝下-->
<Context path="/myWebSite" docBase="D:/Workspace/servlet/myWebSite" debug="0">
    <!--name:给数据源设置名字(jndi) auth:表示该数据源是谁管理 type:类型-->
    <Resource name="luowei" auth="Container" type="javax.sql.DataSource"/>
    <ResourceParams name="shunping">
        <!--工厂设置-->
        <parameter>
            <name>factory</name>
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
        </parameter>
        <!--驱动设置-->
        <parameter>
            <name>driverClassName</name>
            <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
        </parameter>
        <!--设置url-->
        <parameter>
            <name>url</name>
            <value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test_user</value>
        </parameter>
        <!--设置连接数据库的用户名-->
        <parameter>
            <name>username</name>
            <value>sa</value>
        </parameter>
        <!--设置连接数据库的密码-->
        <parameter>
            <name>password</name>
            <value>luowei</value>
        </parameter>
        <!--设置连接池中最大的激活连接数-->
        <parameter>
            <name>maxActive</name>
            <value>200</value>
        </parameter>
        <!--设置连接池中最大的保留(空闲)连接数-->
        <parameter>
            <name>maxIdle</name>
            <value>10</value>
        </parameter>
        <!--客户端在队列池中最大等待时间,按秒计算;当设置为-1时,表示一直等待-->
        <parameter>
            <name>maxIdle</name>
            <value>10</value>
        </parameter>
    </ResourceParams>
</Context>
<!--
    如果使用连接池的方式来连接数据库,那么就要这样:
    Context ctt=new javax.naming.InitalContext();
    DataSource ds=(DataSource)ctt.lookup("java:comp/env/数据源的名字");
    ct=ds.getConnection();
-->

ServletContext介绍
ServletContext介绍

开发servlet的三种方法:

1.实现servlet接口(Hello.java)

/*
* 第一个Servlet,使用实现servlet接口的方式来开发
*
*/
package com.test1;
import javax.servlet.*;
import java.io.*;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class Hello implements Servlet {
    //该函数用于初始化该servlet(类似于类的构造函数)
    //该函数只会被调用一次(当用户第一次访问该servlet时被调用)
    public void init(ServletConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("init it");
    }
    //这个函数用于处理业务逻辑
    //程序员应当把业务逻辑代码写在这里
    //当用户每访问该servlet时,都会被调用
    //req:用于获得客户端(浏览器)的信息,res:用于向客户端(浏览器)返回信息
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
        System.out.println("service it");//向控制台打印
        //从res中得到PrintWriter(向浏览器打印)
        PrintWriter pw=res.getWriter();
        pw.println("hello,world");
    }
    //该函数用于得到servlet配置文件
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }
    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }
    //销毁servlet实例(释放内存),以下情况该函数被调用
    //1.reload 该servlet(webApps)
    //2.关闭tomcat
    //3.关机
    public void destroy() {
        System.out.println("destroy!");
        // TODO Auto-generated method stub
    }
}

2. 继承GenericServlet(HelloGen.java)

//这是第二种开发servlet的方法(继承GenericServlet开发)
package com.test2;
import javax.servlet.GenericServlet;
import javax.servlet.*;
import java.io.*;
public class HelloGen extends GenericServlet
{
    //重写service方法即可
    public void service(ServletRequest req, ServletResponse res)
    {
        //返回hello,world!generic
        try{
            PrintWriter pw=res.getWriter();
            pw.println("hello,world! generic");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

3. 通过继承HttpServlet(HelloHttp.java)

//这是第三种开发servlet的方法(通过继承HttpServlet)
package com.test3;
import javax.servlet.http.*;
import java.io.*;
public class HelloHttp extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        //业务逻辑
        try{
            PrintWriter pw=res.getWriter();
            pw.println("hello,HttpServlet");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    //处理post请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

用户管理系统model1开发

用户表设计

--run:
--sqlcmd -U sa -P luowei -d master
create database test_user;
use test_user;
create table users(
  useId int primary key identity(1,1),--用户id号
  username varchar(20),
  passwd varchar(20),
  email varchar(30),
  grade int --用户的级别
);
insert into users(username,passwd,email,grade) values("admin","admin","admin@sohu.com","1");
insert into users(username,passwd,email,grade) values("luowei","luowei","luowei@163.com","1");
insert into users(username,passwd,email,grade) values("test1","test1","test1@sina.com","5");
insert into users(username,passwd,email,grade) values("test2","test2","test2@sina.com","5");
select * from users;

1. 登录界面(Login.java)

//登录界面
package com.usermanage;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class Login extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        //业务逻辑
        try{
            //解决中文乱码
            res.setContentType("text/html;charset=GB2312");
            PrintWriter pw=res.getWriter();
            //返回登录界面
            pw.println("<html>");
            pw.println("<body><center>");
            //得到error信息
            String info=req.getParameter("info");
            if(info!=null)
            {
                pw.println("<h2>你的用户名或密码出错</h2>");
            }
            pw.println("<h1>登录界面</h1>");
            pw.println("<form action=loginCl method=post>");
            pw.println("用户名:<input type=text name=username height=30 weight=200><br>");
            pw.println(" 密码: <input type=password name=passwd height=30 weight=220><br>");
            pw.println("<input type=checkbox name=keep value=2>两周内不再登录<br>");
            pw.println("<input type=submit value=login><br>");
            pw.println("</form>");
            pw.println("</center></body>");
            pw.println("</html>");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    //处理post请求
    //req:用于获得浏览器的信息(向浏览器请求信息)
    //res:用于向浏览器返回的信息(向浏览器发送信息)
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

2. 登录处理界面(LoginCl.java)

//用户验证
/**
 *同一用户的不同页面共享数据(四种方式):
 *    1.通过sendRedirect("welcome?uname=name&passwd=password),
 其中welcome表示要跳转到的页面,uname,passwd表示要传递的参数,
 当有多个参数时要用 & 符号隔开,name和password表示参数的值
 2.利用隐藏表单
 <form action=login>
 <input type=hidden name=a value=b>
 </form>
 3.通过服务器端为浏览器分配的Session空间
 1.得到session
 HttpSession hs=request.getSession(true);
 2.向session添加属性
 hs.setAttribute(String name,Object val);
 3.从session得到某个属性
 String name=hs.getAttribute(String name);
 4.从session删除某个属性
 hs.removeAttribute(String name);
 4.利用cookie
 1.在服务器端创建:Cookie c=new Cookie(String name,String val);
 2.添加到客户端:response.addCookie(c)
 3.从客户端读到服务器:requestCookies();
 */
package com.usermanage;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        Connection ct=null;
        Statement sm=null;
        ResultSet rs=null;
        //业务逻辑
        try
        {
            //接收用户用户名和密码
            String u=req.getParameter("username");
            String p=req.getParameter("passwd");
            //PrintWriter pw=res.getWriter();
            System.out.println("username="+u+" passwd="+p);
            //连接数据库
            // Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            Class.forName("org.gjt.mm.mysql.Driver").newInstance();
            // 得到连接
            // ct=DriverManager.getConnection(
            // "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=test_user",
            // "sa","luowei");
            ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/test_user",
                    "root","root");
            // 创建Statement
            sm=ct.createStatement();
            // rs=sm.executeQuery("select top 1 * from users where username='"
            // +u+"' and passwd='"+p+"'");
            rs=sm.executeQuery("select username,passwd from users where username='"
                    +u+"' and passwd='"+p+"'");
            //验证
            if(rs.next())
            {
                //说明用户是存在的(合法)
                String dbPasswd=rs.getString(2);
                if(dbPasswd.equals(p)) //这样可以消除注入漏洞
                {
                    String keep=req.getParameter("keep");
                    System.out.println("keep="+keep);
                    if(keep!=null)//是否选中了checkbox
                    {
                        //将用户名和密码保存在客户端
                        //创建cookie
                        Cookie name=new Cookie("myname",u);
                        Cookie pass=new Cookie("mypasswd",p);
                        //设置时间
                        name.setMaxAge(14*24*3600);
                        pass.setMaxAge(14*24*3600);
                        //回写到客户端
                        res.addCookie(name);
                        res.addCookie(pass);
                    }
                    //将验证成功的信息,写入session
                    //得到session
                    HttpSession hs=req.getSession(true);
                    //修改session的存在时间(这里改成20秒)
                    hs.setMaxInactiveInterval(20);
                    //向session添加属性
                    hs.setAttribute("pass","ok");
                    //将用户名传到welcome页面(可以在浏览器中看到值)
                    res.sendRedirect("welcome?uname="+u+"&passwd="+p);
                }
            }
            else
            {
                //不合法
                //跳转
                res.sendRedirect("login?info=error1");//写要跳转到的servlet的url
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if(null!=rs) rs.close();
                if(null!=sm) sm.close();
                if(null!=ct) ct.close();
            }catch(Exception e)
            {
                e.printStackTrace();
            }
        }
/*             //验证
            if(p.equals("123"))
            {
                //合法
                //将验证成功的信息,写入session
                //得到session
                HttpSession hs=req.getSession(true);
                //修改session的存在时间(这里改成40秒)
                hs.setMaxInactiveInterval(40);
                //向session添加属性
                hs.setAttribute("pass","ok");
                //将用户名传到welcome页面(可以在浏览器中看到值)
                res.sendRedirect("welcome?uname="+u+"&passwd="+p);
            }
            else
            {
                //不合法
                //跳转
                res.sendRedirect("login?info=error1");//写要跳转到的servlet的url
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        } */
    }
    //处理post请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

3. 欢迎界面(Wel.java)

//欢迎界面
package com.usermanage;
import javax.servlet.http.*;
import javax.servlet.*;
import java.sql.*;
import java.io.*;
public class Wel extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        Connection ct=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        //业务逻辑
        try{
            //得到session
            HttpSession hs=req.getSession(true);
            String val=(String)hs.getAttribute("pass");
            if(val==null)//判断
            {
                //如果客户端session中没有用户信息,再看有没有cookie信息
                //客户端得到所有cookie信息
                Cookie [] allCookies=req.getCookies();
                int i=0;
                String name="";
                String passwd="";
                //如果allCookies不为空
                if(allCookies!=null)
                {
                    //从中取出cookie
                    for(i=0;i<allCookies.length;i++)
                    {
                        //依次取出
                        Cookie temp=allCookies[i];
                        if(temp.getName().equals("myname"))
                        {
                            name=temp.getValue();//得到cookie的值
                        }
                        else if(temp.getName().equals("mypasswd"))
                        {
                            passwd=temp.getValue();//得到cookie的值
                            System.out.println("passwd="+passwd);
                        }
                    }
                    //System.out.println("myname="+name+" passwd="+passwd);
                    if(!name.equals("")&&!passwd.equals(""))
                    {
                        //到logincl去验证
                        res.sendRedirect("loginCl?username="+name+"&passwd="+passwd);
                        System.out.println("myname="+name+" passwd="+passwd);
                        return;
                    }
                }
                //非法登录,跳转到登录界面并提示出错
                res.sendRedirect("login?info=error1");
                return;
            }
            //解决中文乱码
            res.setContentType("text/html;charset=GB2312");
            PrintWriter pw=res.getWriter();
            pw.println("<body><center>");
            //=====================分页的功能=============================
            int pageSize=5;        //一页显示几条记录
            int pageNow=1;        //希望显示第几页
            int rowCount=0;        //共有几条记录(查表)
            int pageCount=0;    //一共有几页(计算)
            //动态接收pageNow
            String sPageNow=req.getParameter("pageNow");
            if(sPageNow!=null)
            {
                //用户不是第一次进入welcome页面
                pageNow=Integer.parseInt(sPageNow);
            }
            //得到rowCount
            //加载驱动
            Class.forName("org.gjt.mm.mysql.Driver").newInstance();
            // 得到连接
            ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/test_user",
                    "root","root");
            ps=ct.prepareStatement("select count(*) from users");
            rs=ps.executeQuery();
            if(rs.next())
            {
                rowCount=rs.getInt(1);
            }
            //计算pageCount
            if(rowCount%pageSize==0)
            {
                pageCount=rowCount/pageSize;
            }
            else
            {
                pageCount=rowCount/pageSize+1;
            }
            ps=ct.prepareStatement("select * from users limit "+pageSize*(pageNow-1)
                    +","+pageSize);
            //给?赋值
            //ps.setInt(1,pageSize*(pageNow-1));
            //ps.setInt(2,pageSize);
            rs=ps.executeQuery();
            //表头
            pw.println("<table border=1>");
            pw.println("<tr><th>id</th><th>name</th><th>passwd</th>"
                    +"<th>email</th><th>grade</th><tr>");
            while(rs.next())
            {
                pw.println("<tr>");
                pw.println("<td>"+rs.getInt(1)+"</td>");
                pw.println("<td>"+rs.getString(2)+"</td>");
                pw.println("<td>"+rs.getString(3)+"</td>");
                pw.println("<td>"+rs.getString(4)+"</td>");
                pw.println("<td>"+rs.getInt(5)+"</td>");
                pw.println("</tr>");
            }
            pw.println("</table>");
            if(1!=pageNow)//上一页
            {
                pw.println("<a href=welcome?pageNow="+(pageNow-1)+">上一页</a>");
            }
            //显示超链接(页面)
            for(int i=pageNow;i<=pageNow+pageSize&&i<=pageCount;i++)
            {
                pw.println("<a href=welcome?pageNow="+i+">"+i+"</a>");
            }
            if(pageCount!=pageNow)//下一页
            {
                pw.println("<a href=welcome?pageNow="+(pageNow+1)+">下一页</a>");
            }
            pw.println("<br><br>");
            pw.println("<a href=welcome?pageNow="+1+">第一页</a> ");
            pw.println("<a href=welcome?pageNow="+(pageCount-pageSize)+">最后页</a>");
            pw.println("<br>");
            //得到从loginCl传递的 用户名
            String u=req.getParameter("uname");
            //得到从loginCl传递的 密码
            String p=req.getParameter("passwd");
            //在servlet中显示图片
            pw.println("<img src=imgs/1.gif><br>");
            pw.println("welcome,hello!"+u+" password="+p+"<br>");
            pw.println("<a href=login>返回重新登录</a>");
            pw.println("</center></body>");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    //处理post请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

servlet用户管理系统模型图 servlet用户管理系统模型图

Model2模式开发servlet用户管理系统

WEB-INF下的配置文件(web.xml)

<?xml version="1.0" encoding="gb2312"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
    <display-name>Welcome to myWebSite</display-name>
    <description>
        Welcome to myWebSite
    </description>
    <!-- JSPC servlet mappings start -->
    <servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>com.test1.Hello</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/servlet/Hello</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>hellogen</servlet-name>
        <servlet-class>com.test2.HelloGen</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hellogen</servlet-name>
        <url-pattern>/hellogen</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>hellohttp</servlet-name>
        <servlet-class>com.test3.HelloHttp</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hellohttp</servlet-name>
        <url-pattern>/hellohttp</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.user_mng.Login</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>loginCl</servlet-name>
        <servlet-class>com.user_mng.LoginCl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>loginCl</servlet-name>
        <url-pattern>/loginCl</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>main</servlet-name>
        <servlet-class>com.user_mng.Main</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>main</servlet-name>
        <url-pattern>/main</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>wel</servlet-name>
        <servlet-class>com.user_mng.Wel</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>wel</servlet-name>
        <url-pattern>/welcome</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>delUserCl</servlet-name>
        <servlet-class>com.user_mng.DelUserCl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>delUserCl</servlet-name>
        <url-pattern>/delUserCl</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>ok</servlet-name>
        <servlet-class>com.user_mng.Ok</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ok</servlet-name>
        <url-pattern>/ok</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>err</servlet-name>
        <servlet-class>com.user_mng.Err</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>err</servlet-name>
        <url-pattern>/err</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>update</servlet-name>
        <servlet-class>com.user_mng.Update</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>update</servlet-name>
        <url-pattern>/update</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>updateCl</servlet-name>
        <servlet-class>com.user_mng.UpdateCl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>updateCl</servlet-name>
        <url-pattern>/updateCl</url-pattern>
    </servlet-mapping>
    <!-- JSPC servlet mappings end -->
</web-app>

界面层_登录界面(Login.java)

//登录界面
package com.user_mng;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class Login extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        //业务逻辑
        try{
            //解决中文乱码
            res.setContentType("text/html;charset=GB2312");
            PrintWriter pw=res.getWriter();
            //返回登录界面
            pw.println("<html>");
            pw.println("<body bgcolor=#CEDEFF >");
            pw.println("<center>");
            pw.println("<img src=imgs/1.gif>");
            pw.println("<hr>");
            //得到error信息
            String info=req.getParameter("info");
            if(info!=null)
            {
                pw.println("<h2>你的用户名或密码出错</h2>");
            }
            pw.println("<h1>登录界面</h1>");
            pw.println("<form action=loginCl method=post>");
            pw.println("用户名:<input type=text name=username height=30 width=160><br>");
            pw.println(" 密码: <input type=password name=passwd height=30 width=160><br>");
            pw.println("<input type=checkbox name=keep value=2>两周内不再登录<br>");
            pw.println("<input type=submit value=login><br>");
            pw.println("</form>");
            pw.println("</center><hr>");
            pw.println("<img src=imgs/logo.gif>");
            pw.println("</body>");
            pw.println("</html>");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    //处理post请求
    //req:用于获得浏览器的信息(向浏览器请求信息)
    //res:用于向浏览器返回的信息(向浏览器发送信息)
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

界面层_验证用户(LoginCl.java)

//用户验证
/**
 *同一用户的不同页面共享数据(四种方式):
 *    1.通过sendRedirect("welcome?uname=name&passwd=password),
 其中welcome表示要跳转到的页面,uname,passwd表示要传递的参数,
 当有多个参数时要用 & 符号隔开,name和password表示参数的值
 2.利用隐藏表单
 <form action=login>
 <input type=hidden name=a value=b>
 </form>
 3.通过服务器端为浏览器分配的Session空间
 1.得到session
 HttpSession hs=request.getSession(true);
 2.向session添加属性
 hs.setAttribute(String name,Object val);
 3.从session得到某个属性
 String name=hs.getAttribute(String name);
 4.从session删除某个属性
 hs.removeAttribute(String name);
 4.利用cookie
 1.在服务器端创建:Cookie c=new Cookie(String name,String val);
 2.添加到客户端:response.addCookie(c)
 3.从客户端读到服务器:requestCookies();
 */
/*
*多个用户共享同一数据:
    1.利用ServletContext,它是在服务器端分配供多个用户共享的数据区域
    2.得到ServletContext实例:this.getServletContext();
    3.可以把它想像成一张表,和session非常相似,每一行是一个属性:
        1.添加属性:setAttribute(String name,Object ob)
        2.得到值:getAttribute(String name) 返回Object
        3.删除属性:removeAttribute(String name)
    4.生命周期:从创建开始,到服务器关闭而结束
*/
package com.user_mng;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet
{
    //添加网页访问次数的功能
    //重写init函数(init函数会在访问这个servlet文件时,会被调用一次)
    public void init()
    {
        try{
            //这个函数只会被调用一次
            //从文件中读取次数
            FileReader fr=new FileReader("f:/myCounter.txt");
            BufferedReader br=new BufferedReader(fr);
            //读出一行数据
            String numVal=br.readLine();
            //关闭文件流
            br.close();
            //将numVal值放入到servletContext
            this.getServletContext().setAttribute("visitTime",numVal+"");
            System.out.println("init被调用");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    //重写destroy函数(destroy函数在服务器被关闭时,会自动调用)
    public void destroy()
    {
        try{
            //再将新的次数写回文件
            FileWriter fw=new FileWriter("f:/myCounter.txt");
            BufferedWriter bw=new BufferedWriter(fw);
            //写入一行数据
            bw.write(this.getServletContext().getAttribute("visitTime").toString());
            //关闭文件流
            bw.close();
            System.out.println("destroy函数被调用");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        // Connection ct=null;
        // Statement sm=null;
        // ResultSet rs=null;
        //业务逻辑
        try
        {
            //接收用户用户名和密码
            String u=req.getParameter("username");
            String p=req.getParameter("passwd");
            //PrintWriter pw=res.getWriter();
            System.out.println("username="+u+" passwd="+p);
            //调用UserBeanCl,创建一个UserBeanCl对象
            UserBeanCl ubc=new UserBeanCl();
            //验证,使用UserBeanCl的方法
            if(ubc.checkUser(u,p))
            {
                String keep=req.getParameter("keep");
                System.out.println("keep="+keep);
                if(keep!=null)//是否选中了checkbox
                {
                    //将用户名和密码保存在客户端
                    //创建cookie
                    Cookie name=new Cookie("myname",u);
                    Cookie pass=new Cookie("mypasswd",p);
                    //设置时间
                    name.setMaxAge(14*24*3600);
                    pass.setMaxAge(14*24*3600);
                    //回写到客户端
                    res.addCookie(name);
                    res.addCookie(pass);
                }
                //将验证成功的信息,写入session
                //得到session
                HttpSession hs=req.getSession(true);
                //修改session的存在时间(这里改成20秒)
                hs.setMaxInactiveInterval(20);
                //向session添加属性
                hs.setAttribute("pass","ok");
                hs.setAttribute("uname",u);
                hs.setAttribute("passwd",p);
                //将servletContext中的visitTime中的值++
                String times=this.getServletContext().getAttribute("visitTime").toString();
                //对times++再重新放回servlet
                this.getServletContext().setAttribute("visitTime",(Integer.parseInt(times)+1)+"");
                //将用户名传到welcome页面(可以在浏览器中看到
                //res.sendRedirect("welcome?uname="+u+"&passwd="+p);
                res.sendRedirect("main");
            }
            else
            {
                //不合法
                //跳转
                res.sendRedirect("login?info=error1");//写要跳转到的servlet的url
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
/*             //验证
            if(p.equals("123"))
            {
                //合法
                //将验证成功的信息,写入session
                //得到session
                HttpSession hs=req.getSession(true);
                //修改session的存在时间(这里改成40秒)
                hs.setMaxInactiveInterval(40);
                //向session添加属性
                hs.setAttribute("pass","ok");
                //将用户名传到welcome页面(可以在浏览器中看到值)
                res.sendRedirect("welcome?uname="+u+"&passwd="+p);
            }
            else
            {
                //不合法
                //跳转
                res.sendRedirect("login?info=error1");//写要跳转到的servlet的url
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        } */
    }
    //处理post请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

界面层_主界面(Main.java)

//主界面//登录界面
package com.user_mng;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class Main extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        //业务逻辑
        try{
            //解决中文乱码
            res.setContentType("text/html;charset=GB2312");
            PrintWriter pw=res.getWriter();
            //返回登录界面
            pw.println("<html>");
            pw.println("<body bgcolor=#CEDEFF >");
            pw.println("<center>");
            pw.println("<img src=imgs/1.gif>");
            pw.println("<hr>");
            pw.println("<h1>主界面</h1><br>");
            pw.println("<a href=welcome>管理用户</a><br>");
            pw.println("<a href=?>添加用户</a><br>");
            pw.println("<a href=?>查找用户</a><br>");
            pw.println("<a href=?>安全退出</a><br>");
            pw.println("</center><hr>");
            pw.println("<img src=imgs/logo.gif>");
            pw.println("</body>");
            pw.println("</html>");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    //处理post请求
    //req:用于获得浏览器的信息(向浏览器请求信息)
    //res:用于向浏览器返回的信息(向浏览器发送信息)
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

界面层_欢迎界面(Wel.java)

//欢迎界面
package com.user_mng;
import javax.servlet.http.*;
import javax.servlet.*;
import java.util.*;
import java.sql.*;
import java.io.*;
public class Wel extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        Connection ct=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        //业务逻辑
        try{
            //得到session
            HttpSession hs=req.getSession(true);
            String val=(String)hs.getAttribute("pass");
            //从Session中得到用户名和密码
            String u=(String)hs.getAttribute("uname");
            String p=(String)hs.getAttribute("passwd");
            if(val==null)//判断
            {
                //如果客户端session中没有用户信息,再看有没有cookie信息
                //客户端得到所有cookie信息
                Cookie [] allCookies=req.getCookies();
                int i=0;
                String name="";
                String passwd="";
                //如果allCookies不为空
                if(allCookies!=null)
                {
                    //从中取出cookie
                    for(i=0;i<allCookies.length;i++)
                    {
                        //依次取出
                        Cookie temp=allCookies[i];
                        if(temp.getName().equals("myname"))
                        {
                            name=temp.getValue();//得到cookie的值
                        }
                        else if(temp.getName().equals("mypasswd"))
                        {
                            passwd=temp.getValue();//得到cookie的值
                            System.out.println("passwd="+passwd);
                        }
                    }
                    //System.out.println("myname="+name+" passwd="+passwd);
                    if(!name.equals("")&&!passwd.equals(""))
                    {
                        //到logincl去验证
                        res.sendRedirect("loginCl?username="+name+"&passwd="+passwd);
                        System.out.println("myname="+name+" passwd="+passwd);
                        return;
                    }
                }
                //非法登录,跳转到登录界面并提示出错
                res.sendRedirect("login?info=error1");
                return;
            }
            //解决中文乱码
            res.setContentType("text/html;charset=GB2312");
            PrintWriter pw=res.getWriter();
            pw.println("<body bgcolor=#CEDEFF >");
            pw.println("<center>");
            pw.println("<img src=imgs/1.gif>");
            pw.println("&nbsp;&nbsp;&nbsp;&nbsp;欢迎您:"+u+"<img src=imgs/luowei.gif>");
            pw.println("<hr>");
            //=====================分页的功能=============================
            int pageSize=5;        //一页显示几条记录
            int pageNow=1;        //希望显示第几页
            //int jumpPage=0;    //跳转的页面
            //动态接收pageNow
            String sPageNow=req.getParameter("pageNow");
            if(sPageNow!=null)
            {
                //用户不是第一次进入welcome页面
                pageNow=Integer.parseInt(sPageNow);
            }
            //调用UserBeanCl的方法
            UserBeanCl ubc=new UserBeanCl();
            ArrayList al=ubc.getResultByPage(pageNow,pageSize);
            pw.println("<h1>管理用户</h1><br>");
            //表头
            pw.println("<table border=1>");
            pw.println("<tr bgcolor=pink><th>用户id</th><th>用户名</th><th>密码</th>"
                    +"<th>邮箱</th><th>级别</th><th>修改用户</th><th>删除用户</th><tr>");
            //定义一个颜色数组
            String [] mycol={"silver","pink"};
            for(int i=0;i<al.size();i++)
            {
                //取出UserBean
                UserBean ub=(UserBean)al.get(i);
                pw.println("<tr bgcolor="+mycol[i%2]+">");
                pw.println("<td>"+ub.getUserId()+"</td>");
                pw.println("<td>"+ub.getUserName()+"</td>");
                pw.println("<td>"+ub.getPasswd()+"</td>");
                pw.println("<td>"+ub.getMail()+"</td>");
                pw.println("<td>"+ub.getGrade()+"</td>");
                pw.println("<td><a href=update?uId="+ub.getUserId()+"&uName="+ub.getUserName()+
                        "&uPass="+ub.getPasswd()+"&uEmail="+ub.getMail()+"&uGrade="+ub.getGrade()+">修改用户</a></td>");
                pw.println("<td><a href=delUserCl?userid="+ub.getUserId()+
                        " onClick=\"return window.confirm('您确认要删除该用户吗?')\">删除用户</a></td>");
                //弹出删除确认对话框,其中\"是转义符
                pw.println("</tr>");
            }
            pw.println("</table>");
            //接收jumpPae
            //jumpPage=Integer.parseInt(req.getParameter("jumpPage"));
            //pageNow=jumpPage;
            int pageCount=ubc.getPageCount();
            if(1!=pageNow)//上一页
            {
                pw.println("<a href=welcome?pageNow="+(pageNow-1)+">上一页</a>");
            }
            //显示超链接(页面)
            for(int i=pageNow;i<=pageNow+pageSize&&i<=pageCount;i++)
            {
                pw.println("<a href=welcome?pageNow="+i+">"+i+"</a>");
            }
            if(pageCount!=pageNow)//下一页
            {
                pw.println("<a href=welcome?pageNow="+(pageNow+1)+">下一页</a>");
            }
            pw.println("<br>");
            //指定跳转到某页
            pw.println("<form action=welcome>");
            pw.println("跳转到:<input type=text name=pageNow height=30 width=50>");
            pw.println("<input type=submit value=Go>");
            pw.println("</form>");
            pw.println("<br>");
            pw.println("<a href=welcome?pageNow="+1+">第一页</a> ");
            pw.println("<a href=welcome?pageNow="+(pageCount-pageSize)+">最后页</a>");
            pw.println("<br>");
/*             //得到从loginCl传递的 用户名
            String u=req.getParameter("uname");
            //得到从loginCl传递的 密码
            String p=req.getParameter("passwd");
*/
            pw.println("welcome,hello! "+u+" Your password:"+p+"<br>");
            pw.println("<a href=login>返回重新登录</a>");
            pw.println("<br>该网页被访问了"+Integer.parseInt(this.getServletContext().
                    getAttribute("visitTime").toString())+"次<br>");
            pw.println("您的ip="+req.getRemoteAddr()+"<br>");
            pw.println("您的主机名为:"+req.getRemoteHost()+"<br>");
            pw.println("</center><hr>");
            pw.println("<img src=imgs/logo.gif>");
            pw.println("</body>");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }finally{
            try
            {
                if(null!=rs) {rs.close();rs=null;}
                if(null!=ps) {ps.close();ps=null;}
                if(null!=ct) {ct.close();ct=null;}
            }catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
    //处理post请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

界面层_修改用户(Update.java)

//修改用户界面
package com.user_mng;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class Update extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        //业务逻辑
        try{
            //解决中文乱码
            res.setContentType("text/html;charset=GB2312");
            PrintWriter pw=res.getWriter();
            //返回登录界面
            pw.println("<html>");
            pw.println("<body bgcolor=#CEDEFF >");
            pw.println("<center>");
            pw.println("<img src=imgs/1.gif>");
            pw.println("<hr>");
            pw.println("<h1>修改用户信息</h1>");
            pw.println("<form action=updateCl>");
            pw.println("<table border=1>");
            pw.println("<tr><td>用户id</td><td><input readonly name=uId type=text value="
                    +req.getParameter("uId")+"></td></tr>");
            pw.println("<tr><td>用户名</td><td><input readonly name=uName type=text value="
                    +req.getParameter("uName")+"></td></tr>");
            pw.println("<tr><td>密码</td><td><input name=uPass type=text value="
                    +req.getParameter("uPass")+"></td></tr>");
            pw.println("<tr><td>邮箱</td><td><input name=uEmail type=text value="
                    +req.getParameter("uEmail")+"></td></tr>");
            pw.println("<tr><td>级别</td><td><input name=uGrade type=text value="
                    +req.getParameter("uGrade")+"></td></tr>");
            //提交按钮
            pw.println("<tr><td colspan=2><input type=submit value=修改用户"+
                    " onClick=\"return window.confirm('您确认要修改该用户吗?')\"></td></tr>");
            pw.println("</table></form>");
            pw.println("</center><hr>");
            pw.println("<img src=imgs/logo.gif>");
            pw.println("</body>");
            pw.println("</html>");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    //处理post请求
    //req:用于获得浏览器的信息(向浏览器请求信息)
    //res:用于向浏览器返回的信息(向浏览器发送信息)
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

界面层_修改用户处理(UpdateCl.java)

//处理修改某个用户界面
package com.user_mng;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class UpdateCl extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        //业务逻辑
        try{
            //解决中文乱码
            res.setContentType("text/html;charset=GB2312");
            PrintWriter pw=res.getWriter();
            //调用userBeanCl的删除用户的方法,完成删除任务
            UserBeanCl ubc=new UserBeanCl();
            //接收从Update.java中传递的值
            String id=req.getParameter("uId");
            String uPass=req.getParameter("uPass");
            String uEmail=req.getParameter("uEmail");
            String uGrade=req.getParameter("uGrade");
            if(ubc.updateUser(id,uPass,uEmail,uGrade))
            {
                //删除成功
                res.sendRedirect("ok");
            }else
            {
                //删除失败
                res.sendRedirect("err");
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    //处理post请求
    //req:用于获得浏览器的信息(向浏览器请求信息)
    //res:用于向浏览器返回的信息(向浏览器发送信息)
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

界面层_删除用户(DelUserCl.java)

//处理删除某个用户界面
package com.user_mng;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class DelUserCl extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        //业务逻辑
        try{
            //解决中文乱码
            res.setContentType("text/html;charset=GB2312");
            PrintWriter pw=res.getWriter();
            //调用userBeanCl的删除用户的方法,完成删除任务
            UserBeanCl ubc=new UserBeanCl();
            //接收从Wel.java中传递的id
            String id=req.getParameter("userid");
            if(ubc.delUser(id))
            {
                //删除成功
                res.sendRedirect("ok");
            }else
            {
                //删除失败
                res.sendRedirect("err");
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    //处理post请求
    //req:用于获得浏览器的信息(向浏览器请求信息)
    //res:用于向浏览器返回的信息(向浏览器发送信息)
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

界面层_操作失败(Err.java)

//操作失败界面
package com.user_mng;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class Err extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        //业务逻辑
        try{
            //解决中文乱码
            res.setContentType("text/html;charset=GB2312");
            PrintWriter pw=res.getWriter();
            //返回登录界面
            pw.println("<html>");
            pw.println("<body bgcolor=#CEDEFF >");
            pw.println("<center>");
            pw.println("<img src=imgs/1.gif>");
            pw.println("<hr>");
            pw.println("<h1>很遗憾,操作不成功!</h1>");
            pw.println("<a href=main>返回主界面</a>&nbsp;"
                    +"&nbsp;&nbsp<a href=welcome>返回上一页面</a>");
            pw.println("</center><hr>");
            pw.println("<img src=imgs/logo.gif>");
            pw.println("</body>");
            pw.println("</html>");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    //处理post请求
    //req:用于获得浏览器的信息(向浏览器请求信息)
    //res:用于向浏览器返回的信息(向浏览器发送信息)
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

界面层_操作成功(Ok.java)

//操作成功界面
package com.user_mng;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class Ok extends HttpServlet
{
    //处理get请求
    //req:用于获得浏览器的信息
    //res:用于向浏览返回的信
    public void doGet(HttpServletRequest req,HttpServletResponse res)
    {
        //业务逻辑
        try{
            //解决中文乱码
            res.setContentType("text/html;charset=GB2312");
            PrintWriter pw=res.getWriter();
            //返回登录界面
            pw.println("<html>");
            pw.println("<body bgcolor=#CEDEFF >");
            pw.println("<center>");
            pw.println("<img src=imgs/1.gif>");
            pw.println("<hr>");
            pw.println("<h1>恭喜你,操作成功!</h1>");
            pw.println("<a href=main>返回主界面</a>&nbsp;"
                    +"&nbsp;&nbsp<a href=welcome>返回上一页面</a>");
            pw.println("</center><hr>");
            pw.println("<img src=imgs/logo.gif>");
            pw.println("</body>");
            pw.println("</html>");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    //处理post请求
    //req:用于获得浏览器的信息(向浏览器请求信息)
    //res:用于向浏览器返回的信息(向浏览器发送信息)
    public void doPost(HttpServletRequest req,HttpServletResponse res)
    {
        this.doGet(req,res);
    }
}

model层_表示User表(UserBean.java)

//这是一个UserBean <-----> users表映射
//他的一个 对象 <-----> users表的一条记录对应
//数据
package com.user_mng;
public class UserBean{
    private int userId;
    private String userName;
    private String passwd;
    private String mail;
    private int grade;
    public void setUserId(int userId)
    {
        this.userId=userId;
    }
    public int getUserId()
    {
        return this.userId;
    }
    public void setUserName(String userName)
    {
        this.userName=userName;
    }
    public String getUserName()
    {
        return this.userName;
    }
    public void setPasswd(String passwd)
    {
        this.passwd=passwd;
    }
    public String getPasswd()
    {
        return this.passwd;
    }
    public void setMail(String mail)
    {
        this.mail=mail;
    }
    public String getMail()
    {
        return this.mail;
    }
    public void setGrade(int grade)
    {
        this.grade=grade;
    }
    public int getGrade()
    {
        return this.grade;
    }
}

model层_业务逻辑(UserBeanCl.java)

//这是一个处理类(处理users表) <----->操作UserBean
//业务逻辑
package com.user_mng;
import java.sql.*;
import java.util.*;
public class UserBeanCl
{
    //业务逻辑
    private Connection ct=null;
    private PreparedStatement ps=null;
    private ResultSet rs=null;
    private int rowCount=0;        //共有几条记录(查表)
    private int pageCount=0;    //一共有几页(计算)
    //public static UserBean ub=new UserBean();
/*     public UserBeanCl(UserBean ub)
    {
        this.ub=ub;
    } */
    //验证用户
    public boolean checkUser(String u,String p)
    {
        boolean b=false;
        try{
            //得到连接
            ConnDB cd=new ConnDB();
            ct=cd.getConn();
            // ps=ct.prepareStatement("select userName,passwd from users where userName='"
            // +ub.getUserName()+"' limit 1");
            ps=ct.prepareStatement("select userName,passwd from users where userName=? limit 1");
            ps.setString(1,u);
            rs=ps.executeQuery();
            if(rs.next())
            {
                String dbPasswd=rs.getString(2);
                if(dbPasswd.equals(p))
                {
                    b=true;
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            this.close();
        }
        return b;
    }
    /*1.如果返回ResultSet,那么在使用ResultSet时是不能关闭与该ResultSet
     *    相互关联的数据库连接等资源,从而造成资源浪费。
     *2.如果返回ResultSet,只能使用rs.getInt(?),rs.getString(?)...这样的
     *    方法来得到结果,代码的可读性不好,维护不方便。
     *3.利用集合:比如ArrayList作为中转,这样,我们就可以尽快的关闭rs,数据库连接
     *    同时更能体现面向对象编程,代码可读性好。
            1.将rs中的每条记录,封装成一个UserBean对象ub;
            2.将封装后的UserBean对象ub放入到ArrayList集合中,利于管理。
    */
    //-----------------------------
    //分页显示结果
    public ArrayList getResultByPage(int pageNow,int pageSize)
    {
        ArrayList al=new ArrayList();
        try
        {
            //得到rowCount
            ConnDB cd=new ConnDB();
            ct=cd.getConn();
            ps=ct.prepareStatement("select count(*) from users");
            rs=ps.executeQuery();
            if(rs.next())
            {
                rowCount=rs.getInt(1);
            }
            //计算pageCount
            if(rowCount%pageSize==0)
            {
                pageCount=rowCount/pageSize;
            }
            else
            {
                pageCount=rowCount/pageSize+1;
            }
            ps=ct.prepareStatement("select * from users limit "+pageSize*(pageNow-1)
                    +","+pageSize);
            //给?赋值
            //ps.setInt(1,pageSize*(pageNow-1));
            //ps.setInt(2,pageSize);
            rs=ps.executeQuery();
            while(rs.next())
            {
                //将rs中的每条记录封装到UserBean ub
                UserBean ub=new UserBean();
                ub.setUserId(rs.getInt(1));
                ub.setUserName(rs.getString(2));
                ub.setPasswd(rs.getString(3));
                ub.setMail(rs.getString(4));
                ub.setGrade(rs.getInt(5));
                al.add(ub);//将ub放入到ArrayList集合中
            }
        }catch(Exception e)
        {
            e.printStackTrace();
        }finally
        {
            this.close();
        }
        return al;
    }
    //修改用户
    public boolean updateUser(String id,String passwd,String email,String grade)
    {
        boolean b=false;
        try{
            //得到连接
            ConnDB cd=new ConnDB();
            ct=cd.getConn();
            String sql="update users set passwd='"+passwd+"',email='"+email+
                    "',grade='"+grade+"' where useId='"+id+"'";
            ps=ct.prepareStatement(sql);
            int num=ps.executeUpdate();
            if(num==1)
            {
                //删除成功
                b=true;
            }else
            {
                //删除失败
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            this.close();
        }
        return b;
    }
    //删除用户
    public boolean delUser(String id)
    {
        boolean b=false;
        try{
            //得到连接
            ConnDB cd=new ConnDB();
            ct=cd.getConn();
            String sql="delete from users where useId='"+id+"'";
            ps=ct.prepareStatement(sql);
            int num=ps.executeUpdate();
            if(num==1)
            {
                //删除成功
                b=true;
            }else
            {
                //删除失败
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            this.close();
        }
        return b;
    }
    //返回pageCount
    public int getPageCount()
    {
        return this.pageCount;
    }
    //关闭资源
    public void close()
    {
        try
        {
            if(null!=rs) {rs.close();rs=null;}
            if(null!=ps) {ps.close();ps=null;}
            if(null!=ct) {ct.close();ct=null;}
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

model层_连接数据库(ConnDB.java)

//从数据库中得到连接
package com.user_mng;
import java.sql.*;
public class ConnDB
{
    private Connection ct=null;
    public Connection getConn()
    {
        try{
            //得到rowCount
            //加载驱动
            Class.forName("org.gjt.mm.mysql.Driver").newInstance();
            // Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            // 得到连接
            // ct=DriverManager.getConnection(
            // "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=test_user",
            // "sa","luowei");
            ct=DriverManager.getConnection("jdbc:mysql://localhost:3306/test_user",
                    "root","root");
        }catch(Exception e){
            e.printStackTrace();
        }
        return ct;
/*        
        try{
            //利用数据源的方式访问数据库
            //创建一个上下文环境
            Context con=new javax.naming.InitalContext();
            //通过con得到数据源
            DataSource ds=(DataSource)con.lookup("java:comp/env/数据源的名字");
            ct=ds.getConnection();
        }catch(Eception e){
            e.printStackTrace();
        }
*/
    }
}

版权所有,转载请注明出处 luowei.github.io.