架构的演变
一、两层架构(jsp+DB)
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>用户注册</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form method="post" action="registerDeal.jsp"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 确认密码:<input type="password" name="password2"><br> <input type="submit" value="提交"/> </form><br> </body> </html>
registerDeal.jsp
<%@ page language="java" import="java.util.*, java.sql.*" pageEncoding="GB18030"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; String username = request.getParameter("username"); String password = request.getParameter("password"); String password2 = request.getParameter("password2"); Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/spring", "root", "bjsxt"); String sqlQuery = "select count(*) from user where username = ?"; PreparedStatement psQuery = conn.prepareStatement(sqlQuery); psQuery.setString(1, username); ResultSet rs = psQuery.executeQuery(); rs.next(); int count = rs.getInt(1); if(count > 0) { response.sendRedirect("registerFail.jsp"); psQuery.close(); conn.close(); return; } String sql = "insert into user values (null, ?, ?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, username); ps.setString(2, password); ps.executeUpdate(); ps.close(); conn.close(); response.sendRedirect("registerSuccess.jsp"); %>
二、三层架构(jsp+Entity/service+DB)
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>用户注册</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form method="post" action="registerDeal.jsp"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 确认密码:<input type="password" name="password2"><br> <input type="submit" value="提交"/> </form><br> </body> </html>
registerDeal.jsp
<%@ page language="java" import="java.util.*, java.sql.*" pageEncoding="GB18030"%> <%@ page import="com.bjsxt.registration.service.*" %> <%@ page import="com.bjsxt.registration.model.*" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; String username = request.getParameter("username"); String password = request.getParameter("password"); String password2 = request.getParameter("password2"); User u = new User(); u.setUsername(username); u.setPassword(password); Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/spring", "root", "bjsxt"); UserManager um = new UserManager(); boolean exist = um.exists(u); if(exist) { response.sendRedirect("registerFail.jsp"); return; } um.add(u); response.sendRedirect("registerSuccess.jsp"); %>
user.java
package com.bjsxt.registration.model; import com.bjsxt.registration.service.UserManager; //贫血模型 充血模型 public class User { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
userManager.java
package com.bjsxt.registration.service; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import com.bjsxt.registration.model.User; public class UserManager { public boolean exists(User u) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/spring", "root", "bjsxt"); String sqlQuery = "select count(*) from user where username = ?"; PreparedStatement psQuery = conn.prepareStatement(sqlQuery); psQuery.setString(1, u.getUsername()); ResultSet rs = psQuery.executeQuery(); rs.next(); int count = rs.getInt(1); psQuery.close(); conn.close(); if(count > 0) { return true; } return false; } public void add(User u) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/spring", "root", "bjsxt"); String sql = "insert into user values (null, ?, ?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, u.getUsername()); ps.setString(2, u.getPassword()); ps.executeUpdate(); ps.close(); conn.close(); } }
三、三层架构(jsp+service+Hibernate)
registerDeal.jsp
<%@ page language="java" import="java.util.*, java.sql.*" pageEncoding="GB18030"%> <%@ page import="com.bjsxt.registration.service.*" %> <%@ page import="com.bjsxt.registration.model.*" %> <%@ page import="com.bjsxt.registration.service.impl.*" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; String username = request.getParameter("username"); String password = request.getParameter("password"); String password2 = request.getParameter("password2"); UserManager um = new UserManagerImpl(); boolean exist = um.exists(u); if(exist) { response.sendRedirect("registerFail.jsp"); return; } um.add(u); response.sendRedirect("registerSuccess.jsp"); %>
Service层:UserManager.java
package com.bjsxt.registration.service; import com.bjsxt.registration.model.User; public interface UserManager { public abstract boolean exists(User u) throws Exception; public abstract void add(User u) throws Exception; }
UserManagerImpl.java
package com.bjsxt.registration.service.impl; import com.bjsxt.registration.dao.UserDao; import com.bjsxt.registration.dao.impl.UserDaoImpl; import com.bjsxt.registration.model.User; import com.bjsxt.registration.service.UserManager; public class UserManagerImpl implements UserManager { private UserDao userDao = new UserDaoImpl(); public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } /* (non-Javadoc) * @see com.bjsxt.registration.service.impl.UserManager#exists(com.bjsxt.registration.model.User) */ public boolean exists(User u) throws Exception { return userDao.checkUserExistsWithName(u.getUsername()); } /* (non-Javadoc) * @see com.bjsxt.registration.service.impl.UserManager#add(com.bjsxt.registration.model.User) */ public void add(User u) throws Exception { userDao.save(u); } }
Dao层(Hibernate):UserDao.java
package com.bjsxt.registration.dao; import com.bjsxt.registration.model.User; public interface UserDao { public void save(User u); public boolean checkUserExistsWithName(String username); }
UserDaoImpl.java
package com.bjsxt.registration.dao.impl; import org.hibernate.SessionFactory; import org.hibernate.classic.Session; import com.bjsxt.registration.dao.UserDao; import com.bjsxt.registration.model.User; import com.bjsxt.registration.util.HibernateUtil; public class UserDaoImpl implements UserDao { public void save(User u) { SessionFactory sf = HibernateUtil.getSessionFactory(); Session s = sf.getCurrentSession(); s.beginTransaction(); s.save(u); s.getTransaction().commit(); } public boolean checkUserExistsWithName(String username) { SessionFactory sf = HibernateUtil.getSessionFactory(); Session s = sf.getCurrentSession(); s.beginTransaction(); long count = (Long)s.createQuery("select count(*) from User u where u.username = :username") .setString("username", username) .uniqueResult(); s.getTransaction().commit(); if(count > 0) return true; return false; } }
user.java(@Entity Hibernate注解)
package com.bjsxt.registration.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import com.bjsxt.registration.service.impl.UserManagerImpl; //贫血模型 充血模型 @Entity public class User { private int id; private String username; private String password; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
四、jsp+struts+Service+Hibernate
UserManager um = new UserManagerImpl(); boolean exist = um.exists(u); if(exist) { response.sendRedirect("registerFail.jsp"); return; } 上面的代码被struts2给取代了 在struts2处理类Action里面: 1.spring通过 @Resource private UserManager userManager ; 注入封装了UserDao的service处理类,在action里面直接调用处理类操作 2.struts.xml配置文件中的Result取代了上面的跳转
register.jap
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>用户注册</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form method="post" action="user.action"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 确认密码:<input type="password" name="password2"><br> <input type="submit" value="提交"/> </form><br> </body> </html>
UserAction.java
package com.bjsxt.registration.action; import javax.annotation.Resource; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Scope; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Component; import com.bjsxt.registration.model.User; import com.bjsxt.registration.service.UserManager; import com.opensymphony.xwork2.ActionSupport; @Component("user") @Scope("prototype") public class UserAction extends ActionSupport { private String username; private String password; private String password2; private UserManager um; public UserManager getUm() { return um; } @Resource(name="userManager") public void setUm(UserManager um) { this.um = um; } @Override public String execute() throws Exception { User u = new User(); u.setUsername(username); u.setPassword(password); if(um.exists(u)) { return "fail"; } um.add(u); return "success"; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPassword2() { return password2; } public void setPassword2(String password2) { this.password2 = password2; } }
五、jsp+struts+Hibernate+spring
spring把Dao注入到Daoimpl
Service注入到Serviceimpl
Dao注入到Service
Service注入到Action处理类
jsp页面*。action可以直接在action里面操作,跳转!