如何整合S2SH(三)
来源:互联网 发布:实时天气预报软件电脑 编辑:程序博客网 时间:2024/06/03 13:26
第七步(解决中文乱码问题):
(与s1sh一样)
1.思路1:自己配置过滤器,同时在web.xml中做如下配置:
<filter> <filter-name>MyFilter</filter-name> <filter-class>com.ssh.web.filter.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2.思路2:使用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>
第八步(S1SH整合特别说明):
1.Spring可以启用注解的方式来配置属性:
首先,重新在applicationContext.xml中配置bean:
<!-- 配置dao --><bean id="userDao" class="com.ssh.dao.impl.UserDaoImpl"/><!-- 配置service --><bean id="userService" class="com.ssh.service.impl.UserServiceImpl"/><!-- 配置struts2 --><bean id="login" class="com.ssh.action.LoginAction"/>
其次,在UserDaoImpl.java、UserServiceImpl.java、LoginAction.java中做如下修改:
UserDaoImpl.java:
@Autowiredpublic void setSessionFactory(@Qualifier("sessionFactory")SessionFactory sessionFactory) { this.sessionFactory = sessionFactory;}
UserServiceImpl.java:
@Autowiredpublic void setUserDao(@Qualifier("userDao")UserDao userDao) { this.userDao = userDao;}
LoginAction.java:
@Autowiredpublic void setUserService(@Qualifier("userService")UserService userService) { this.userService = userService;}
然后,在applicationContext.xml中添加如下配置:
你可以按照这种方式:
<!-- 启用注解扫描 --> <context:annotation-config/>
你也可以按照这种方式:
<!-- 扫描有注解的文件 back-package包路径 --><context:component-scan base-package="com.ssh"/>
测试一下,测试通过
2.2. ssh整合的时候,如何解决懒加载问题?
解决方式与如何整合s1sh的一样,同样的对于对象User与Group,是多对一的映射,从多方导航到一方,不会出现懒加载这种现象,你可以通过在mainFrame.jsp中作如下测试(前提是你已经为User分配了一个组):
<body> welcome,${user.name },你所在的组是:${user.group.name}</body>
Spring专门提供了openSessionView的方法来解决懒加载,需要在web.xml中做如下配置:
<!-- 将HibernateSession开关控制配置在Filter,保证一个请求一个session,并对lazy提供支持 --> <filter> <filter-name>OpenSessionInView</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>OpenSessionInView</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
第九步(登录拦截器):
(参考贾琳SSH框架总结)
首先,自定义一个拦截器CheckLogin.java:
package com.ssh.inreceptor;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;import com.ssh.entity.User;public class CheckLogin extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { // TODO Auto-generated method stub ActionContext ctx = invocation.getInvocationContext(); Map session = ctx.getSession(); User user = (User) session.get("user"); if(user!=null){ return invocation.invoke(); } return "checkLoginFail"; }}
其次,在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> <!-- 指定Web应用的默认编码,相当于调用request的setCharacterEncoding方法 --> <constant name="struts.i18n.encoding" value="UTF-8" /> <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> <constant name="struts.serve.static.browserCache" value="false" /> <!-- 当Struts2的配置文件修改后,系统是否自动重新加载配置文件,默认值为false(生产环境下使用),开发阶段最好打开 --> <constant name="struts.configuration.xml.reload" value="true" /> <!-- 开发模式下使用,这样可以打印出更详细的日志信息 --> <constant name="struts.devMode" value="true" /> <!-- 默认的视图主题 --> <constant name="struts.ui.theme" value="simple" /> <!-- 把Action对象交给Spring创建和管理 --> <constant name="struts.objectFactory" value="spring" /> <!-- Struts2处理的请求后缀,默认值是action --> <constant name="struts.action.extension" value="do" /> <!-- 修改一 --> <package name="abstract_struts" abstract="true" extends="struts-default" namespace="/"> <interceptors> <interceptor name="checkLogin" class="com.ssh.interceptor.CheckLogin"/> <interceptor-stack name="checkLoginStack"> <interceptor-ref name="checkLogin"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <global-results> <result name="checkLoginFail">/login.jsp</result> </global-results> </package> <!-- 修改二 --> <!-- 包含的配置文件 --> <include file="struts-user.xml"></include></struts>
在resources目录下,添加配置文件struts-user.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> <package name="loginAction" namespace="/" extends="abstract_struts"> <action name="login" method="login" class="com.ssh.action.LoginAction"> <result name="success">/mainFrame.jsp</result> <result name="error">/login.jsp</result> </action> </package> <package name="userAction" namespace="/user" extends="abstract_struts"> <action name="add" method="add" class="com.ssh.action.UserAction"> <result name="success">/success.jsp</result> <result name="fail">/fail.jsp</result> <interceptor-ref name="checkLogin" /> </action> </package></struts>
然后编写一个action,UserAction.java:
(只是为了测试)
package com.ssh.action;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport { private static final long serialVersionUID = 1L; public String add() { return SUCCESS; }}
最后,编写jsp页面,add.jsp和success.jsp:
add.jsp:
<body> <form action="${pageContext.request.contextPath }/user/add.do"> <input type="submit" value="添加"/> </form> </body>
success.jsp:
<body> 添加成功,拦截失败!</body>
设计思路:通过点击添加按钮,看看如果不存在用户的session,是否能被拦截器成功拦截,并跳转到登录界面login.jsp
测试一下,参考路径:http://localhost:8080/Struts2.3.20Spring4.1.5Hibernate4.3.8/add.jsp
跳转到了,登录界面,实现了成功拦截。
总结,对于s2sh的整合与s1sh整合思路一样,通过整合ssh也学到了很多,同时也要感谢布丰和贾琳,接下来还有更多东西要学。
最后关于源码,见链接[源码地址]
- 如何整合S2SH(三)
- 如何整合S2SH(一)
- 如何整合S2SH(二)
- s2sh三大框架整合
- s2sh整合案例-学生信息管理系统(三)
- 如何整合S2SH 框架 使用 myeclipse
- S2SH整合
- S2SH整合
- S2SH整合
- S2SH整合
- S2SH整合
- s2sh整合
- s2sh整合
- S2SH整合
- s2sh整合
- 对S2SH三大框架整合的心得
- S2SH三大框架的整合(配置文件篇)
- s2sh三大框架的整合步骤整理
- 【转】本地复制不能粘贴到服务器上
- 《线上推广方法》
- 队列操作(一)
- 17,Letter Combinations of a Phone Number
- 网络学习笔记:子网掩码
- 如何整合S2SH(三)
- Boss OpenCart 商城自适应主题模板 ABC-0012-01
- URAL1826 Minefield(简单递归)
- 我的3D游戏消息泵1
- 【OpenCL】初学摘要(一)
- Plan Procurement Outputs You Should Know for the PMP Certification Exam
- 二级 求26个英语字母在字符串中的出现次数
- 许多舍近求远的教训总结
- leetcode-28 Implement strStr()