SSH框架设计

来源:互联网 发布:微小秘微信营销软件 编辑:程序博客网 时间:2024/06/04 19:25
SSH简化框架开发设计:

    1.使用全注解

    2.Dao层采用Hibernate通用的增删改查

    3.用Controller层中方法上的@Action标识取代Struts.xml中配置

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>TestSSH</display-name><!-- log4j Listener --><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener><context-param><param-name>log4jConfigLocation</param-name><param-value>/WEB-INF/classes/resources/log4j/log4j.properties</param-value></context-param><!-- Spring Listener --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:resources/spring/applicationContext.xml</param-value></context-param><!-- Open Session In View Filter --><filter><filter-name>OpenSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class><init-param><param-name>singleSession</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>OpenSessionInViewFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- Character Encoding Filter --><filter>        <filter-name>Set Character Encoding</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>UTF-8</param-value>        </init-param>        <init-param>            <param-name>forceEncoding</param-name>            <!-- 强制进行转码 -->            <param-value>true</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>Set Character Encoding</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <!-- 延长action中属性的生命周期, --><filter><filter-name>struts-cleanup</filter-name><filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class></filter><filter-mapping><filter-name>struts-cleanup</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- Struts2 Filter --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><init-param><param-name>config</param-name><param-value>struts-default.xml,struts-plugin.xml,resources/struts/struts.xml</param-value></init-param>        <init-param>        <param-name>actionPackages</param-name>        <param-value>org.chinasb.framework.modules</param-value>        </init-param></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- Welcome List --><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

applicationContent.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:context="http://www.springframework.org/schema/context"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.5.xsd           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">    <!-- 用注解进行依赖注入 --><context:annotation-config></context:annotation-config><!-- 用注解让spring管理bean --><context:component-scan base-package="com.fejd.companyrm" /><!-- C3P0 数据源 -->    <bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/test"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean>        <!-- SessionFactory --><bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource" ref="dataSource" ></property><property name="configLocation" value="classpath:resources/hibernate/hibernate.cfg.xml"></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>    <prop key="hibernate.show_sql">true</prop>         <prop key="hibernate.format_sql">false</prop>    <prop key="hibernate.cache.use_second_level_cache">true</prop>     <prop key="hibernate.cache.use_query_cache">true</prop>    <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>    <prop key="hibernate.cache.provider_configuration_file_resource_path">/resources/datasource/ehcache.xml</prop>    <!-- ehcache 是否命中 -->    <prop key="hibernate.generate_statistics">true</prop></props></property><property name="packagesToScan" value="com.fejd.companyrm.model" /></bean><!-- 用于在Dao中使用 --><bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory"/><!--<constructor-arg index="0"><ref bean="sessionFactory" /></constructor-arg>--></bean><!--Spring注入Dao实现--><bean id="dao" class="com.fejd.companyrm.dao.CoreDao"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 配置注解实现管理事务(cglib:proxy-target-class="true") --><tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /><!-- 配置事务管理 --><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean></beans>

struts.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>    <!-- 开启使用开发模式,详细错误提示 -->    <constant name="struts.devMode" value="false" />    <!-- 将对象交给spring管理 -->    <constant name="struts.objectFactory" value="spring" />    <!-- 指定资源编码类型 -->    <constant name="struts.i18n.encoding" value="UTF-8" /> <!-- 指定每次请求到达,重新加载资源文件 -->    <constant name="struts.i18n.reload" value="false" />    <!-- 指定每次配置文件更改后,自动重新加载 -->    <constant name="struts.configuration.xml.reload" value="false" />    <!-- 国际化资源文件 -->    <constant name="struts.custom.i18n.resources" value="resources/content/Language" />    <!-- 默认后缀名 -->    <constant name="struts.action.extension" value="do,action,jhtml,," /><!-- Struts Annotation -->    <constant name="actionPackages" value="com.fejd.companyrm"/></struts>

