Sping(6)SSH开发
来源:互联网 发布:虚拟机装mac蓝屏 编辑:程序博客网 时间:2024/05/17 07:43
1.SSH开发完整配置流程
- 引入sprng开发包(http://pan.baidu.com/s/1bpgq28f)
- 编写ApplicationContext.xml文件(或者beans.xml)凡在src目录下
需要的dtd头:<?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: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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"></beans>
加入Hibernate开发包(http://pan.baidu.com/s/1nvx7cQt)
因为是ssh,所以Hibernate的核心,就被spring接管了(hibernate.cfg.xml文件、*.hbm.xml文件、SessionFactory在spring的文件中配置即可)
在ApplicationContext.xml文件中配置数据源
<!-- 配置数据源
数据源:连接池 --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/><property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/><property name="username" value="scott"/><property name="password" value="tiger"/><!-- 连接池启动时的初始值 --><property name="initialSize" value="3"/><!-- 连接池最大值 --><property name="maxActive" value="500"/><!-- 最大空闲值,当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接释放一部分, 一直减少到最大空闲值 --><property name="maxIdle" value="2"/><!-- 最小空闲值,当空闲的连接数少于阈值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 --><property name="minIdle" value="1"/></bean>配置SessionFactory对象
<!-- 配置会话工厂 --><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><!-- 设置数据源 --><property name="dataSource" ref="dataSource"/><!-- 接管了Hibernate的对象映射文件 --><property name="mappingResources"><list><value>com/test/domain/Employee.hbm.xml</value></list></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.OracleDialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=falsehibernate.format_sql=true</value></property></bean>
编写domain对象Employee.java和对象映射文件Employee.hbm.xml
public class Employee {private Integer id;private String name;private String email;private Date hiredate;private Float salary;}
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.test.domain"> <class name="Employee" table="employee"><!-- 主键策略 --><id name="id" type="java.lang.Integer"><generator class="native"/></id><property name="email" type="java.lang.String"><column name="email" length="64"></column></property><property name="hiredate" type="java.util.Date"><column name="hiredate"></column></property><property name="name" type="java.lang.String"><column name="name" length="64"></column></property><property name="salary" type="java.lang.Float"><column name="salary"></column></property> </class></hibernate-mapping>
使用事务管理器统一管理事务
添加Employee的service类和service接口// ---------EmployeeServiceInter接口类---------------public interface EmployeeServiceInter {public void addEmployee(Employee e);public void updEmployee(Employee e);public void delEmployee(java.io.Serializable id);public List<Employee> showEmployee();}// ---------EmployeeService实现类---------------/* 这里配置@Transactional,用处是让spring的事务管理器接管该service的事务 * 该注解可以加到class上;也可以加到method上(这种情况,只管理某一个方法)。 * */@Transactionalpublic class EmployeeService implements EmployeeServiceInter {private SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Overridepublic void addEmployee(Employee e) {// Session s = sessionFactory.openSession();// Transaction ts = s.beginTransaction();// s.save(e);// ts.commit();// 配置事务管理器后才能这样简写sessionFactory.getCurrentSession().save(e);}@Overridepublic void updEmployee(Employee e) {// TODO Auto-generated method stub}@Overridepublic void delEmployee(Serializable id) {// TODO Auto-generated method stub}@Overridepublic List<Employee> showEmployee() {// TODO Auto-generated method stubreturn null;}}
使用事务管理器统一管理事务
配置applicationContext.xml文件(省略了对service实现类的配置)<!-- 配置事务管理器,统一管理SessionFactory的事务 --><bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 启用事务注解 --><tx:annotation-driven transaction-manager="txManager"/>
配置Hibernate的二级缓存( 配置会话工厂 时的一个property中添加)
添加二级缓存开发包;并将ehcache的配置文件放到src目录下<property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.OracleDialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=truehibernate.format_sql=true<!-- 配置二级缓存 -->hibernate.cache.use_second_level_cache=truehibernate.cache.provider_class=org.hibernate.cache.EhCacheProviderhibernate.generate_statistics=true</value></property>
引入Structs开发包(http://pan.baidu.com/s/1hsut1Yk)
创建structs-config.xml文件,放在/WEB-INF目录下
需要的dtd头:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"><struts-config></struts-config>
配置structs-config.xml文件
创建login.jsp和mainFrame.jsp文件<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>My JSP 'login.jsp' starting page</title> </head> <body> <h1>管理员登录</h1> <form action="/myssh/login.do?flag=login" method="post"> <table> <tr><td>id:</td><td><input type="text" name="id"></td></tr> <tr><td>pw:</td><td><input type="password" name="pwd"></td></tr> <tr><td><input type="submit" value="登录"></td><td><input type="reset" value="重新填写"></td></tr> </table> </form> </body></html><!-- ###################################################################### --><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>My JSP 'mainFrame.jsp' starting page</title> </head> <body> <h2>请选择您的操作</h2><br> <a href="">添加雇员</a><br> <a href="">显示雇员</a><br> <a href="">查询雇员</a><br> <a href="">退出系统</a><br> </body></html>
创建EmployeeForm和LoginAction文件:public class EmployeeForm extends ActionForm {private String id;private String pwd;}// ---------------------------------------------------public class LoginAction extends DispatchAction {public ActionForward login(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {EmployeeForm employeeForm = (EmployeeForm) form;if(employeeForm.getPwd().equals("123")) {return mapping.findForward("ok");} else {return mapping.findForward("err");}}}
配置structs-config.xml文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"><struts-config><form-beans><form-bean name="employeeForm" type="com.test.web.forms.EmployeeForm"/></form-beans><action-mappings><action path="/login" parameter="flag" name="employeeForm" type="com.test.web.action.LoginAction"><forward name="ok" path="/WEB-INF/mainFrame.jsp"/><forward name="err" path="/WEB-INF/login.jsp"/></action></action-mappings></struts-config>
在web容器web.xml中配置spring
当我们的tomcat在启动的时候,就会实例化spring容器(ApplicationContext.xml文件)<!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径(类路径从src目录开始)下查找 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 对spring容器进行实例化 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
在需要的地方可以通过下面的方式取出spring容器(Action没有交给spring管理的情况下,要先获取spring容器,再获得serviceInter接口的bean)// 通过下面语句,可以直接获取spring容器实例,即前面提到的ApplicationContextWebApplicationContext wac= WebApplicationContextUtils.getWebApplicationContext(this.getServlet().getServletContext());// 从spring容器中获取beanEmployeeServiceInter esi = (EmployeeServiceInter) wac.getBean("employeeService");
让spring接管我们的struts(也就是Action控件)
通过这种方式,可以通过接口达到层间解耦合的目的;同时,也可以解决action是单例的问题(prototype模式下)。
把action交给spring管理后,我们可以使用依赖注入,在action中注入业务层的bean。确保action的path属性值(structs-config.xml文件action-mappings下action元素的path)与bean的名称相同
在structs-config.xml文件中的配置<!-- 配置代理请求处理 --><controller><set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/></controller>
在ApplicationContext.xml文件中配置action路径<!-- 配置action --><bean name="/login" scope="prototype" class="com.test.web.action.LoginAction"><property name="employeeServiceInter" ref="employeeService"/></bean>
与此同时,structs-config.xml文件中,下面的配置type可以去掉<action-mappings><action path="/login" parameter="flag" name="employeeForm" type="com.test.web.action.LoginAction"><forward name="ok" path="/WEB-INF/mainFrame.jsp"/><forward name="err" path="/WEB-INF/login.jsp"/></action></action-mappings><!-- 更改为 --><action-mappings><action path="/login" parameter="flag" name="employeeForm"><forward name="ok" path="/WEB-INF/mainFrame.jsp"/><forward name="err" path="/WEB-INF/login.jsp"/></action></action-mappings>
对LoginAction进行相应改动:(此时,将LoginAction当作一个bean来处理,可以直接获取serviceInter接口的bean,进行验证工作)public class LoginAction extends DispatchAction {EmployeeServiceInter employeeServiceInter;public void setEmployeeServiceInter(EmployeeServiceInter employeeServiceInter) {this.employeeServiceInter = employeeServiceInter;}public ActionForward login(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {EmployeeForm employeeForm = (EmployeeForm) form;// 构建一个Employee对象Employee e = new Employee();e.setId(Integer.parseInt(employeeForm.getId()));e.setPwd(employeeForm.getPwd());System.out.println(employeeForm.getId() + " " + employeeForm.getPwd());e = employeeServiceInter.checkEmployee(e);if(e!=null) {// 把雇员信息放入sessionrequest.getSession().setAttribute("loginuser", e);return mapping.findForward("ok");} else {return mapping.findForward("err");}}}
解决中文乱码问题
①自己配置过滤器public class MyFilter extends HttpServlet implements Filter {@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {// TODO Auto-generated method stubarg0.setCharacterEncoding("utf-8");arg2.doFilter(arg0, arg1);}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}
web.xml文件中配置:<!-- 配置自己写的过滤器 --> <filter> <filter-name>MyFilter</filter-name> <filter-class>com.test.web.filter.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
②使用spring框架提供的处理中文乱码的过滤器(直接在web.xml文件中配置)<!-- spring提供的对中文乱码处理的过滤器 --> <filter> <filter-name>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> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
spring可以通过启用注解的方式来配置属性
首先在ApplicationContext.xml文间中启用注解扫描:<!-- 启用注解扫描 --><context:annotation-config/>
bean的配置方式可以这样:<!-- 配置EmployeeService对象 <bean id="employeeService" class="com.test.service.imp.EmployeeService"><property name="sessionFactory" ref="sessionFactory"/></bean>--><!-- 配置EmployeeService对象,通过注解的方式来注入属性值 --><bean id="employeeService" class="com.test.service.imp.EmployeeService"/>
在EmployeeService的java类中对相应属性进行设置// 当我们给某个属性增加了@Resource后,spring就会启动byName的方式注入属性值sessionFactory@Resourceprivate SessionFactory sessionFactory;
解决懒加载问题(同样,有前面提到的三种方案)
不管使用明确初始化的方式,还是配置对象映射文件的lazy=false方式,都会增加性能消耗。
Spring专门提供了opensessioninview的方法来解决懒加载问题,只需要在web.xml文件中添加如下配置:<!-- 配置OpenSessionInView来解决懒加载 --> <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2 引入jQuery库(官网下载即可)
<script type="text/javascript" language="javascript" src="/myssh/js/jquery-2.0.3.js"></script><script type="text/javascript" language="javascript" src="/myssh/js/my.js"></script> -----这是适用我项目的js文件
$(document).ready(function() {window.alert("ok");});---这里(my.js)测试用,只有当dom准备好后,才会执行function内的代码 $(document).ready(function() {//window.alert("ok");// 和class为delid的控件$(".delid").click(function () {return window.confirm("你确定删除该雇员吗?");}); });
3 Hibernate启用默认值(建表时的默认值)
<hibernate-mapping> <class name="com.xiaonei.domain.Users" table="users" dynamic-insert="true" catalog="xiaonei"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="increment" /> </id> <property name="locked" type="java.lang.Short"> <column name="locked" /> </property> </class></hibernate-mapping>
4 解决中文乱码问题(包括以下几点)
<property name="url" value="jdbc:mysql://localhost:3306/xiaonei?useUnicode=true&characterEncoding=utf-8"/>4.2 在ssh框架,要配置过滤器,解决乱码(不进行这一项配置,进入数据库后,数据仍然是乱码)
****参考本博客上面第一部分内容****
- Sping(6)SSH开发
- Java Web开发中Sping的总结和SSH配置
- Java Web开发中Sping的总结和SSH配置
- Java Web开发中Sping的总结和SSH配置
- java后台开发--ssh集成demo及sping详细配置
- SSH Struts2.3.8 hibernate4.1.9+Sping 3.2
- Struts Sping Ibatis 开发流程
- sping+hibernate Dao层开发
- sping(转载)
- Sping
- SSH(Sping,Struts2,Hibernate)和SSM(Sping,SpringMVC,MyBatis)的比较
- 测试时 使用sping 的上下文 调用 ssh中的方法
- java鬼混笔记:SSH框架实例(Sping,SpringMVC,Hibernate)
- (四)sping之代理
- (八)sping之国际化
- JMS与Sping(一)
- Sping 自己学习心得(IOC)
- Puma framework 1.0 beta, 基于sping mvc、spring security、spring data、hibernate搭建的开发框架(供学习用)
- 性能优化之无阻塞加载脚步方法比较
- python 服务器状态探测3种方法
- 在其它数都出现偶数次的数组中寻找出现奇数次的数
- 数据库设计
- Linux命令使用记录
- Sping(6)SSH开发
- ubuntu安装PHP+nginx+mongoDB
- Linux配置Tomcat
- 语言的碰撞
- Default Constructor
- dialog全屏显示图片
- Gflag使用
- python 3计算KL散度(KL Divergence)
- 配置tomcat连接池