代码:
一、引架包 这里只提供架包名
ant-1.6.5.jar
ant-antlr-1.6.5.jar
ant-junit-1.6.5.jar
ant-launcher-1.6.5.jar
ant-swing-1.6.5.jar
antlr-2.7.6.jar
asm-3.3.jar
asm-attrs.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
aspectjrt.jar
aspectjweaver.jar
c3p0-0.9.0.jar
cglib-nodep-2.2.jar
checkstyle-all.jar
classes12.jar
cleanimports.jar
commons-collections-2.1.1.jar
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
commons-lang3-3.1.jar
commons-logging.jar
concurrent-1.3.2.jar
connector.jar
dom4j-1.6.1.jar
ehcache-1.2.jar
freemarker-2.3.19.jar
hibernate3.jar
jaas.jar
jacc-1_0-fr.jar
javassist-3.11.0.GA.jar
jaxen-1.1-beta-7.jar
jboss-cache.jar
jboss-common.jar
jboss-jmx.jar
jboss-system.jar
jdbc2_0-stdext.jar
jgroups-2.2.8.jar
jta.jar
junit-3.8.1.jar
log4j-1.2.14.jar
ognl-3.0.5.jar
oscache-2.1.jar
proxool-0.8.3.jar
spring.jar
struts2-core-2.3.4.jar
struts2-spring-plugin-2.3.4.jar
swarmcache-1.0rc2.jar
syndiag2.jar
versioncheck.jar
xerces-2.6.2.jar
xml-apis.jar
xwork-core-2.3.4.jar
二、后台entity及映射文件、dao、daoimpl、service、serviceimpl、LoginAction
entity:Student
package li.entity;
import java.io.Serializable;
import java.util.Set;
public class Student implements Serializable{
private String sid;
private String name;
private String pass;
private String age;
private Department department;
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
映射文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="li.entity.Student" table="t_ssh_student">
<id name="sid"><!-- 表示定义主键 -->
<generator class="uuid"/><!-- UUID生成策略是hibernate自带一个主键生成策略32,64,128位唯一字符序列 -->
</id>
<property name="name"/><!-- 普通属性 -->
<property name="pass"/>
<property name="age"/>
<many-to-one name="department" column="did" cascade="save-update"></many-to-one>
</class>
</hibernate-mapping>
dao
package li.dao;
import java.util.List;
import li.entity.Student;
public interface IStudentDao {
public void addstudent(Student student);
public List<Student> findallstudent();
public void deletestudent(Student student);
public void updatestudent(Student student);
}
daoimpl
package li.dao.impl;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import li.dao.IStudentDao;
import li.entity.Student;
public class StudentDaoImpl extends HibernateDaoSupport implements IStudentDao {
@Override
public void addstudent(Student student) {
Session session = this.getSession();
session.save(student);//添加
}
@Override
public List<Student> findallstudent() {
Session session = this.getSession();
Query query = session.createQuery("from Student");
List<Student> students = query.list();
return students;//查询所有
}
@Override
public void updatestudent(Student student) {
Session session = this.getSession();
Student stu = (Student)session.load(Student.class, "2c928273425496a0014254991f540001");
stu.setName(student.getName());
stu.setPass(student.getPass());
stu.setAge(student.getAge());
session.update(stu);//修改
}
@Override
public void deletestudent(Student student) {
Session session = this.getSession();
Student stu = (Student)session.load(Student.class, "2c928273425568e90142556b9aff0001");
session.delete(stu);//删除
}
}
service
package li.service;
import java.util.List;
import li.entity.Student;
public interface IStudentService {
public void addstudent(Student student);
public List<Student> findallstudent();
public void updatestudent(Student student);
public void deletestudent(Student student);
}
serviceimpl
package li.service.impl;
import java.util.List;
import li.dao.IStudentDao;
import li.entity.Student;
import li.service.IStudentService;
public class StudentServiceImpl implements IStudentService {
private IStudentDao studentdao;
//****************************************************
//get and set
public IStudentDao getStudentdao() {
return studentdao;
}
public void setStudentdao(IStudentDao studentdao) {
this.studentdao = studentdao;
}
//****************************************************
//方法
//添加
@Override
public void addstudent(Student student) {
studentdao.addstudent(student);
}
//查询所有学生
@Override
public List<Student> findallstudent() {
return studentdao.findallstudent();
}
//修改
@Override
public void updatestudent(Student student) {
studentdao.updatestudent(student);
}
//删除
@Override
public void deletestudent(Student student) {
studentdao.deletestudent(student);
}
}
LoginAction
package li.web;
import java.util.List;
import li.entity.Student;
import li.service.IStudentService;
public class LoginAction {
List<Student> students = null;
private Student stu;
private IStudentService studentservice;
//*********************************************************
//构造方法
public LoginAction() {
super();
}
//*********************************************************
//get and set
public IStudentService getStudentservice() {
return studentservice;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
public Student getStu() {
return stu;
}
public void setStu(Student stu) {
this.stu = stu;
}
public void setStudentservice(IStudentService studentservice) {
this.studentservice = studentservice;
}
//*********************************************************
//action method
//增加
public String addstudent(){
System.out.println("add:"+stu.getName()+":"+stu.getPass());
studentservice.addstudent(stu);
return "success";
}
//查询所有学生
public String findallstudent(){
System.out.println("findallstudent");
students = studentservice.findallstudent();
return "success";
}
//修改
public String updatestudent(){
System.out.println("updatestudent");
studentservice.updatestudent(stu);
return "success";
}
//删除
public String deletestudent(){
System.out.println("deletestudent");
studentservice.deletestudent(stu);
return "success";
}
}
三、jsp页面
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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>My JSP 'index.jsp' starting page</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>
<h3>添加</h3>
<form action="loginadd" method="post" >
姓名:<input type="text" name="stu.name" value=""/><br>
密码:<input type="password" name="stu.pass" value=""/><br>
<input type="submit" value="添加"/><br>
</form>
<h3>查询所有</h3>
<form action="findall" method="post" >
<input type="submit" value="查询所有"/><br>
</form>
<h3>修改</h3>
<form action="update" method="post" >
姓名:<input type="text" name="stu.name" value=""/><br>
密码:<input type="password" name="stu.pass" value=""/><br>
年龄:<input type="text" name="stu.age" value=""/><br>
<input type="submit" value="修改"/><br>
</form>
<h3>删除</h3>
<form action="delete" method="post" >
<input type="submit" value="删除"/><br>
</form>
</body>
</html>
findallstudent.jsp //路径:WebRoot/pages/findallstudent.jsp
<%@ page language="java" import="java.util.*,li.entity.Student.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
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>My JSP 'index.jsp' starting page</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>
成功页面<br>
<s:iterator value="students" var="st" >
id:<s:property value="#st.sid"/> 
姓名:<s:property value="#st.name"/> 
密码:<s:property value="#st.pass"/><br>
</s:iterator><br>
</body>
</html>
/pages/findallstudent.jsp
/pages/login_error.jsp 这两个jsp页面只是跳转页面,验证form表单是否提交成功的,具体略
四、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_3_0.xsd" version="3.0">
<display-name></display-name>
<welcome-file-list><!-- 首页 -->
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter><!-- 过滤器,引到struts.xml中 -->
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param><!-- 引到applicationContext.xml中 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener><!-- 监听 -->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
五、struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant><!-- 动态方法调用 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant><!-- 转码 -->
<constant name="struts.devMode" value="true"></constant><!-- 开发模式:修改struts.xml不用重启服务器 -->
<constant name="struts.objectFactory" value="spring"></constant><!-- 加入常量配置 struts action类实例由spring创建 -->
<package name="default" namespace="/" extends="struts-default">
<action name="loginadd" class="loginaction" method="addstudent"><!-- class属性必须指定到applicationContext.xml注册action类的id属性 -->
<result name="success">/pages/login_success.jsp</result>
<result name="error">/pages/login_error.jsp</result>
</action>
<action name="findall" class="loginaction" method="findallstudent">
<result name="success">/pages/findallstudent.jsp</result>
<result name="error">/pages/login_error.jsp</result>
</action>
<action name="update" class="loginaction" method="updatestudent">
<result name="success">/pages/login_success.jsp</result>
<result name="error">/pages/login_error.jsp</result>
</action>
<action name="delete" class="loginaction" method="deletestudent">
<result name="success">/pages/login_success.jsp</result>
<result name="error">/pages/login_error.jsp</result>
</action>
</package>
</struts>
六、applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
>
<!-- 配置session工厂 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value><!-- 有疑问 -->
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transcationmanager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 配置事务传播特征 -->
<tx:advice id="txadvice" transaction-manager="transcationmanager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="dele*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 配置那些方法会参与事务 -->
<aop:config>
<!-- <aop:pointcut id="myaop" expression="execution(* li.service.impl.*.add*(..))"/> 以add开头的方法参与事物 -->
<aop:pointcut id="myaop" expression="execution(* li.service.impl.*.*(..))"/><!-- 所有方法参与事物 -->
<aop:advisor pointcut-ref="myaop" advice-ref="txadvice" />
</aop:config>
<!-- 注册dao层实现类 叫myuserdao-->
<bean id="mystudentdao" class="li.dao.impl.StudentDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 注册service层实现类 叫myservice 需要IUserDao类型的属性 -->
<bean id="myservice" class="li.service.impl.StudentServiceImpl">
<property name="studentdao" ref="mystudentdao"></property><!-- 将mystudentdao注入 StudentServiceImpl类中的studentdao变量中-->
</bean>
<!-- 注册action类 叫loginaction, 需要IUserService类型的属性-->
<bean id ="loginaction" class="li.web.LoginAction">
<property name="studentservice" ref="myservice"></property><!-- 将myservice注入LoginAction类中的userservice变量中-->
</bean>
</beans>
七、hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.username">li</property>
<property name="hibernate.connection.password">p123</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@172.18.2.243:1521:liorclli</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="li/entity/Student.hbm.xml"/>
<mapping resource="li/entity/Department.hbm.xml"/>
</session-factory>
</hibernate-configuration>
八、log4j.properties
# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
# For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
log4j.rootLogger=INFO, stdout, logfile
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.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${petstore.root}/WEB-INF/petstore.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n