log4j.properties### set log levels ###log4j.rootLogger = debug, stdout, D, E### \u8f93\u51fa\u5230\u63a7\u5236\u53f0 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n### \u8f93\u51fa\u5230\u65e5\u5fd7\u6587\u4ef6 ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = ${webapp.root}/logs/log.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUGlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n### \u4fdd\u5b58\u5f02\u5e38\u4fe1\u606f\u5230\u5355\u72ec\u6587\u4ef6 ###log4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File = ${webapp.root}/logs/error.loglog4j.appender.E.Append = truelog4j.appender.E.Threshold = ERRORlog4j.appender.E.layout = org.apache.log4j.PatternLayout
Employee.javapackage com.fejd.companyrm.model;import javax.persistence.*;import org.hibernate.annotations.GenericGenerator;@Entity@Table(name="Employee")public class Employee implements java.io.Serializable {private Long id;private String name;private String address;private String phone;public Employee() {}public Employee(String name, String address, String phone) {this.name = name;this.address = address;this.phone = phone;}@Id@GeneratedValue(generator="group")  @GenericGenerator(name="group",strategy="native")public Long getId() {return this.id;}public void setId(Long id) {this.id = id;}@Column(name="name")public String getName() {return this.name;}public void setName(String name) {this.name = name;}@Column(name="address")public String getAddress() {return this.address;}public void setAddress(String address) {this.address = address;}@Column(name="phone")public String getPhone() {return this.phone;}public void setPhone(String phone) {this.phone = phone;}}
<pre code_snippet_id="319030" snippet_file_name="blog_20140429_6_8363346" name="code" class="java">IDao.javapackage com.fejd.companyrm.dao;import java.util.List;public interface IDao {public Object getObject(Class entityClass,Long id);    public boolean saveObject(Object entity);           public List getAllByHql(String hql);          public List getAllByHql(String hql, Object[] params);        public boolean removeByHql(String hql);        public void updateByHql(String hql);}

<pre name="code" class="java">CoreDao,java 
package com.fejd.companyrm.dao;import java.sql.SQLException;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import org.springframework.orm.hibernate3.HibernateCallback;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import org.springframework.transaction.annotation.Transactional;@Transactionalpublic class CoreDao extends HibernateDaoSupport implements IDao {public Object getObject(Class entityClass, Long id) {return getHibernateTemplate().get(entityClass, id);}public boolean saveObject(Object entity) { getHibernateTemplate().saveOrUpdate(entity); return false; } public List getAllByHql(String hql) {getHibernateTemplate().setCacheQueries(true);return getHibernateTemplate().find(hql);}public List getAllByHql(String hql, Object[] params) {return getHibernateTemplate().find(hql, params);}public boolean removeByHql(String hql) {getHibernateTemplate().bulkUpdate(hql);return false;}public void updateByHql(String hql) {getHibernateTemplate().bulkUpdate(hql);}}
EmployeeManager.javapackage com.fejd.companyrm.service;import java.util.List;import com.fejd.companyrm.model.Employee;public interface EmployeeManager {public boolean save(Object entity);//增加雇员public List<Employee> findAll();//获得雇员的集合public boolean remove(Long id);//删除雇员public void savaOrUpdate(Object entity);//修改雇员public Object getObject(String name,String phone);//根据雇员的某个记录查询雇员信息public Object getObject(Long id);//根据ID查询雇员,实现修改操作}
EmployeeManagerImpl.javapackage com.fejd.companyrm.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;import com.fejd.companyrm.dao.IDao;import com.fejd.companyrm.model.Employee;import com.fejd.companyrm.service.EmployeeManager;@Service@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)public class EmployeeManagerImpl implements EmployeeManager {@Resourceprivate IDao dao;@Transactional(readOnly = false, propagation = Propagation.REQUIRED)public boolean save(Object entity){return this.dao.saveObject(entity);}@Transactional(readOnly = false, propagation = Propagation.REQUIRED)public boolean remove(Long id){     String hql="delete from Employee e where 1=1 and e.id='"+id+"'";return this.dao.removeByHql(hql);}@Transactional(readOnly = false, propagation = Propagation.REQUIRED)public List<Employee> findAll(){String hql="from Employee e";return this.dao.getAllByHql(hql);}@Transactional(readOnly =false, propagation = Propagation.REQUIRED)public Object getObject(String name,String phone) {String[] params={name,phone};String hql="select * from Employee as employee where employee.name='"+name+"' and employee.phone='"+phone+"'";List list= dao.getAllByHql(hql);if(list!=null&&list.size()==1){return (Employee)list.get(0);}elsereturn null;}@Transactional(readOnly = false, propagation = Propagation.REQUIRED)public void savaOrUpdate(Object entity){ this.dao.saveObject(entity);}@Transactional(readOnly = false, propagation = Propagation.REQUIRED)public Object getObject(Long id) {return this.dao.getObject(Employee.class,id);} }

