首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

SSH框架的搭建,该如何处理

2012-01-22 
SSH框架的搭建SSH框架的搭建步骤:1,构建一个web工程,配置xml文件如下filterfilter-namestruts2/filte

SSH框架的搭建
SSH框架的搭建
步骤:
1,构建一个web工程,配置xml文件如下
<filter>
<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>

注意:1),由于从struts2.1.3之后的版本不再建议采用org.apache.struts2.dispatcher.FilterDispatcher,所以,我们最好配置成StrutsPrepareAndExecuteFilter或者StrutsExecuteFilter以及StrutsPrepareFilter,需要注意的是:如配置成StrutsExecuteFilter需要将StrutsPrepareFilter也配置上,否则将会报错。所以建议就只直接采用StrutsPrepareAndExecuteFilter。
2),将来配置OpenSessionInViewFilter,必须在struts2过滤器之前

2,添加struts配置文件。 在WEB-INF/classes目录下,新建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>

</struts>

3,导入struts的核心包,发布到tomcat上去测试,服务器启动正常,说明配置成功
4,书写一个struts,action,然后测试
比如简单的login
5,配置hibernate
1) 创建Hibernate配置文件,hibernate.cfg.xml
2)配置表的映射文件
3)结合struts运行,注意操作框架的分层处理

6,配置Spring相关操作
1)首先修改web.xml文件,增加如下代码:
<!--
* 从类路径下加载spring的配置文件, 多个配置文件可以用逗号和空格区分
* classpath: 关键字特指类路径下加载-->
<context-param>
<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>
  <!-- 配置OpenSessionInViewFilter,必须在struts2监听之前 -->
  <filter>
  <filter-name>lazyLoadingFilter</filter-name>
  <filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
  </filter-class>
  </filter>
<filter-mapping>
  <filter-name>lazyLoadingFilter</filter-name>
  <url-pattern>*.action</url-pattern>
  </filter-mapping>

注意:OpenSessionInViewFilter:这主要是为了实现Hibernate的延迟加载功能。基于一个请求
一个hibernate session的原则。
spring中对OpenSessionInViewFilter的描述如下:
它是一个Servlet2.3过滤器,用来把一个Hibernate Session和一次完整的请求过程对应的线程相绑定。目的是为了实现"Open Session in View"的模式。
例如: 它允许在事务提交之后延迟加载显示所需要的对象。
这个过滤器和 HibernateInterceptor 有点类似:它是通过线程实现的。无论是没有事务的应用,还是有业务层事务的应用(通过HibernateTransactionManager 或
JtaTransactionManager的方式实现)它都适用。在后一种情况下,事务会自动采用由这个filter绑定的Session来进行相关的操作以及根据实际情况完成提交操作。

 
2)根据配置书写spring配置文件
3)书写一个测试类,测试spring的配置是否成功

7,整合structs框架
1)导入struts2-spring-plugin.jar
2) 配置web.xml文件。在web.xml中加入以下代码:
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
3)struts和Spring集成
1)将struts2.xml委托spring管理
<constant name="struts.objectFactory" value="spring"/>
2)将structs的action注入给spring
以struts示例中的login.action为例,首先创建一个LoginAction类的Bean。在applicationContext.xml中增加如下代码:
<bean id="loginAction" class="test.action.LoginAction" scope="prototype">
</bean>

这里,我们把这个bean的id设为loginAction。Scope设为prototype,含义是每一次请求创建一个LoginAction类的实例,Scope还有另一个值“singleton”意为“单例模式”。
接下来修改struts.xml文件,把原来login.action的配置做如下修改:
把<action name="login" class=" test.action.LoginAction ">
改为
<action name="login" class="loginAction"> 

8,整合hibernate框架


配置sessionFactory有两种方式,直接配置或者注入

参照文档ds_tran
9,配置事务管理器。增加如下代码:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

这里创建了一个id为transactionManager的事务管理器,它匹配一个session工厂,<ref bean="sessionFactory"/>这个sessionFactory是指session工厂的ID。
10,对事务管理器进行事务设置,并应用
参照文档:ds_tran



[解决办法]
MD5.java

package com.briup.woss.common.util;

//import required classes

