一个简单的MVC实例
来源:互联网 发布:游戏制作软件下载 编辑:程序博客网 时间:2024/06/06 04:45
一个简单的MVC实例
利用jsp+javabean+Servlet模拟一个用户登陆,实现对数据库的增删改查。
1,创建数据库
我使用的数据库是MySql,创建一个Iuser表,具体如下
2,创建一个javabean类,对表中的3个属性进行封装
User.java
package cn.jw.vo;
public class User {
private String username;
private String userspass;
private String userid;
public User(){
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserspass() {
return userspass;
}
public void setUserspass(String userspass) {
this.userspass = userspass;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
}
3,创建一个名为DataBaseConnection.java的类,实现数据库的驱动
DataBaseConnection.java
package cn.jw.dbc;
import java.sql.*;
public class DataBaseConnection {
public static final StringDBDRIVER="com.mysql.jdbc.Driver";
public static final StringDBURL="jdbc:mysql://localhost:3306/test";
public static final StringDBUSER="root";
public static final StringDBPASS="zhy1121";
private Connection conn=null;
public DataBaseConnection(){
try {
Class.forName(DBDRIVER);
this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Connection getConnection() {
// TODO Auto-generated method stub
return this.conn;
}
public void close() {
// TODO Auto-generated method stub
try {
this.conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4,创建一个dao接口,并创建一个实现类和一个代理类,继承这个接口
接口用来定义一些方法,在下面会用到
UserDao.java
package cn.jw.dao;
import java.util.List;
import cn.jw.vo.User;
public interface UserDAO {
}
UserDaoImpl.java
public class UserDaoImpl implements UserDAO {
private Connection conn=null;
private PreparedStatementpstmt=null;
private int count=0;
public UserDaoImpl(Connection conn1){
this.conn=conn1;
}
}
UserDaoPoxy.java
package cn.jw.dao.poxy;
import java.util.ArrayList;
import java.util.List;
import cn.jw.dao.UserDAO;
import cn.jw.dao.impl.UserDaoImpl;
import cn.jw.dbc.DataBaseConnection;
import cn.jw.vo.User;
public class UserDaoPoxy implements UserDAO {
private DataBaseConnection dbc = null;
private UserDAO dao = null;
public UserDaoPoxy(){
this.dbc = new DataBaseConnection();
this.dao = new UserDaoImpl(this.dbc.getConnection());
}
}
具体的实现方法根据功能再添加。
5,创建一个工厂类
DaoFactory.java
package cn.jw.factory;
import cn.jw.dao.UserDAO;
import cn.jw.dao.poxy.UserDaoPoxy;
public class DaoFactory {
public static UserDAO getUserDaoInstance() throws Exception{
return new UserDaoPoxy();
}
}
6,实现第一个功能,用户登陆
(1)新建一个名为Login.jsp的jsp文件,来实现用户登录界面
<form action="LoginServlet" method="post">
用户ID:<input type="text" name="userid"><br>
密码:<input type="text" name="userpass"><br>
<input type="submit" value="登录">
</form>
将表单数据提交到LoginServlet中进行处理
(2)新建一个名为LoginServlet的Servlet,重写重写doGet(),doPost()方法
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path="findAll.jsp";
String userid1=request.getParameter("userid");
String password1=request.getParameter("userpass");
List<String> info=new ArrayList<String>();
if(userid1==null||"".equals(userid1)){
info.add("用户ID不能为空!");
}
if(password1==null||"".equals(password1)){
info.add("密码不能为空!");
}
if(info.size()==0){
User user=new User();
user.setUserid(userid1);
user.setUserspass(password1);
try {
if(DaoFactory.getUserDaoInstance().findUser(user)){
info.add("Login Success! welcome "+user.getUsername());
}else{
info.add("Error username or password!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
request.setAttribute("info1", info);
request.getRequestDispatcher(path).forward(request,response);
}
跳转到的findAll.jsp稍后再写
(3)在接口中添加相应的方法,再在实现类和代理中重写,实现用户登录
public interface UserDAO {
public boolean findUser(User user)throws Exception;
}
public class UserDaoImplimplements UserDAO {
......
public boolean findUser(User user)throws Exception {
// TODO Auto-generated method stub
boolean flag = false;
try{
String sql="select * from Iuser where userid=? and userpass=?";
pstmt = this.conn.prepareStatement(sql);
pstmt.setString(1,user.getUserid());
pstmt.setString(2,user.getUserspass());
ResultSet rs = pstmt.executeQuery();
if(rs.next()){
user.setUsername(rs.getString(2));
flag = true;
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
this.conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
return flag;
}
......
}
public class UserDaoPoxyimplements UserDAO {
......
public boolean findUser(User user)throws Exception {
// TODO Auto-generated method stub
boolean flag = false;
try{
flag=this.dao.findUser(user);
}catch(Exception e){
e.printStackTrace();
}finally{
this.dbc.close();
}
return flag;
}
......
}
7,用类似的方法实现注册(增),删除,修改的操作
代码略
8,实现查找与分页显示
(1)新建一个jsp页面用来显示,就是前面提到的findAll.jsp
<body>
<%
int pageSize=3;
int currentPage=1;
int total=DaoFactory.getUserDaoInstance().getCount();
int lastpage;
if(total%pageSize==0){
lastpage=total/pageSize;
}else{
lastpage=total/pageSize+1;
}
if(currentPage<1){
currentPage=1;
}
if(currentPage>lastpage)
{
currentPage=lastpage;
}
%>
<%
request.setCharacterEncoding("gb2312");
List<String> info2=(List<String>)session.getAttribute("info1");
if(info2!=null){
Iterator<String> iter=info2.iterator();
while(iter.hasNext()){
%>
<h1><%=iter.next()%></h1>
<%
}
}
String keywords=(String)request.getAttribute("kw");
if(keywords==null){
keywords="";
}
// List<User> all=DaoFactory.getUserDaoInstance().findAll(keywords,currentPage,pageSize);
List<User> userall=new ArrayList<User>();
userall=(List<User>)request.getAttribute("userall1");
Iterator<User> iter=userall.iterator();
//Iterator<User> iter=all.iterator();
%>
<form action="FindAllServlet" method="post">
请输入查询关键字:<input type="text" name="kw" value="<%=keywords%>">
<input type="submit" value="查询"/>
</form> <br>
<br>
<table border="1" >
<tr>
<td>Userid</td>
<td>Username</td>
<td>Userpass</td>
<td>操作</td>
</tr>
<%
while(iter.hasNext()){
User user=iter.next();
%>
<tr>
<td><%=user.getUserid()%></td>
<td><%=user.getUsername()%></td>
<td><%=user.getUserspass()%></td>
<td><a href="Delete.jsp">删除</a> <a href="Update.jsp">修改</a></td>
</tr>
<%
}
%>
<tr>
</td>
</tr>
<tr>
<td>
共<%=lastpage%>页
第<%=currentPage%>页
<a href="FindAllServlet?currentPage=1">首页</a>
<a href="FindAllServlet?currentPage=<%=currentPage-1%>">上一页</a>
<a href="FindAllServlet?currentPage=<%=currentPage+1%>">下一页</a>
<a href="FindAllServlet?currentPage=<%=lastpage%>">尾页</a>
</td>
</tr>
</table>
</body>
(2),创建一个名为FindAllServlet的Servlet,重写doGet(),doPost()方法
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int pageSize=3;
int currentPage;
String page = request.getParameter("currentPage");
if(page!=null){
currentPage=Integer.parseInt(request.getParameter("currentPage"));
}else{
currentPage=1;
}
request.setCharacterEncoding("gb2312");
String keywords=request.getParameter("kw");
if(keywords==null){
keywords="";
}
String path="findAll.jsp";
List<User> userall = null;
try {
userall = DaoFactory.getUserDaoInstance().findAll(keywords,currentPage,pageSize);
request.setAttribute("userall1", userall);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("kw", keywords);
request.getRequestDispatcher(path).forward(request,response);
}
(3),添加具体的方法来实现按条件查询,并且将结果分页显示
首先实现按条件查询
public interface UserDAO {
......
public List<User> findAll(String keyWord)throws Exception;
......
}
public class UserDaoImplimplements UserDAO {
......
List<User> all = new ArrayList<User>();
User user = null;
String sql="select * from Iuser where userid like ? or username like ?";
this.pstmt=this.conn.prepareStatement(sql);
pstmt.setString(1,"%"+keyWord+"%");
pstmt.setString(2,"%"+keyWord+"%");
ResultSet rs=this.pstmt.executeQuery();
while(rs.next()){
user=new User();
user.setUserid(rs.getString(1));
user.setUsername(rs.getString(2));
user.setUserspass(rs.getString(3));
all.add(user);
}
this.pstmt.close();
return all;
......
}
public class UserDaoPoxyimplements UserDAO {
......
List<User> all=null;
try {
all=this.dao.findAll(keyWord);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.dbc.close();
}
return all;
......
}
然后利用上述方法返回的集合实现分页查询
实现的方法如下
public interface UserDAO {
......
public List<User> findAll(String keyWord,int currentPage,int pageSize)throws Exception;
......
}
public class UserDaoImplimplements UserDAO {
......
ist<User> all=new ArrayList<User>();
all=this.findAll(keyWord);
int total=all.size();
int lastpage;
if(total%pageSize==0){
lastpage=total/pageSize;
}else{
lastpage=total/pageSize+1;
}
if(currentPage<1){
currentPage=1;
}
if(currentPage>lastpage){
currentPage=lastpage;
}
int fromIndex=(currentPage-1)*pageSize;
int toIndex=fromIndex+pageSize;
if(toIndex>total){
toIndex=total;
}
all=all.subList(fromIndex, toIndex);
System.out.println(all.size());
return all;
......
}
public class UserDaoPoxyimplements UserDAO {
......
ublic List<User> findAll(String keyWord,int currentPage, int pageSize)
throws Exception {
// TODO Auto-generated method stub
List<User> all=new ArrayList<User>();
all=this.dao.findAll(keyWord,currentPage,pageSize);
this.dbc.close();
return all;
}
......
}
9,注意事项
(1)在分页跳转的时候,链接为Servlet,不能为.jsp。
(2)调用findAll(String keyWord, int currentPage,int pageSize)时要注意里面的3个参数都不能为空,可以加一个if判断,若是空就定一个初值。
(3)注意页面跳转时参数传值的问题。
- 一个简单的MVC实例
- 一个简单的spring mvc实例
- 一个简单的php MVC实例
- Spring MVC一个简单的实例
- 一个简单的.NET MVC 实例
- spring web mvc 的一个简单实例
- mvc的一个实例
- 一个很简单的Spring MVC 入门实例
- c# MVC例子学习必看 一个简单的.NET MVC 实例
- 【CI学习笔记】一个用PHP写的,简单的MVC实例
- 前端web开发的MVC模式-从一个简单的实例讲起
- 一个Spring MVC简单的登录小实例(不带数据库)
- 前端web开发的MVC模式 - 从一个简单实例讲起
- 一个简单实例——快速理解前端web开发的MVC模式
- 前端web开发的MVC模式 - 从一个简单实例讲起
- 前端web开发的MVC模式 - 从一个简单实例讲起
- 前端web开发的MVC模式 - 从一个简单实例讲起
- 前端web开发的MVC模式 - 从一个简单实例讲起
- 第八周项目训练2
- 金山快盘将停止个人用户存储服务 转型个人视频服务
- 类和指针(1)
- 易經大意 441_460
- 【项目管理和构建】——Maven下载、安装和配置
- 一个简单的MVC实例
- 编程小练习
- 第9周项目1:深复制体验(2)
- 第九周2-我的数组类
- 指针逆序输出
- 第九周——动态分配,深复制;
- hive on spark安装
- 第八周上机实践项目3:指向学生类的指针
- Hadoop单机模式,并执行WordCount