项目结构:
先是web.xml :
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<!-- 这是一个前端控制器 -->
<display-name>s3h3</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
<!-- hibernate 的配置文件 -->
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param> <!-- 使用自己的上下文 -->
<param-name>contextConfigLocation</param-name> <!-- 这个必须这样写 -->
<param-value>classpath:spring*.xml</param-value>
<!-- 我吧这个配置文件放在了src/config 中,工具在编辑的时候会把源码及配置文件一起放到WEB-INF/classes下面。 -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index</welcome-file>
</welcome-file-list>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<context:annotation-config />
<!-- 自动扫描所有注解该路径 -->
<context:component-scan base-package="com.action" />
<!-- 引入上下文-->
<context:property-placeholder location="classpath:/hibernate.properties" />
<!--创建sessionFactory-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${dataSource.dialect}</prop>
<prop key="hibernate.hbm2ddl.auto">${dataSource.hbm2ddl.auto}</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="packagesToScan">
<list>
<value>com.model</value><!-- 扫描实体类,也就是平时所说的model -->
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${dataSource.driverClassName}" />
<property name="url" value="${dataSource.url}" />
<property name="username" value="${dataSource.username}" />
<property name="password" value="${dataSource.password}" />
</bean>
<!-- Dao的实现 -->
<bean id="userDao" class="com.daoImp.UserImp">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- servlet的实现 -->
<bean id="userServlet" class="com.servletImp.UserServletImp"></bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<tx:annotation-driven mode="aspectj"/>
<aop:aspectj-autoproxy/>
</beans>
hibernate.properties :
dataSource.password=xiaozhu
dataSource.username=root
dataSource.databaseName=test
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.dialect=org.hibernate.dialect.MySQLDialect
#dataSource.serverName=localhost\:3306
dataSource.url=jdbc\:mysql\://localhost\:3306/test
dataSource.properties=user\=${dataSource.username};databaseName\=${dataSource.databaseName};serverName\=${dataSource.serverName};password\=${dataSource.password}
dataSource.hbm2ddl.auto=update
spring-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<!-- 把标记了@Controller注解的类转换为bean -->
<context:component-scan base-package="com" />
<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
-->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <!-- 必须的 返回的试图类型 -->
<property name="prefix" value="/jsp/" /> <!-- 返回值的前缀 -->
<property name="suffix" value=".jsp" /> <!-- 返回值得后缀 -->
<!-- 这个例子返回的是 test , 他会对其返回值进行字符串拼接成 : WEB-INF/jsp/test.jsp 也就是说要跳到这个页面去 -->
</bean>
</beans>
log4j.properties:
# This is the configuring for logging displayed in the Application Server
#log4j.rootCategory=ERROR,stdout
#stdout configure
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d %p [%c] - <%m>%n
log4j.logger.com.xy.service.BaseServiceForHibernate=DEBUG
##########################
# Log configuration file #
##########################
# $Id: log4j.properties,v 1.2 2003/05/14 14:19:07 jmesnil Exp $
# Set the options for the Console appender.
# Console's layout is a PatternLayout, using the conversion pattern
# %d: current date in ISO8601 format
# %c: category name
# %p: priority of the logging event
# %m: the message
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d %c{1} %p - %m\n
log4j.appender.FileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.FileAppender.File=e:/tmp.log
log4j.appender.FileAppender.MaxFileSize=2MB
log4j.appender.FileAppender.MaxBackupIndex=99
log4j.appender.FileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.FileAppender.layout.ConversionPattern=%d %c{1} %p - %m\n
# Root logger set to ERROR using the Console appender defined above.
log4j.rootLogger=INFO, FileAppender, Console
数据库创建一个test下面在创建一个user 表 。
表字段如model 层中的字段。
UserModel:
package com.model;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "user")
public class User implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id")
private int id;
@Column(name = "userName")
private String userName;
@Column(name = "password")
private String password;
@Column(name = "age")
private int age;
@Column(name = "date")
private Date date;
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 int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "userName:"+this.userName +",password:"+ this.password +",age:"+this.age+",date;"+ new SimpleDateFormat("yyyy-MM-dd").format(this.date);
}
}
UserDao:
package com.dao;
import java.util.ArrayList;
import com.model.User;
public interface UserDao {
public void saveUser(User user);
public void deleteUser(User user);
public ArrayList<User> finedUser();
public User getUserName(String userName);
}
UserDaoImp:
package com.daoImp;
import java.util.ArrayList;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.dao.UserDao;
import com.model.User;
public class UserImp extends HibernateDaoSupport implements UserDao{
public void saveUser(User user) {
this.getHibernateTemplate().saveOrUpdate(user);
}
public void deleteUser(User user) {
this.deleteUser(user);
}
public ArrayList<User> finedUser() {
return null;
}
public User getUserName(String userName){
String sql = "from User as user where user.userName='"+userName+"'";
ArrayList<User> list = (ArrayList<User>)this.getHibernateTemplate().find(sql);
if(list.size() == 1){
return (User)list.get(0);
}else{
return null;
}
}
}
UserServlet:
package com.servlet;
import java.util.ArrayList;
import com.model.User;
public interface UserServlet {
public void saveUser(User user);
public void deleteUser(User user);
public ArrayList<User> finedUser();
public User getUserName(String userName);
}
UserServletImp:
package com.servletImp;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dao.UserDao;
import com.model.User;
import com.servlet.UserServlet;
@Service
public class UserServletImp implements UserServlet{
@Autowired
//用@Autowired 就无需手动生成 get(), set() 方法,他会自动生成并且注入
//userDao 与配置文件中的 userDao 相同。
private UserDao userDao;
public void saveUser(User user) {
this.userDao.saveUser(user);
}
public void deleteUser(User user) {
this.userDao.deleteUser(user);
}
public ArrayList<User> finedUser() {
return this.userDao.finedUser();
}
public User getUserName(String userName) {
return this.userDao.getUserName(userName);
}
}
UserContro:
package com.action;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.model.User;
import com.servlet.UserServlet;
@Controller
@RequestMapping("/userController")
public class UserController {
protected final transient Log log = LogFactory
.getLog(UserController.class);
@Autowired
private UserServlet userServlet;
public UserController(){
}
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String loginGet(){
System.out.println("get");
return "login";
}
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String loginPost(User user ,BindingResult result){
//提交form 时 自动注入 User 对象 但只能接收 String , int 类型的数据。
//如果要接收 Date 类型的数据就得用下面的 数据绑定 。
//System.out.println(user);
//userServlet.saveUser(user);
boolean b = false;
User loginUser = this.userServlet.getUserName(user.getUserName());
if(loginUser != null){
if(loginUser.getPassword().equals(user.getPassword())){
b = true;
}else{
b = false;
}
}else{
b = false;
}
if(b){
return "redirect:/userController/succer.do";
}else{
return "redirect:/userController/fail.do";
}
}
@RequestMapping(value = "/succer")
public String succer(){
System.out.println("重定向了");
return "login_succer";
}
@RequestMapping(value = "/fail")
public String fail(){
System.out.println("重定向了");
return "login_fail";
}
//数据绑定
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
//注册一个Date 类型的绑定器 。
}
}
login.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>登陆</h1>
<form action="" method="post">
LongName:<input type="text" id="userName" name='userName'></br>
Password:<input type="password" id="password" name='password'></br>
<input type="submit" value="Login">
</form>
</body>
</html>
所需jar 自行下载 。