public class MD5 {
private static MD5 md5 = null;

static final int S11 = 7;

static final int S12 = 12;

static final int S13 = 17;

static final int S14 = 22;

static final int S21 = 5;

static final int S22 = 9;

static final int S23 = 14;

static final int S24 = 20;

static final int S31 = 4;

static final int S32 = 11;

static final int S33 = 16;

static final int S34 = 23;

static final int S41 = 6;

static final int S42 = 10;

static final int S43 = 15;

static final int S44 = 21;

static final byte PADDING[] = { -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 };

private long state[];

private long count[];

private byte buffer[];

public String digestHexStr;

private byte digest[];

public static synchronized MD5 getInstance() {
if (md5 == null)
md5 = new MD5();
return md5;
}

public String getMD5ofStr(String s) {
md5Init();
md5Update(s.getBytes(), s.length());
md5Final();
digestHexStr = "";
for (int i = 0; i < 16; i++) {
digestHexStr += byteHEX(digest[i]);
}

return digestHexStr;
}

private MD5() {
state = new long[4];
count = new long[2];
buffer = new byte[64];
digest = new byte[16];
md5Init();
}

private void md5Init() {
count[0] = 0L;
count[1] = 0L;
state[0] = 0x67452301L;
state[1] = 0xefcdab89L;
state[2] = 0x98badcfeL;
state[3] = 0x10325476L;
}

private long F(long l, long l1, long l2) {
return l & l1 | ~l & l2;
}

private long G(long l, long l1, long l2) {
return l & l2 | l1 & ~l2;
}

private long H(long l, long l1, long l2) {
return l ^ l1 ^ l2;
}

private long I(long l, long l1, long l2) {
return l1 ^ (l | ~l2);
}

private long FF(long l, long l1, long l2, long l3, long l4, long l5, long l6) {
l += F(l1, l2, l3) + l4 + l6;
l = (int) l << (int) l5 | (int) l >>> (int) (32L - l5);
l += l1;
return l;
}

private long GG(long l, long l1, long l2, long l3, long l4, long l5, long l6) {
l += G(l1, l2, l3) + l4 + l6;
l = (int) l << (int) l5 | (int) l >>> (int) (32L - l5);
l += l1;
return l;
}

private long HH(long l, long l1, long l2, long l3, long l4, long l5, long l6) {
l += H(l1, l2, l3) + l4 + l6;
l = (int) l << (int) l5 | (int) l >>> (int) (32L - l5);
l += l1;
return l;
}

private long II(long l, long l1, long l2, long l3, long l4, long l5, long l6) {
l += I(l1, l2, l3) + l4 + l6;
l = (int) l << (int) l5 | (int) l >>> (int) (32L - l5);
l += l1;
return l;


}

private void md5Update(byte abyte0[], int i) {
byte abyte1[] = new byte[64];
int k = (int) (count[0] >>> 3) & 0x3f;
if ((count[0] += i << 3) < (long) (i << 3)) {
count[1]++;
}
count[1] += i >>> 29;
int l = 64 - k;
int j;
if (i >= l) {
md5Memcpy(buffer, abyte0, k, 0, l);
md5Transform(buffer);
for (j = l; j + 63 < i; j += 64) {
md5Memcpy(abyte1, abyte0, 0, j, 64);
md5Transform(abyte1);
}

k = 0;
} else {
j = 0;
}
md5Memcpy(buffer, abyte0, k, j, i - j);
}

private void md5Final() {
byte abyte0[] = new byte[8];
Encode(abyte0, count, 8);
int i = (int) (count[0] >>> 3) & 0x3f;
int j = i >= 56 ? 120 - i : 56 - i;
md5Update(PADDING, j);
md5Update(abyte0, 8);
Encode(digest, state, 16);
}

private void md5Memcpy(byte abyte0[], byte abyte1[], int i, int j, int k) {
for (int l = 0; l < k; l++) {
abyte0[i + l] = abyte1[j + l];
}

}

private void md5Transform(byte abyte0[]) {
long l = state[0];
long l1 = state[1];
long l2 = state[2];
long l3 = state[3];
long al[] = new long[16];
Decode(al, abyte0, 64);
l = FF(l, l1, l2, l3, al[0], 7L, 0xd76aa478L);
l3 = FF(l3, l, l1, l2, al[1], 12L, 0xe8c7b756L);
l2 = FF(l2, l3, l, l1, al[2], 17L, 0x242070dbL);
l1 = FF(l1, l2, l3, l, al[3], 22L, 0xc1bdceeeL);
l = FF(l, l1, l2, l3, al[4], 7L, 0xf57c0fafL);
l3 = FF(l3, l, l1, l2, al[5], 12L, 0x4787c62aL);
l2 = FF(l2, l3, l, l1, al[6], 17L, 0xa8304613L);
l1 = FF(l1, l2, l3, l, al[7], 22L, 0xfd469501L);
l = FF(l, l1, l2, l3, al[8], 7L, 0x698098d8L);
l3 = FF(l3, l, l1, l2, al[9], 12L, 0x8b44f7afL);
l2 = FF(l2, l3, l, l1, al[10], 17L, 0xffff5bb1L);
l1 = FF(l1, l2, l3, l, al[11], 22L, 0x895cd7beL);
l = FF(l, l1, l2, l3, al[12], 7L, 0x6b901122L);
l3 = FF(l3, l, l1, l2, al[13], 12L, 0xfd987193L);
l2 = FF(l2, l3, l, l1, al[14], 17L, 0xa679438eL);
l1 = FF(l1, l2, l3, l, al[15], 22L, 0x49b40821L);
l = GG(l, l1, l2, l3, al[1], 5L, 0xf61e2562L);
l3 = GG(l3, l, l1, l2, al[6], 9L, 0xc040b340L);
l2 = GG(l2, l3, l, l1, al[11], 14L, 0x265e5a51L);
l1 = GG(l1, l2, l3, l, al[0], 20L, 0xe9b6c7aaL);
l = GG(l, l1, l2, l3, al[5], 5L, 0xd62f105dL);
l3 = GG(l3, l, l1, l2, al[10], 9L, 0x2441453L);
l2 = GG(l2, l3, l, l1, al[15], 14L, 0xd8a1e681L);
l1 = GG(l1, l2, l3, l, al[4], 20L, 0xe7d3fbc8L);
l = GG(l, l1, l2, l3, al[9], 5L, 0x21e1cde6L);
l3 = GG(l3, l, l1, l2, al[14], 9L, 0xc33707d6L);
l2 = GG(l2, l3, l, l1, al[3], 14L, 0xf4d50d87L);
l1 = GG(l1, l2, l3, l, al[8], 20L, 0x455a14edL);
l = GG(l, l1, l2, l3, al[13], 5L, 0xa9e3e905L);
l3 = GG(l3, l, l1, l2, al[2], 9L, 0xfcefa3f8L);
l2 = GG(l2, l3, l, l1, al[7], 14L, 0x676f02d9L);
l1 = GG(l1, l2, l3, l, al[12], 20L, 0x8d2a4c8aL);
l = HH(l, l1, l2, l3, al[5], 4L, 0xfffa3942L);
l3 = HH(l3, l, l1, l2, al[8], 11L, 0x8771f681L);
l2 = HH(l2, l3, l, l1, al[11], 16L, 0x6d9d6122L);
l1 = HH(l1, l2, l3, l, al[14], 23L, 0xfde5380cL);
l = HH(l, l1, l2, l3, al[1], 4L, 0xa4beea44L);
l3 = HH(l3, l, l1, l2, al[4], 11L, 0x4bdecfa9L);
l2 = HH(l2, l3, l, l1, al[7], 16L, 0xf6bb4b60L);
l1 = HH(l1, l2, l3, l, al[10], 23L, 0xbebfbc70L);
l = HH(l, l1, l2, l3, al[13], 4L, 0x289b7ec6L);
l3 = HH(l3, l, l1, l2, al[0], 11L, 0xeaa127faL);
l2 = HH(l2, l3, l, l1, al[3], 16L, 0xd4ef3085L);
l1 = HH(l1, l2, l3, l, al[6], 23L, 0x4881d05L);
l = HH(l, l1, l2, l3, al[9], 4L, 0xd9d4d039L);
l3 = HH(l3, l, l1, l2, al[12], 11L, 0xe6db99e5L);
l2 = HH(l2, l3, l, l1, al[15], 16L, 0x1fa27cf8L);
l1 = HH(l1, l2, l3, l, al[2], 23L, 0xc4ac5665L);
l = II(l, l1, l2, l3, al[0], 6L, 0xf4292244L);


l3 = II(l3, l, l1, l2, al[7], 10L, 0x432aff97L);
l2 = II(l2, l3, l, l1, al[14], 15L, 0xab9423a7L);
l1 = II(l1, l2, l3, l, al[5], 21L, 0xfc93a039L);
l = II(l, l1, l2, l3, al[12], 6L, 0x655b59c3L);
l3 = II(l3, l, l1, l2, al[3], 10L, 0x8f0ccc92L);
l2 = II(l2, l3, l, l1, al[10], 15L, 0xffeff47dL);
l1 = II(l1, l2, l3, l, al[1], 21L, 0x85845dd1L);
l = II(l, l1, l2, l3, al[8], 6L, 0x6fa87e4fL);
l3 = II(l3, l, l1, l2, al[15], 10L, 0xfe2ce6e0L);
l2 = II(l2, l3, l, l1, al[6], 15L, 0xa3014314L);
l1 = II(l1, l2, l3, l, al[13], 21L, 0x4e0811a1L);
l = II(l, l1, l2, l3, al[4], 6L, 0xf7537e82L);
l3 = II(l3, l, l1, l2, al[11], 10L, 0xbd3af235L);
l2 = II(l2, l3, l, l1, al[2], 15L, 0x2ad7d2bbL);
l1 = II(l1, l2, l3, l, al[9], 21L, 0xeb86d391L);
state[0] += l;
state[1] += l1;
state[2] += l2;
state[3] += l3;
}

private void Encode(byte abyte0[], long al[], int i) {
int j = 0;
for (int k = 0; k < i; k += 4) {
abyte0[k] = (byte) (int) (al[j] & 255L);
abyte0[k + 1] = (byte) (int) (al[j] >>> 8 & 255L);
abyte0[k + 2] = (byte) (int) (al[j] >>> 16 & 255L);
abyte0[k + 3] = (byte) (int) (al[j] >>> 24 & 255L);
j++;
}

}

private void Decode(long al[], byte abyte0[], int i) {
int j = 0;
for (int k = 0; k < i; k += 4) {
al[j] = b2iu(abyte0[k]) | b2iu(abyte0[k + 1]) << 8
| b2iu(abyte0[k + 2]) << 16 | b2iu(abyte0[k + 3]) << 24;
j++;
}

}

public static long b2iu(byte byte0) {
return byte0 >= 0 ? byte0 : byte0 & 0xff;
}

public static String byteHEX(byte byte0) {
char ac[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
char ac1[] = new char[2];
ac1[0] = ac[byte0 >>> 4 & 0xf];
ac1[1] = ac[byte0 & 0xf];
String s = new String(ac1);
return s;
}

public static String getMD5Str(String string) {
return getInstance().getMD5ofStr(string);
}

public static void main(String args[]) {
MD5 md5 = new MD5();
System.out.println(md5.getMD5ofStr("stupid"));
}

}

[解决办法]
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.custom.i18n.resources" value="Message"/>
<package name="basic" extends="struts-default" namespace="/basic">
<action name="first" class="com.briup.basic.FirstAction">
<result name="success">/basic/first.jsp</result>
<result name="error">/index.jsp</result>
</action>
<action name="register" class="com.briup.basic.RegisterAction">
<result name="success">/basic/registerSuccess.jsp</result>
<result name="error">/basic/registererror.jsp</result>
</action>
<action name="login" class="com.briup.basic.LoginAction">
<result name="success">/basic/loginSuccess.jsp</result>
<result name="error">/basic/loginError.jsp</result>
<result name="input">/index.jsp</result>
</action>

<action name="welcome" class="com.briup.advance.WelcomAction">
</action>
</package>


<!--定义默认的action -->
<!-- 
<default-action-ref name="notFound"></default-action-ref>-->

<package name="advance" extends="struts-default" namespace="/advance">
<!-- 配置全局的结果集 --><!--
<global-results>
<result>/index.jsp</result>
</global-results>
--><!-- 如果配置了则会覆盖全局结果集 -->
<!-- 方式一 -->
<action name="loginRegister" class="com.briup.advance.LoginRegisterAction">
<result name="registerSuccess">/advance/RegisterSuccess.jsp</result>
<result name="registerError">/advance/RegisterError.jsp</result>
<result name="loginSuccess">/advance/LoginSuccess.jsp</result>
<result name="loginError">/advance/LoginError.jsp</result>
<result name="input">/index.jsp</result>
</action>

<!-- 方式二 -->
<action name="login" class="com.briup.advance.LoginRegisterAction" method="login">
<result name="loginSuccess">/advance/LoginSuccess.jsp</result>
<result name="loginError">/advance/LoginError.jsp</result>
<result name="input">/index.jsp</result>
</action>
<action name="register" class="com.briup.advance.LoginRegisterAction" method="register">
<result name="registerSuccess">/advance/RegisterSuccess.jsp</result>
<result name="registerError">/advance/RegisterError.jsp</result>
<result name="input">/index.jsp</result> 
</action>
<!-- 方式三 -->
<action name="*Action" class="com.briup.advance.LoginRegisterAction" method="{1}">
<result name="{1}Success">/advance/{1}Success.jsp</result>
<!--<result name="{1}Error">/advance/{1}Error.jsp</result>
--><result name="{1}Error">/index.jsp</result>
<result name="input">/index.jsp</result>
</action><!--

<action name="welcome" class="com.briup.advance.WelcomAction"></action>
--><!-- <action name="*">
<result name="success">
/index.jsp
</result>
</action>--><!--
<action name="*">
</action>
--></package>
<package name="ognltags" extends="struts-default" namespace="/ognltags">
<action name="ognl" class="com.briup.ognltags.OgnlAction">
<result name="success">/ognltags/ognl.jsp</result>
</action>
</package>
<package name="book" extends="struts-default" namespace="/book">
<!--<action name="book" class="com.briup.book.bookAction">
<result name="addOrEdit">/book/addBook.jsp</result>
<result name="delete">/book/listBooks.jsp</result>
<result name="list">/book/listBooks.jsp</result>
<result name="load">/book/editBook.jsp</result>
<result name="input">/index.jsp</result>
</action>
-->
<action name="addOrEdit" class="com.briup.book.bookAction" method="addOrEdit">
<result name="addOrEditSuccess" type="chain">list</result>
<result name="addOrEditError">/index.jsp</result>


<result name="input" >/index.jsp</result>
</action>
<action name="delete" class="com.briup.book.bookAction" method="delete">
<result name="deleteSuccess" type="chain">list</result>
<result name="deletError" >/index.jsp</result>
<result name="input" >/index.jsp</result>
</action>
<action name="list" class="com.briup.book.bookAction" method="list">
<result name="listSuccess">/book/listBooks.jsp</result>
<result name="listError">/index.jsp</result>
<result name="input">/index.jsp</result>
</action>
<action name="load" class="com.briup.book.bookAction" method="load">
<result name="loadSuccess">/book/editBook.jsp</result>
<result name="loadError">/index.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
<package name="converter" extends="struts-default" namespace="/converter">
<action name="converter" class="com.briup.converter.ConverterAction">
<result name="success">/converter/show.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
<package name="interceptor" extends="struts-default" namespace="/interceptor">

<interceptors>
<interceptor name="login1" class="com.briup.interceptor.LoginInterceptor"></interceptor>
<interceptor name="time" class="com.briup.interceptor.TimeInterceptor"></interceptor>
<interceptor-stack name="myInterceptor">
<interceptor-ref name="login1"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="time"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 设置默认拦截器 -->
<default-interceptor-ref name="myInterceptor"></default-interceptor-ref>

<action name="first" class="com.briup.interceptor.FirstAction">
<!--<interceptor-ref name="myInterceptor"></interceptor-ref>-->
<result name="success">/interceptor/first.jsp</result>
<result name="input">/interceptor/isLogin.jsp</result>
</action>
<action name="second" class="com.briup.interceptor.SecondAction">
<!--<interceptor-ref name="myInterceptor"></interceptor-ref>-->
<result name="success">/interceptor/second.jsp</result>
<result name="input">/interceptor/isLogin.jsp</result>
</action>
<action name="third" class="com.briup.interceptor.ThirdAction">
<!--<interceptor-ref name="myInterceptor"></interceptor-ref>-->
<result name="success">/interceptor/third.jsp</result>
<result name="input">/interceptor/isLogin.jsp</result>
</action>
<action name="login" class="com.briup.interceptor.LoginAction">
<!-- 用time拦截器覆盖默认拦截器 -->
<interceptor-ref name="time"></interceptor-ref>
<result name="success">/interceptor/loginSuccess.jsp</result>
<result name="input">/index.jsp</result>


</action>
</package>
<package name="i18n" extends="struts-default" namespace="/i18n">
<action name="local" class="com.briup.i18n.LocalAction">
<result name="success">/i18/i18.jsp</result>
</action>
</package>
</struts>





热点排行