jsp+DAO+servlet+sqlserver2000的session 分页(CRUD)例子
2008-09-22 21:33
609 查看
jsp+DAO+servlet+sqlserver2000的session 分页(CRUD)例子
好久没有做过这个框架了.
这个框架用了以下设计模式.
1.工厂模式.
2. 单例模式的懒汉模式(很多程序员说的单态模式即本框架中的单例模式)
3. 模板模式
以下源代码的架构.
jsp_servlet_DAO
---src
----dao
----dao.impl
---facade
---persistent
---servlet
---servlet.helper
---util
--config.properties
以下是这个框架的源代码
dao package
第一,定义一个抽像的工厂,用于产生工厂的工厂
AbstractFactory.java
package dao;
import java.util.Properties;
public abstract class AbstractFactory
{
private static AbstractFactory factory;
public abstract UserDao getUserDao();
public static AbstractFactory newInstance() throws Exception
{
if(factory==null)
{
Properties p=new Properties();
p.load(AbstractFactory.class.getResourceAsStream("/config.properties"));
factory=(AbstractFactory)Class.forName(p.getProperty("daoFactory")).newInstance();
}
return factory;
}
}
Dao.java 接口
第二,定义个具体的业务接口
package dao;
public interface Dao
{
public void insert(Object con,Object o) throws Exception;
public void update(Object con,Object o) throws Exception;
public void delete(Object con,Object o) throws Exception;
public Object select(Object con,Object o) throws Exception;
}
第三,定义JDBC工厂,继承AbstractFactory.
JDBCDaoFactory.java
package dao;
import dao.impl.UserDaoImpl;
public class JDBCDaoFactory extends AbstractFactory
{
private UserDao userDao;
public UserDao getUserDao()
{
if(userDao==null)
{
return new UserDaoImpl();
}
return userDao;
}
}
UserDao.java
第四,定义用户接口继承业务接口.使用户接口加强.
package dao;
import java.util.List;
public interface UserDao extends Dao
{
public Object login(Object con,Object o) throws Exception;
public List getAll(Object con) throws Exception;
}
dao.impl 包
(DAO,UserDao接口的具体实现类)
第五, UserDaoImpl 具体实现类
package dao.impl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import persistent.UserPersistent;
import persistent.UserVO;
import dao.UserDao;
public class UserDaoImpl implements UserDao
{
private UserPersistent up;
public UserDaoImpl()
{
up=new UserPersistent();
}
public List getAll(Object con) throws Exception
{
String sql="select * from users";
Connection con1=(Connection)con;
ResultSet rs=con1.prepareStatement(sql).executeQuery();
ArrayList al=new ArrayList();
while(rs.next())
{
al.add(up.select(rs));
}
return al;
}
public Object login(Object con, Object o) throws Exception
{
UserVO user=(UserVO)o;
String sql="select * from users where userName='"+user.getUserName()+"' and pwd='"+user.getPwd()+"'";
Connection con1=(Connection)con;
ResultSet rs=con1.prepareStatement(sql).executeQuery();
if(rs.next())
{
return up.select(rs);
}
throw new Exception("用户名或密码错误,无法登陆");
}
public void delete(Object con, Object o) throws Exception
{
up.delete(con, o);
}
public void insert(Object con, Object o) throws Exception
{
up.insert(con, o);
}
public Object select(Object con, Object o) throws Exception
{
return up.select(con, o);
}
public void update(Object con, Object o) throws Exception
{
up.update(con, o);
}
}
facade 包
第六, 定义facade接中针对用户的接口的实现类
package facade;
import java.util.List;
import dao.AbstractFactory;
import dao.UserDao;
public class Facade implements IFacade
{
private UserDao userDao;
public Facade() throws Exception
{
userDao=AbstractFactory.newInstance().getUserDao();
}
public void deleteUser(Object con, Object o) throws Exception
{
this.userDao.delete(con, o);
}
public List getAll(Object con) throws Exception
{
// TODO Auto-generated method stub
return this.userDao.getAll(con);
}
public void inserUser(Object con, Object o) throws Exception
{
this.userDao.insert(con, o);
}
public Object login(Object con, Object o) throws Exception
{
// TODO Auto-generated method stub
return this.userDao.login(con, o);
}
public void updateUser(Object con, Object o) throws Exception
{
this.userDao.update(con, o);
}
}
第七, 定义业务工厂,同样也使用了单例模式(整个JVM只有一个实列,有则用已有的实例,没有则实例化一个新的实列,这样性能开销相对较少)
package facade;
public class FacadeFactory
{
private static IFacade facade=null;
public static IFacade getFacade() throws Exception
{
if(facade==null)
{
facade=new Facade();
}
return facade;
}
}
第八,定义具体的业务接口
package facade;
import java.util.List;
public interface IFacade
{
public void inserUser(Object con,Object o) throws Exception;
public void deleteUser(Object con,Object o) throws Exception;
public void updateUser(Object con,Object o) throws Exception;
public Object login(Object con,Object o) throws Exception;
public List getAll(Object con) throws Exception;
}
persistent 包(具体针对jdbc的持久层包)
第九, 定义一个javaBean
package persistent;
import java.sql.Date;
public class UserVO
{
private String userName;
private String pwd ;
private Date birthday ;
private String trade;
private String sex ;
public Date getBirthday()
{
return birthday;
}
public void setBirthday(Date birthday)
{
this.birthday = birthday;
}
public String getPwd()
{
return pwd;
}
public void setPwd(String pwd)
{
this.pwd = pwd;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
public String getTrade()
{
return trade;
}
public void setTrade(String trade)
{
this.trade = trade;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
}
第十,定义一个持久层的包(与facade 包中的IFacade中的接中一一对应)
Persistent.java 接口
package persistent;
import java.sql.ResultSet;
public interface Persistent
{
public void insert(Object con,Object o) throws Exception;
public void update(Object con,Object o) throws Exception;
public void delete(Object con,Object o) throws Exception;
public Object select(Object con,Object o) throws Exception;
public Object select(ResultSet rs) throws Exception;
}
十一,具体的UserPersistent 实现类
package persistent;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class UserPersistent implements Persistent
{
public void delete(Object con, Object o) throws Exception
{
UserVO user=(UserVO)o;
String sql="delete from users where userName='"+user.getUserName()+"'";
Connection con1=(Connection)con;
con1.prepareStatement(sql).executeUpdate();
}
public void insert(Object con, Object o) throws Exception
{
UserVO user=(UserVO)o;
String sql="insert into users(userName,sex,trade,pwd,birthday) values(?,?,?,?,?)";
Connection con1=(Connection)con;
PreparedStatement ps=con1.prepareStatement(sql);
ps.setString(1, user.getUserName());
ps.setString(2, user.getSex());
ps.setString(3, user.getTrade());
ps.setString(4, user.getPwd());
ps.setDate(5, user.getBirthday());
ps.executeUpdate();
}
public Object select(Object con, Object o) throws Exception
{
UserVO user=(UserVO)o;
String sql="select * from users where userName='"+user.getUserName()+"'";
Connection con1=(Connection)con;
ResultSet rs=con1.prepareStatement(sql).executeQuery();
if(rs.next())
{
return select(rs);
}
else
{
throw new Exception("没有找到对应的用户");
}
}
public Object select(ResultSet rs) throws Exception
{
UserVO user=new UserVO();
user.setBirthday(rs.getDate("birthday"));
user.setSex(rs.getString("sex"));
user.setUserName(rs.getString("userName"));
user.setTrade(rs.getString("trade"));
user.setPwd(rs.getString("pwd"));
return user;
}
public void update(Object con, Object o) throws Exception
{
UserVO user=(UserVO)o;
String sql="update users set sex=?,trade=?,pwd=?,birthday=? where userName=?";
Connection con1=(Connection)con;
PreparedStatement ps=con1.prepareStatement(sql);
ps.setString(1, user.getSex());
ps.setString(2, user.getTrade());
ps.setString(3, user.getPwd());
ps.setDate(4,user.getBirthday());
ps.setString(5, user.getUserName());
ps.executeUpdate();
}
}
servlet 包
十二
BaseServlet.java (父类提供抽象方法及具体方法,抽象方法由子类实现,父类的具体方法为子类实现的抽象方法提供相关服务。)
package servlet;
import java.io.IOException;
import java.sql.Connection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.ConManager;
public abstract class BaseServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
request.setCharacterEncoding("utf-8");
Connection con=null;
try
{
con=ConManager.getConnect();
con.setAutoCommit(false);
String resultPage=process(request,response,con);
con.commit();
request.getRequestDispatcher(resultPage).forward(request, response);
}
catch (Exception e)
{
try
{
con.rollback();
}
catch(Exception e1)
{
e1.printStackTrace();
}
request.setAttribute("error", e.getMessage());
request.getRequestDispatcher("error.jsp").forward(request, response);
}
finally
{
try
{
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public abstract String process(HttpServletRequest request, HttpServletResponse response,Object con)
throws Exception;
}
十三
package servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import servlet.helper.MakeUser;
import facade.FacadeFactory;
public class DeleteUser extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
FacadeFactory.getFacade().deleteUser(con, MakeUser.getUser(request, response));
return "succ.jsp";
}
}
十四
package servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import servlet.helper.MakeUser;
import facade.FacadeFactory;
public class GetAll extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
request.getSession().setAttribute("users", FacadeFactory.getFacade().getAll(con));
return "getPage";
}
}
十五
package servlet;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GetPage extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
int pageSize=2;
List users=(List)request.getSession().getAttribute("users");
int pageCount=users.size()/pageSize+(users.size()%pageSize==0?0:1);
int currentPage=1;
if(request.getParameter("page")!=null)
{
currentPage=Integer.parseInt(request.getParameter("page"));
}
if(currentPage<1)
{
currentPage=1;
}
if(currentPage>pageCount)
{
currentPage=pageCount;
}
int currentPageFirstRow=(currentPage-1)*pageSize;
ArrayList pageRows=new ArrayList();
for (int i = currentPageFirstRow; i < currentPageFirstRow+pageSize; i++)
{
if(i>=users.size())
{
break;
}
pageRows.add(users.get(i));
}
request.setAttribute("pageRows", pageRows);
String pageHtml="";
if(currentPage!=1)
{
pageHtml=pageHtml+"<a href=/"getPage?page=1/">首页</a>";
pageHtml=pageHtml+"<a href=/"getPage?page="+(currentPage-1)+"/">上一页</a>";
}
if(currentPage!=pageCount)
{
pageHtml=pageHtml+"<a href=/"getPage?page="+(currentPage+1)+"/">下一页</a>";
pageHtml=pageHtml+"<a href=/"getPage?page="+(pageCount)+"/">尾页</a>";
}
request.setAttribute("pageHtml", pageHtml);
return "userList.jsp";
}
}
十六
package servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import persistent.UserVO;
import servlet.helper.MakeUser;
import facade.FacadeFactory;
public class InsertUser extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
FacadeFactory.getFacade().inserUser(con, MakeUser.getUser(request, response));
return "succ.jsp";
}
}
十七
package servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import servlet.helper.MakeUser;
import facade.FacadeFactory;
public class Login extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
request.getSession().setAttribute("user", FacadeFactory.getFacade().login(con, MakeUser.getUser(request, response)));
return "index.jsp";
}
}
十八
package servlet;
import java.sql.Date;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import persistent.UserVO;
import servlet.helper.MakeUser;
import facade.FacadeFactory;
public class UpdateUser extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
FacadeFactory.getFacade().updateUser(con, MakeUser.getUser(request, response));
return "succ.jsp";
}
}
servlet.helper 包(将请求的参数包装成一个类,不用每次都包装,)
十九
package servlet.helper;
import java.sql.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import persistent.UserVO;
public class MakeUser
{
public static UserVO getUser(HttpServletRequest request,HttpServletResponse response) throws Exception
{
UserVO user=new UserVO();
user.setUserName(request.getParameter("userName"));
user.setPwd(request.getParameter("pwd"));
user.setTrade(request.getParameter("trade"));
user.setSex(request.getParameter("sex"));
if(request.getParameter("birthday")!=null && request.getParameter("birthday").length()>1)
{
user.setBirthday(Date.valueOf(request.getParameter("birthday")));
}
return user;
}
}
二十 属性文件 config.properties
driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
url=jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs;selectMethod=cursor
uid=sa
pwd=
daoFactory=dao.JDBCDaoFactory
具体的 jsp文件
deleteuser.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<form name="form1" method="post" action="deleteUser">
请输入客户的名称:
<input type="text" name="userName">
<input type="submit" name="Submit" value="删除">
</form>
</body>
</html>
error.jsp
<%@page contentType="text/html;charset=utf-8"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
${requestScope.error}
</body>
</html>
index.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>�ޱ����ĵ�</title>
</head>
<frameset rows="*" cols="204,*" framespacing="1" frameborder="yes" border="1">
<frame src="left.jsp" name="leftFrame" frameborder="yes" scrolling="yes">
<frame src="loginsucc.jsp" name="mainFrame" frameborder="yes" scrolling="yes">
</frameset>
<noframes><body>
</body></noframes>
</html>
left.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<p><a href="loginsucc.jsp" target="mainFrame">个人页面</a></p>
<p><a href="getAll" target="mainFrame">客户查询</a></p>
<p><a href="deleteuser.jsp" target="mainFrame">删除客户信息</a></p>
</body>
</html>
login.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<form name="form1" method="post" action="login">
<table width="60%" border="0" align="center">
<tr>
<td width="23%">用户名</td>
<td width="77%"><input name="userName" type="text" id="userName">
<a href="register.jsp">注册</a> </td>
</tr>
<tr>
<td>密码</td>
<td><input name="pwd" type="text" id="pwd"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="提交"></td>
</tr>
</table>
</form>
<p> </p>
</body>
</html>
register.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<form name="form1" method="post" action="insertUser">
<table width="80%" border="0" align="center">
<tr>
<td width="22%">姓名</td>
<td width="34%"><input name="userName" type="text" id="userName"></td>
<td width="19%">性别</td>
<td width="25%">
<select name="sex">
<option value="01">男</option>
<option value="02">女</option>
</select>
</td>
</tr>
<tr>
<td>生日</td>
<td><input name="birthday" type="text" id="birthday"></td>
<td>密码</td>
<td><input name="pwd" type="text" id="pwd"></td>
</tr>
<tr>
<td>确认密码</td>
<td colspan="3"><input name="pwd1" type="text" id="pwd1"></td>
</tr>
<tr>
<td>行业</td>
<td colspan="3"><textarea name="trade" id="trade"></textarea></td>
</tr>
<tr>
<td colspan="4"><div align="center">
<input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重置">
</div></td>
</tr>
</table>
</form>
</body>
</html>
regsucc.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
注册成功 <a href="login.jsp">登陆</a></body>
</html>
update.jsp
<%@page contentType="text/html;charset=utf-8"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<form name="form1" method="post" action="updateUser">
<table width="80%" border="0" align="center">
<tr>
<td width="22%">姓名</td>
<td width="34%"><input name="userName" type="text" id="userName" value="${sessionScope.user.userName}"></td>
<td width="19%">性别</td>
<td width="25%"><input name="sex" type="text" id="sex" value="${sessionScope.user.sex}"></td>
</tr>
<tr>
<td>生日</td>
<td><input name="birthday" type="text" id="birthday" value="${sessionScope.user.birthday}"></td>
<td>密码</td>
<td><input name="pwd" type="text" id="pwd" value="${sessionScope.user.pwd}"></td>
</tr>
<tr>
<td>确认密码</td>
<td colspan="3"><input name="pwd1" type="text" id="pwd1" value="${sessionScope.user.pwd}"></td>
</tr>
<tr>
<td>行业</td>
<td colspan="3"><textarea name="trade" id="trade">${sessionScope.user.trade}</textarea></td>
</tr>
<tr>
<td colspan="4"><div align="center">
<input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重置">
</div></td>
</tr>
</table>
</form>
</body>
</html>
userList.jsp
<%@page contentType="text/html;charset=utf-8"%><html>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<table width="100%" border="0">
<tr>
<td width="31%">客户姓名</td>
<td width="18%">性别</td>
<td width="17%">生日</td>
<td width="17%">行业</td>
<td width="17%">密码</td>
</tr>
<c:forEach items="${requestScope.pageRows}" var="user1">
<tr>
<td>${user1.userName}</td>
<td>${user1.sex}</td>
<td>${user1.birthday}</td>
<td>${user1.trade}</td>
<td>${user1.pwd}</td>
</tr>
</c:forEach>
<tr>
<td colspan="5">
${pageHtml}
</td>
</tr>
</table>
</body>
</html>
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>BaseServlet</servlet-name>
<servlet-class>servlet.BaseServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>insertUser</servlet-name>
<servlet-class>servlet.InsertUser</servlet-class>
</servlet>
<servlet>
<servlet-name>UpdateUser</servlet-name>
<servlet-class>servlet.UpdateUser</servlet-class>
</servlet>
<servlet>
<servlet-name>deleteUser</servlet-name>
<servlet-class>servlet.DeleteUser</servlet-class>
</servlet>
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>servlet.Login</servlet-class>
</servlet>
<servlet>
<servlet-name>GetAll</servlet-name>
<servlet-class>servlet.GetAll</servlet-class>
</servlet>
<servlet>
<servlet-name>GetPage</servlet-name>
<servlet-class>servlet.GetPage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BaseServlet</servlet-name>
<url-pattern>/BaseServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>insertUser</servlet-name>
<url-pattern>/insertUser</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UpdateUser</servlet-name>
<url-pattern>/updateUser</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>deleteUser</servlet-name>
<url-pattern>/deleteUser</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GetAll</servlet-name>
<url-pattern>/getAll</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GetPage</servlet-name>
<url-pattern>/getPage</url-pattern>
</servlet-mapping>
</web-app>
需要的jar包
jstl.jar
standard.jar
sqlserver 2000的jar包
msbase.jar
mssqlserver.jar
msutil.jar
以下源代码没有经过美化,还相应的验证
好久没有做过这个框架了.
这个框架用了以下设计模式.
1.工厂模式.
2. 单例模式的懒汉模式(很多程序员说的单态模式即本框架中的单例模式)
3. 模板模式
以下源代码的架构.
jsp_servlet_DAO
---src
----dao
----dao.impl
---facade
---persistent
---servlet
---servlet.helper
---util
--config.properties
以下是这个框架的源代码
dao package
第一,定义一个抽像的工厂,用于产生工厂的工厂
AbstractFactory.java
package dao;
import java.util.Properties;
public abstract class AbstractFactory
{
private static AbstractFactory factory;
public abstract UserDao getUserDao();
public static AbstractFactory newInstance() throws Exception
{
if(factory==null)
{
Properties p=new Properties();
p.load(AbstractFactory.class.getResourceAsStream("/config.properties"));
factory=(AbstractFactory)Class.forName(p.getProperty("daoFactory")).newInstance();
}
return factory;
}
}
Dao.java 接口
第二,定义个具体的业务接口
package dao;
public interface Dao
{
public void insert(Object con,Object o) throws Exception;
public void update(Object con,Object o) throws Exception;
public void delete(Object con,Object o) throws Exception;
public Object select(Object con,Object o) throws Exception;
}
第三,定义JDBC工厂,继承AbstractFactory.
JDBCDaoFactory.java
package dao;
import dao.impl.UserDaoImpl;
public class JDBCDaoFactory extends AbstractFactory
{
private UserDao userDao;
public UserDao getUserDao()
{
if(userDao==null)
{
return new UserDaoImpl();
}
return userDao;
}
}
UserDao.java
第四,定义用户接口继承业务接口.使用户接口加强.
package dao;
import java.util.List;
public interface UserDao extends Dao
{
public Object login(Object con,Object o) throws Exception;
public List getAll(Object con) throws Exception;
}
dao.impl 包
(DAO,UserDao接口的具体实现类)
第五, UserDaoImpl 具体实现类
package dao.impl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import persistent.UserPersistent;
import persistent.UserVO;
import dao.UserDao;
public class UserDaoImpl implements UserDao
{
private UserPersistent up;
public UserDaoImpl()
{
up=new UserPersistent();
}
public List getAll(Object con) throws Exception
{
String sql="select * from users";
Connection con1=(Connection)con;
ResultSet rs=con1.prepareStatement(sql).executeQuery();
ArrayList al=new ArrayList();
while(rs.next())
{
al.add(up.select(rs));
}
return al;
}
public Object login(Object con, Object o) throws Exception
{
UserVO user=(UserVO)o;
String sql="select * from users where userName='"+user.getUserName()+"' and pwd='"+user.getPwd()+"'";
Connection con1=(Connection)con;
ResultSet rs=con1.prepareStatement(sql).executeQuery();
if(rs.next())
{
return up.select(rs);
}
throw new Exception("用户名或密码错误,无法登陆");
}
public void delete(Object con, Object o) throws Exception
{
up.delete(con, o);
}
public void insert(Object con, Object o) throws Exception
{
up.insert(con, o);
}
public Object select(Object con, Object o) throws Exception
{
return up.select(con, o);
}
public void update(Object con, Object o) throws Exception
{
up.update(con, o);
}
}
facade 包
第六, 定义facade接中针对用户的接口的实现类
package facade;
import java.util.List;
import dao.AbstractFactory;
import dao.UserDao;
public class Facade implements IFacade
{
private UserDao userDao;
public Facade() throws Exception
{
userDao=AbstractFactory.newInstance().getUserDao();
}
public void deleteUser(Object con, Object o) throws Exception
{
this.userDao.delete(con, o);
}
public List getAll(Object con) throws Exception
{
// TODO Auto-generated method stub
return this.userDao.getAll(con);
}
public void inserUser(Object con, Object o) throws Exception
{
this.userDao.insert(con, o);
}
public Object login(Object con, Object o) throws Exception
{
// TODO Auto-generated method stub
return this.userDao.login(con, o);
}
public void updateUser(Object con, Object o) throws Exception
{
this.userDao.update(con, o);
}
}
第七, 定义业务工厂,同样也使用了单例模式(整个JVM只有一个实列,有则用已有的实例,没有则实例化一个新的实列,这样性能开销相对较少)
package facade;
public class FacadeFactory
{
private static IFacade facade=null;
public static IFacade getFacade() throws Exception
{
if(facade==null)
{
facade=new Facade();
}
return facade;
}
}
第八,定义具体的业务接口
package facade;
import java.util.List;
public interface IFacade
{
public void inserUser(Object con,Object o) throws Exception;
public void deleteUser(Object con,Object o) throws Exception;
public void updateUser(Object con,Object o) throws Exception;
public Object login(Object con,Object o) throws Exception;
public List getAll(Object con) throws Exception;
}
persistent 包(具体针对jdbc的持久层包)
第九, 定义一个javaBean
package persistent;
import java.sql.Date;
public class UserVO
{
private String userName;
private String pwd ;
private Date birthday ;
private String trade;
private String sex ;
public Date getBirthday()
{
return birthday;
}
public void setBirthday(Date birthday)
{
this.birthday = birthday;
}
public String getPwd()
{
return pwd;
}
public void setPwd(String pwd)
{
this.pwd = pwd;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
public String getTrade()
{
return trade;
}
public void setTrade(String trade)
{
this.trade = trade;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
}
第十,定义一个持久层的包(与facade 包中的IFacade中的接中一一对应)
Persistent.java 接口
package persistent;
import java.sql.ResultSet;
public interface Persistent
{
public void insert(Object con,Object o) throws Exception;
public void update(Object con,Object o) throws Exception;
public void delete(Object con,Object o) throws Exception;
public Object select(Object con,Object o) throws Exception;
public Object select(ResultSet rs) throws Exception;
}
十一,具体的UserPersistent 实现类
package persistent;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class UserPersistent implements Persistent
{
public void delete(Object con, Object o) throws Exception
{
UserVO user=(UserVO)o;
String sql="delete from users where userName='"+user.getUserName()+"'";
Connection con1=(Connection)con;
con1.prepareStatement(sql).executeUpdate();
}
public void insert(Object con, Object o) throws Exception
{
UserVO user=(UserVO)o;
String sql="insert into users(userName,sex,trade,pwd,birthday) values(?,?,?,?,?)";
Connection con1=(Connection)con;
PreparedStatement ps=con1.prepareStatement(sql);
ps.setString(1, user.getUserName());
ps.setString(2, user.getSex());
ps.setString(3, user.getTrade());
ps.setString(4, user.getPwd());
ps.setDate(5, user.getBirthday());
ps.executeUpdate();
}
public Object select(Object con, Object o) throws Exception
{
UserVO user=(UserVO)o;
String sql="select * from users where userName='"+user.getUserName()+"'";
Connection con1=(Connection)con;
ResultSet rs=con1.prepareStatement(sql).executeQuery();
if(rs.next())
{
return select(rs);
}
else
{
throw new Exception("没有找到对应的用户");
}
}
public Object select(ResultSet rs) throws Exception
{
UserVO user=new UserVO();
user.setBirthday(rs.getDate("birthday"));
user.setSex(rs.getString("sex"));
user.setUserName(rs.getString("userName"));
user.setTrade(rs.getString("trade"));
user.setPwd(rs.getString("pwd"));
return user;
}
public void update(Object con, Object o) throws Exception
{
UserVO user=(UserVO)o;
String sql="update users set sex=?,trade=?,pwd=?,birthday=? where userName=?";
Connection con1=(Connection)con;
PreparedStatement ps=con1.prepareStatement(sql);
ps.setString(1, user.getSex());
ps.setString(2, user.getTrade());
ps.setString(3, user.getPwd());
ps.setDate(4,user.getBirthday());
ps.setString(5, user.getUserName());
ps.executeUpdate();
}
}
servlet 包
十二
BaseServlet.java (父类提供抽象方法及具体方法,抽象方法由子类实现,父类的具体方法为子类实现的抽象方法提供相关服务。)
package servlet;
import java.io.IOException;
import java.sql.Connection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.ConManager;
public abstract class BaseServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
request.setCharacterEncoding("utf-8");
Connection con=null;
try
{
con=ConManager.getConnect();
con.setAutoCommit(false);
String resultPage=process(request,response,con);
con.commit();
request.getRequestDispatcher(resultPage).forward(request, response);
}
catch (Exception e)
{
try
{
con.rollback();
}
catch(Exception e1)
{
e1.printStackTrace();
}
request.setAttribute("error", e.getMessage());
request.getRequestDispatcher("error.jsp").forward(request, response);
}
finally
{
try
{
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public abstract String process(HttpServletRequest request, HttpServletResponse response,Object con)
throws Exception;
}
十三
package servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import servlet.helper.MakeUser;
import facade.FacadeFactory;
public class DeleteUser extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
FacadeFactory.getFacade().deleteUser(con, MakeUser.getUser(request, response));
return "succ.jsp";
}
}
十四
package servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import servlet.helper.MakeUser;
import facade.FacadeFactory;
public class GetAll extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
request.getSession().setAttribute("users", FacadeFactory.getFacade().getAll(con));
return "getPage";
}
}
十五
package servlet;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GetPage extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
int pageSize=2;
List users=(List)request.getSession().getAttribute("users");
int pageCount=users.size()/pageSize+(users.size()%pageSize==0?0:1);
int currentPage=1;
if(request.getParameter("page")!=null)
{
currentPage=Integer.parseInt(request.getParameter("page"));
}
if(currentPage<1)
{
currentPage=1;
}
if(currentPage>pageCount)
{
currentPage=pageCount;
}
int currentPageFirstRow=(currentPage-1)*pageSize;
ArrayList pageRows=new ArrayList();
for (int i = currentPageFirstRow; i < currentPageFirstRow+pageSize; i++)
{
if(i>=users.size())
{
break;
}
pageRows.add(users.get(i));
}
request.setAttribute("pageRows", pageRows);
String pageHtml="";
if(currentPage!=1)
{
pageHtml=pageHtml+"<a href=/"getPage?page=1/">首页</a>";
pageHtml=pageHtml+"<a href=/"getPage?page="+(currentPage-1)+"/">上一页</a>";
}
if(currentPage!=pageCount)
{
pageHtml=pageHtml+"<a href=/"getPage?page="+(currentPage+1)+"/">下一页</a>";
pageHtml=pageHtml+"<a href=/"getPage?page="+(pageCount)+"/">尾页</a>";
}
request.setAttribute("pageHtml", pageHtml);
return "userList.jsp";
}
}
十六
package servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import persistent.UserVO;
import servlet.helper.MakeUser;
import facade.FacadeFactory;
public class InsertUser extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
FacadeFactory.getFacade().inserUser(con, MakeUser.getUser(request, response));
return "succ.jsp";
}
}
十七
package servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import servlet.helper.MakeUser;
import facade.FacadeFactory;
public class Login extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
request.getSession().setAttribute("user", FacadeFactory.getFacade().login(con, MakeUser.getUser(request, response)));
return "index.jsp";
}
}
十八
package servlet;
import java.sql.Date;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import persistent.UserVO;
import servlet.helper.MakeUser;
import facade.FacadeFactory;
public class UpdateUser extends BaseServlet
{
public String process(HttpServletRequest request, HttpServletResponse response, Object con) throws Exception
{
FacadeFactory.getFacade().updateUser(con, MakeUser.getUser(request, response));
return "succ.jsp";
}
}
servlet.helper 包(将请求的参数包装成一个类,不用每次都包装,)
十九
package servlet.helper;
import java.sql.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import persistent.UserVO;
public class MakeUser
{
public static UserVO getUser(HttpServletRequest request,HttpServletResponse response) throws Exception
{
UserVO user=new UserVO();
user.setUserName(request.getParameter("userName"));
user.setPwd(request.getParameter("pwd"));
user.setTrade(request.getParameter("trade"));
user.setSex(request.getParameter("sex"));
if(request.getParameter("birthday")!=null && request.getParameter("birthday").length()>1)
{
user.setBirthday(Date.valueOf(request.getParameter("birthday")));
}
return user;
}
}
二十 属性文件 config.properties
driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
url=jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs;selectMethod=cursor
uid=sa
pwd=
daoFactory=dao.JDBCDaoFactory
具体的 jsp文件
deleteuser.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<form name="form1" method="post" action="deleteUser">
请输入客户的名称:
<input type="text" name="userName">
<input type="submit" name="Submit" value="删除">
</form>
</body>
</html>
error.jsp
<%@page contentType="text/html;charset=utf-8"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
${requestScope.error}
</body>
</html>
index.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>�ޱ����ĵ�</title>
</head>
<frameset rows="*" cols="204,*" framespacing="1" frameborder="yes" border="1">
<frame src="left.jsp" name="leftFrame" frameborder="yes" scrolling="yes">
<frame src="loginsucc.jsp" name="mainFrame" frameborder="yes" scrolling="yes">
</frameset>
<noframes><body>
</body></noframes>
</html>
left.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<p><a href="loginsucc.jsp" target="mainFrame">个人页面</a></p>
<p><a href="getAll" target="mainFrame">客户查询</a></p>
<p><a href="deleteuser.jsp" target="mainFrame">删除客户信息</a></p>
</body>
</html>
login.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<form name="form1" method="post" action="login">
<table width="60%" border="0" align="center">
<tr>
<td width="23%">用户名</td>
<td width="77%"><input name="userName" type="text" id="userName">
<a href="register.jsp">注册</a> </td>
</tr>
<tr>
<td>密码</td>
<td><input name="pwd" type="text" id="pwd"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="提交"></td>
</tr>
</table>
</form>
<p> </p>
</body>
</html>
register.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<form name="form1" method="post" action="insertUser">
<table width="80%" border="0" align="center">
<tr>
<td width="22%">姓名</td>
<td width="34%"><input name="userName" type="text" id="userName"></td>
<td width="19%">性别</td>
<td width="25%">
<select name="sex">
<option value="01">男</option>
<option value="02">女</option>
</select>
</td>
</tr>
<tr>
<td>生日</td>
<td><input name="birthday" type="text" id="birthday"></td>
<td>密码</td>
<td><input name="pwd" type="text" id="pwd"></td>
</tr>
<tr>
<td>确认密码</td>
<td colspan="3"><input name="pwd1" type="text" id="pwd1"></td>
</tr>
<tr>
<td>行业</td>
<td colspan="3"><textarea name="trade" id="trade"></textarea></td>
</tr>
<tr>
<td colspan="4"><div align="center">
<input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重置">
</div></td>
</tr>
</table>
</form>
</body>
</html>
regsucc.jsp
<%@page contentType="text/html;charset=utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
注册成功 <a href="login.jsp">登陆</a></body>
</html>
update.jsp
<%@page contentType="text/html;charset=utf-8"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<form name="form1" method="post" action="updateUser">
<table width="80%" border="0" align="center">
<tr>
<td width="22%">姓名</td>
<td width="34%"><input name="userName" type="text" id="userName" value="${sessionScope.user.userName}"></td>
<td width="19%">性别</td>
<td width="25%"><input name="sex" type="text" id="sex" value="${sessionScope.user.sex}"></td>
</tr>
<tr>
<td>生日</td>
<td><input name="birthday" type="text" id="birthday" value="${sessionScope.user.birthday}"></td>
<td>密码</td>
<td><input name="pwd" type="text" id="pwd" value="${sessionScope.user.pwd}"></td>
</tr>
<tr>
<td>确认密码</td>
<td colspan="3"><input name="pwd1" type="text" id="pwd1" value="${sessionScope.user.pwd}"></td>
</tr>
<tr>
<td>行业</td>
<td colspan="3"><textarea name="trade" id="trade">${sessionScope.user.trade}</textarea></td>
</tr>
<tr>
<td colspan="4"><div align="center">
<input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重置">
</div></td>
</tr>
</table>
</form>
</body>
</html>
userList.jsp
<%@page contentType="text/html;charset=utf-8"%><html>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<table width="100%" border="0">
<tr>
<td width="31%">客户姓名</td>
<td width="18%">性别</td>
<td width="17%">生日</td>
<td width="17%">行业</td>
<td width="17%">密码</td>
</tr>
<c:forEach items="${requestScope.pageRows}" var="user1">
<tr>
<td>${user1.userName}</td>
<td>${user1.sex}</td>
<td>${user1.birthday}</td>
<td>${user1.trade}</td>
<td>${user1.pwd}</td>
</tr>
</c:forEach>
<tr>
<td colspan="5">
${pageHtml}
</td>
</tr>
</table>
</body>
</html>
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>BaseServlet</servlet-name>
<servlet-class>servlet.BaseServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>insertUser</servlet-name>
<servlet-class>servlet.InsertUser</servlet-class>
</servlet>
<servlet>
<servlet-name>UpdateUser</servlet-name>
<servlet-class>servlet.UpdateUser</servlet-class>
</servlet>
<servlet>
<servlet-name>deleteUser</servlet-name>
<servlet-class>servlet.DeleteUser</servlet-class>
</servlet>
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>servlet.Login</servlet-class>
</servlet>
<servlet>
<servlet-name>GetAll</servlet-name>
<servlet-class>servlet.GetAll</servlet-class>
</servlet>
<servlet>
<servlet-name>GetPage</servlet-name>
<servlet-class>servlet.GetPage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BaseServlet</servlet-name>
<url-pattern>/BaseServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>insertUser</servlet-name>
<url-pattern>/insertUser</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UpdateUser</servlet-name>
<url-pattern>/updateUser</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>deleteUser</servlet-name>
<url-pattern>/deleteUser</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GetAll</servlet-name>
<url-pattern>/getAll</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GetPage</servlet-name>
<url-pattern>/getPage</url-pattern>
</servlet-mapping>
</web-app>
需要的jar包
jstl.jar
standard.jar
sqlserver 2000的jar包
msbase.jar
mssqlserver.jar
msutil.jar
以下源代码没有经过美化,还相应的验证
相关文章推荐
- Java web分页技术(jsp+servlet+Dao+javabean)
- 很好的jsp+servlet+javaBean实现数据分页代码例子
- java旅行--第五站--servlet与JSP--java过滤器与session的小例子
- 使用jsp-javabean-servlet实现分页功能
- 介绍一篇关于session的好文章,写的很详细(jsp-servlet 技术)
- jsp+servlet的简单例子
- JSP&Servlet --- JSP DAO模式
- jsp servlet Action获取request,respone,session等
- Servlet/JSP之“Cookie和Session原理”
- servlet中session简介和使用例子
- JSP 开发之servlet中调用注入spring管理的dao
- jsp+servlet+javabean实现数据分页
- Servlet+JavaBean+JSP真假分页技术详解
- 如何使 FlashGet "正常合法" 下载 Session 中的自定义文件链接呢? JSP/Servlet 实现!
- jsp/servlet/jsf:session在何时被创建
- jsp servlet mysql(limit)分页查询
- 深入理解Servlet/JSP之“Cookie和Session原理”
- jsp+servlet+javaBean实现分页
- jsp分页技术的例子实现和总结
- javabean servlet jsp实现分页功能代码解析