BaseAction.javapackage com.fejd.companyrm.action; import java.util.Map;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.apache.struts2.interceptor.SessionAware;import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;public class BaseAction extends ActionSupport implements ServletContextAware,ServletResponseAware, ServletRequestAware, SessionAware {    private static final long serialVersionUID = 1L;    protected ServletContext servletContext;    protected HttpServletRequest httpServletRequest;    protected HttpServletResponse httpServletResponse;        protected HttpSession httpSession;        protected Map<String, Object> session;    public void setServletContext(ServletContext context) {this.servletContext = context;    }          public void setServletResponse(HttpServletResponse response) {this.httpServletResponse = response;    }    public void setServletRequest(HttpServletRequest request) {this.httpServletRequest = request;this.httpSession = request.getSession();    }    public void setSession(Map<String, Object> session) {this.session = session;    }}

<pre name="code" class="java">EmployeeAction .java
package com.fejd.companyrm.action;import java.util.List;import javax.annotation.Resource;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.ParentPackage;import org.apache.struts2.convention.annotation.Result;import org.springframework.stereotype.Controller;import com.fejd.companyrm.model.Employee;import com.fejd.companyrm.service.EmployeeManager;@SuppressWarnings("serial")@Controllerpublic class EmployeeAction extends BaseAction{@Resourceprivate EmployeeManager employeeManager;private Employee employee;private Long id;@Action(value = "/addAction", results = { @Result(name = "success",location = "/listAction", type = "redirect")})public String add(){employeeManager.save(employee);return SUCCESS;}@Action(value = "/listAction", results = { @Result(name = "success",location = "/list.jsp")})public String list(){List<Employee> employees=employeeManager.findAll();httpServletRequest.setAttribute("employees_list",employees);return SUCCESS;}@Action(value = "/deleteAction", results = { @Result(name = "success",location = "/listAction", type = "redirect")})public String delete(){employeeManager.remove(id);return SUCCESS;}@Action(value = "/saveOrUpdateAction", results = { @Result(name = "success",location = "/listAction", type = "redirect")})public String saveOrUpdate(){employeeManager.savaOrUpdate(employee);return SUCCESS;}@Action(value = "/editAction", results = { @Result(name = "success",location = "/update.jsp")})public String edit(){employee=(Employee) employeeManager.getObject(id);return SUCCESS;}@Action(value = "/saveAction", results = { @Result(name = "success",location = "/listAction", type = "redirect")})public String save(){Long id=this.getEmployee().getId();employee=(Employee) employeeManager.getObject(id);return SUCCESS;}@Action(value = "/updateAction", results = { @Result(name = "success",location = "/listAction", type = "redirect")})public String update(){Long id=this.getEmployee().getId();employeeManager.savaOrUpdate(this.getEmployee());return SUCCESS;}public Employee getEmployee() {return employee;}public void setEmployee(Employee employee) {this.employee = employee;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}}
index.jsp <%@ page language="java" import="java.util.*" pageEncoding="GBK"%><html>  <script type="text/javascript">    setTimeout("javascript:location.href='listAction'",200);          </script>  <body>     <font color=blue size=18>Load.......</font>  </body></html>
list.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><!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=UTF-8"><title>demo page</title></head><body><h1><a href="add.jsp">添加数据</a></h1><table border="1">     <tr><td>ID</td><td>姓名</td><td>地址</td><td>电话</td><td>操作</td></tr><s:iterator value="#request.employees_list">     <tr><td>${id}</td><td>${name}</td><td>${address}</td><td>${phone}</td><td> <a href="editAction?id=${id}">更新</a>|<a href='<s:url action="deleteAction"><s:param name="id" value="id"></s:param></s:url>'>删除</a></td></tr></s:iterator></table></body></html>
add.jsp<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%@ taglib uri="/struts-tags" prefix="s" %><html>  <head>  <title>add.jsp</title>  <!-- 增加雇员信息页面 -->  </head>    <body>  请输入雇员信息:  <s:form action="addAction">  <s:textfield name="employee.name" label="姓名"></s:textfield>  <s:textfield name="employee.address" label="地址"></s:textfield>  <s:textfield name="employee.phone" label="电话"></s:textfield>  <s:submit></s:submit>  </s:form>  </body></html>
update.jsp<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%@ taglib uri="/struts-tags" prefix="s"%><html>  <head>     </head>    <body>     <s:form action="updateAction" method="post">   <s:hidden name="employee.id"></s:hidden>   <!--  <s:textfield name="employee.id" label="编号"></s:textfield> -->     <s:textfield name="employee.name" label="用户名"></s:textfield>   <s:textfield name="employee.address" label="地址"></s:textfield>   <s:textfield name="employee.phone" label="电话"></s:textfield>   <s:submit></s:submit>   </s:form>  </body></html>

                                             
0 0