MVC 原意就是 数据模型(modle)、视图(view)、控制器(controller)
-
-
每张表都有一个数据类(modle类 内含对属性的操作方法(get和set))、一个service方法和一个控制器与之相对应,在写项目的时候尽量把对一类事务(增删改)的操作放在一个控制器内。下面的项目我把增删改查 全部放在了一个控制器内。
在该项目中,涉及一个表的操作,所以我就写了一个控制器(UserClServlet),对表的增删改查都在该控制器内。各个view页面通过传递一个参数type给控制器来辨别是属于哪种操作,再近一步做对数据的处理。对数据库的所有操作都在UsersService里面,控制器通过调用UsersService里面的方法来完成对数据库的增删改查操作。首先创建了一个User类 并生成设置和改变属性的方法 代码如下:
package com.mxf.domain;
public class Users {String name;String password;int id;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
然后为该类提供了service方法,包括 增删改查 和分页的部分方法代码如下:package com.mxf.service;
import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import com.mxf.domain.Users;import com.mxf.util.SQLUtil;public class UsersService {//增加public boolean AddUser(Users user){boolean flag = true;String sql = "insert into user values (?,?,?)";String []parameters ={user.getId()+"",user.getName(),user.getPassword()};try {SQLUtil.executeUpdate(sql, parameters);} catch (Exception e) {// TODO: handle exceptionflag = false;}return flag;}public Users getUserById (String id){Users users = new Users();String sql = "select * from user where id=?";String []parameters = {id};ResultSet rs = SQLUtil.executeQuery(sql, parameters);try {if(rs.next()){users.setId(rs.getInt(1));users.setName(rs.getString(2));users.setPassword(rs.getString(3));}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{SQLUtil.close(SQLUtil.getConn(), SQLUtil.getPs(), rs);}return users;}//修改public boolean UpdateUsers(Users users){boolean flag = true;String sql = "UPDATE USER SET userName=?,userpwd=? WHERE id=?";String []parameters = {users.getName(),users.getPassword(),users.getId()+""};try {SQLUtil.executeUpdate(sql, parameters);} catch (Exception e) {// TODO: handle exceptionflag=false;}return flag;}//删除public boolean delectUsers(String id){boolean flag = true;String sql = "delete from user where id=?";String []parameters = {id};try {SQLUtil.executeUpdate(sql, parameters);} catch (Exception e) {// TODO: handle exceptionflag = false;}return flag;}//验证public boolean checkUsers(Users users){boolean flag = false;String sql = "select * from user where userName=? and userpwd=?";String [] parameters = {users.getName(),users.getPassword()};ResultSet rs = SQLUtil.executeQuery(sql, parameters);try {if(rs.next()){flag = true;}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{SQLUtil.close(SQLUtil.getConn(), SQLUtil.getPs(), rs);}return flag;}//分页实现public ArrayList getUsersByPage(int pageNow,int pageSize){ArrayList<Users> arrayList = new ArrayList<Users>();String sql = " SELECT * FROM USER ORDER BY id LIMIT "+(pageNow-1)*pageSize+","+pageSize+"";ResultSet rs=SQLUtil.executeQuery(sql, null);try {while(rs.next()){Users u = new Users();u.setId(rs.getInt(1));u.setName(rs.getString(2));u.setPassword(rs.getString(3));arrayList.add(u);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{SQLUtil.close(SQLUtil.getConn(), SQLUtil.getPs(), rs);}return arrayList;}//分页 得到PageCountpublic int getPageCount(int pageSize){int rowCount = 0;String sql = "select count(*) from user";ResultSet rs = SQLUtil.executeQuery(sql, null);try {rs.next();rowCount= rs.getInt(1);} catch (SQLException e) {e.printStackTrace();}finally{SQLUtil.close(SQLUtil.getConn(), SQLUtil.getPs(), rs);}return (rowCount-1)/pageSize + 1;}//查找public Users selectUserById(String id){Users user = new Users();String sql = "select * from user where id=?";String [] parameters ={id};ResultSet rs = SQLUtil.executeQuery(sql, parameters);try {while(rs.next()){user.setId(rs.getInt(1));user.setName(rs.getString(2));user.setPassword(rs.getString(3));}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{SQLUtil.close(SQLUtil.getConn(), SQLUtil.getPs(), rs);}return user;}}
接下来是控制器 主要负责 验证、增删改查的任务代码如下:package com.mxf.controller;
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.mxf.domain.Users;import com.mxf.service.UsersService;public class UserClServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();String type = request.getParameter("type");UsersService usersService=new UsersService();if(type.equals("del")){String id = request.getParameter("id");if(usersService.delectUsers(id)){request.setAttribute("info", "删除");request.getRequestDispatcher("/Ok").forward(request, response);}else{request.setAttribute("info", "删除");request.getRequestDispatcher("/Err").forward(request, response);}}else if(type.equals("gotoUpdate")){String id = request.getParameter("id");Users users = usersService.getUserById(id);request.setAttribute("userinfo", users);request.getRequestDispatcher("/Update").forward(request, response);}else if(type.equals("update")){String username = request.getParameter("username");String password = request.getParameter("password");String id = request.getParameter("id");Users users = new Users();users.setId(Integer.parseInt(id));users.setName(username);users.setPassword(password);if(usersService.UpdateUsers(users)){request.setAttribute("info", "修改");request.getRequestDispatcher("/Ok").forward(request, response);}else{request.setAttribute("info", "修改");request.getRequestDispatcher("/Err").forward(request, response);}}else if(type.equals("gotoAdd")){request.getRequestDispatcher("/AddServletView").forward(request, response);}else if(type.equals("Add")){String id = request.getParameter("id");String username = request.getParameter("username");String password = request.getParameter("password");Users user = new Users();user.setId(Integer.parseInt(id));user.setName(username);user.setPassword(password);if(usersService.AddUser(user)){request.setAttribute("info", "添加");request.getRequestDispatcher("/Ok").forward(request, response);}else{request.setAttribute("info", "添加");request.getRequestDispatcher("/Err").forward(request, response);}}else if(type.equals("selectUser")){String id = request.getParameter("id");Users user = usersService.selectUserById(id);request.setAttribute("userInfo", user);request.getRequestDispatcher("/ResultServlet").forward(request, response);}else if(type.equals("LoginCheck")){String username = request.getParameter("username");String password = request.getParameter("password");Users user = new Users();user.setName(username);user.setPassword(password);if(usersService.checkUsers(user)){request.getRequestDispatcher("/MainFrame").forward(request, response);}else{request.setAttribute("error", "您的用户名或密码错误!");request.getRequestDispatcher("/LoginServlet").forward(request, response);}}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}
下面是工具类(数据库的操作)代码如下:/**
* sql工具类*/package com.mxf.util;import java.sql.*;public class SQLUtil {private static Connection conn= null;private static PreparedStatement ps = null;private static ResultSet rs = null;private static String driver = "com.mysql.jdbc.Driver";private static String url = "jdbc:mysql://localhost:3306/test";private static String pwd = "root";private static String user = "root";static{try {Class.forName(driver);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static Connection getConnection(){try {conn = DriverManager.getConnection(url,user,pwd);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}//统一的查询selectpublic static ResultSet executeQuery(String sql,String [] parameters){try {conn = getConnection();ps = conn.prepareStatement(sql);if(null!=parameters&&!parameters.equals("")){for(int i=0;i<parameters.length;i++){ps.setObject(i+1,parameters[i]);}}rs = ps.executeQuery();} catch (SQLException e) {e.printStackTrace();}finally{//关闭资源 在调用的最后关闭 现在关闭了 调用者取不到资源//close(conn, ps, rs);}return rs;}//执行一次的增、删、改public static void executeUpdate(String sql,String []parameters){conn = getConnection();try {ps = conn.prepareStatement(sql);if(null != parameters && !parameters.equals("")){for(int i=0;i<parameters.length;i++){ps.setObject(i+1, parameters[i]);}}ps.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();throw new RuntimeException(e.getMessage());}finally{close(conn, ps, rs);}}public static void close(Connection conn,PreparedStatement ps,ResultSet rs){if(null != rs){try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}rs = null;}if(null != ps){try {ps.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}ps = null;}if(null != conn){try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}conn = null;}}public static Connection getConn(){return conn;}public static PreparedStatement getPs(){return ps;}public static ResultSet getRs(){return rs;}}
下面是各种页面 即view层 MVC 中的V
登录界面:package com.mxf.view;
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();request.setCharacterEncoding("utf-8");out.println("<img src='images/4.jpg'/><hr>");out.println("<h1>用户登录<h1><br>");out.println("<form action='/UserManager3/UserClServlet?type=LoginCheck' method='post' >");out.println("用户名<input type='text' name='username'><br>");out.println("密码<input type='password' name='password'><br>");out.println("<input type='submit' value='提交'>");out.println(" </form>");String errorInfo = (String) request.getAttribute("error");if(null!=errorInfo){out.println(errorInfo);}out.println("<hr>");out.println("<img src='images/5.jpg'/>");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}
主界面:package com.mxf.view;
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MainFrame extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();request.setCharacterEncoding("utf-8");String username = request.getParameter("username");out.println("<img src='images/4.jpg'/> 欢迎 " + username + " 登录 " +"<a href='/UserManager3/LoginServlet'>重新登录</a>");out.println("<hr>");out.println("<h3>请选择您的操作</h3><br>");out.println("<a href='/UserManager3/ManageUsers?username="+username+"'>管理用户</a><br>");out.println("<a href='/UserManager3/UserClServlet?type=gotoAdd'>添加用户</a><br>");out.println("<a href='/UserManager3/SelectServlet'>查询用户</a><br>");out.println("<a href='/UserManager3/LoginServlet'>安全退出</a>");out.println("<hr>");out.println("<img src='images/5.jpg'/>");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}
用户管理界面 (显示多有用户并分页)package com.mxf.view;
import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;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.mxf.domain.Users;import com.mxf.service.UsersService;public class ManageUsers extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();String username=request.getParameter("username");out.println("<img src='images/4.jpg'/> " +"<a href='/UserManager3/MainFrame?username="+username+"'>返回主界面</a>" +" "+"<a href='/UserManager3/LoginServlet'> 安全退出</a><hr> ");out.println("<h3>管理用户</h3>");//分页int pageNow = 1; //表示第几页int pageSize = 5; //表示每页显示几行int pageCount = 0; //表示共有多少页//接收超链接pageNow数据String spageNow = request.getParameter("pageNow");if(null!=spageNow){pageNow = Integer.parseInt(spageNow);}UsersService usersService = new UsersService();pageCount = usersService.getPageCount(pageSize);ArrayList<Users> arrayList = usersService.getUsersByPage(pageNow, pageSize);out.println("<table border=1 width=500>");out.println("<tr><th>id</th><th>用户名</th><th>密码</th><th>删除用户</th><th>修改用户</th></tr>");for(Users users:arrayList){out.println("<tr><td>"+users.getId()+"</td><td>"+users.getName()+"</td><td>"+users.getPassword()+"" +"</td><td><a href='/UserManager3/UserClServlet?type=del&id="+users.getId()+"'>删除用户</a></td><td>" +"<a href='/UserManager3/UserClServlet?type=gotoUpdate&id="+users.getId()+"'>修改用户</a></td></tr>");}out.println("</table>");out.print("<a href='/UserManager3/ManageUsers?pageNow="+(pageNow==1?pageNow:(pageNow-1))+"'>上一页</a>");for(int i=1;i<=pageCount;i++){out.print("<a href='/UserManager3/ManageUsers?pageNow="+i+"'><"+i+"></a>");}out.print("<a href='/UserManager3/ManageUsers?pageNow="+(pageNow==pageCount?pageNow:(pageNow+1))+"'>下一页</a>");out.println(" "+"当前页"+pageNow+"/"+"总页数"+pageCount);out.println("<hr><img src='images/5.jpg'/>");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}
修改用户信息页面:package com.mxf.view;
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.mxf.domain.Users;public class Update extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();Users users = (Users) request.getAttribute("userinfo");out.println("<form action='/UserManager3/UserClServlet?type=update' method='post' >");out.println("<table border=1 width=500>");out.println("<tr><td>id</td><td><input type='text' readonly name='id' value='"+users.getId()+"'></td></tr>");out.println("<tr><td>用户名</td><td><input type='text' name='username' value='"+users.getName()+"'></td></tr>");out.println("<tr><td>密码</td><td><input type='text' name='password' value='"+users.getPassword()+"'></td></tr>");out.println("</table>");out.println("<input type='submit' value='修改' >");out.println("</form>");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}
添加用户页面:package com.mxf.view;
import java.io.IOException;import java.io.PrintWriter;
import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;
public class AddServletView extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html");PrintWriter out = response.getWriter();request.setCharacterEncoding("utf-8");out.println("<form action='/UserManager3/UserClServlet?type=Add' method='post' >");out.println("<table border=1 width=500>");out.println("<tr><td>id</td><td><input type='text' name='id' ></td></tr>");out.println("<tr><td>用户名</td><td><input type='text' name='username' ></td></tr>");out.println("<tr><td>密码</td><td><input type='text' name='password' ></td></tr>");out.println("</table>");out.println("<input type='submit' value='添加' >");out.println("</form>");out.println("<a href='/UserManager3/MainFrame'>返回主界面 </a>" );}
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
this.doGet(request, response);}
}
查询用户页面:package com.mxf.view;
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class SelectServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();request.setCharacterEncoding("utf-8");out.println("<form action='/UserManager3/UserClServlet?type=selectUser' method='post' >");out.println("<tr><td>id</td><td><input type='text' name='id' '></td></tr>");out.println("<input type='submit' value='查询' ><a href='/UserManager3/MainFrame'>返回主界面</a>" );out.println("</form>");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}
查询后返回结果页面:package com.mxf.view;
import java.io.IOException;import java.io.PrintWriter;
import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;
import com.mxf.domain.Users;
public class ResultServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html");PrintWriter out = response.getWriter();request.setCharacterEncoding("utf-8");Users users = (Users) request.getAttribute("userInfo");out.println("<table border=1 width=500>");out.println("<tr><td>id</td><td>"+users.getId()+"</td></tr>");out.println("<tr><td>用户名</td><td>"+users.getName()+"</td></tr>");out.println("<tr><td>密码</td><td>"+users.getPassword()+"</td></tr>");out.println("</table>");out.println("<a href='/UserManager3/MainFrame'>返回主界面 </a>");}
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
this.doGet(request, response);}
}