spring==============06============ssh整合_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
4
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3656 | 回复: 3   主题: spring==============06============ssh整合        下一篇 
java_along
注册用户
等级:上尉
经验:771
发帖:36
精华:0
注册:2014-2-17
状态:离线
发送短消息息给java_along 加好友    发送短消息息给java_along 发消息
发表于: IP:您无权察看 2014-9-11 23:17:33 | [全部帖] [楼主帖] 楼主

上个帖子完成了springhibernate的整合,这里完成对struts2的整合。

先简单的做个struts2的例子。

既然要使用struts2 首先引入struts2-core-2.1.8.jar,其他包报错后再引入,容易记忆,同时也不需要引入许多没用的包。

简单创建个Action

publicclass UserAction {
      public String execute(){
            return"success";
      }
}


新建struts.xml

<action name="userAction" class="com.javalong.ssh.action.UserAction">
<result name="success">
/jsp/user.jsp
</result>
</action>


配置好action

创建简单的jsp视图

<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<html>
<head>
</head>
<body>


欢迎登陆

</body>
</html>


还有个最重要的是配置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>


这个就是在用户访问时,做个过滤器。

好,这样 简单的struts2配置好了,访问。

运行 报错

Caused by: java.lang.ClassNotFoundException: com.opensymphony.xwork2.ActionContext


加入xwork-core-2.1.6.jar 

运行 报错

Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/RequestContext


加入commons-fileupload-1.2.1.jar

运行 报错

Caused by: java.lang.NoClassDefFoundError: freemarker/template/TemplateException


加入freemarker-2.3.15.jar

运行 成功

访问页面http://localhost:8080/ssh02/userAction

输出:欢迎登陆

这样就完成配置了。

下面使用spring 整合struts2

首先要配置监听器。

web.xml加入:

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ssh.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


struts.xml

加入

<constant name="struts.objectFactory" value="spring"></constant>


重新启动tomcat报错

Caused by: Cannot locate the chosen ObjectFactory implementation: spring - [unknown location]


这是因为我们没有引入struts2-spring-plugin-2.1.8.1.jar

引入后,启动。

报错

Caused by: java.net.ConnectException: Connection refused: connect


这是因为我的mysql没有启动。

启动mysql,运行

好,成功。

那么我们在action中从数据库中查出一个user再传到jsp中试试。

首先我们要在action中使用dao接口获取数据。

代码:

private UserDao userDao;
private User user;
public UserDao getUserDao() {
      return userDao;
}
public void setUserDao(UserDao userDao) {
      this.userDao = userDao;
}
public User getUser() {
      return user;
}
public void setUser(User user) {
      this.user = user;
}
public String execute(){
      user=userDao.findById(1);
      return "success";
}


就是加了2个属性userDao user,把获取的id1user对象传给user,这样struts2会把user放入栈顶的action中,到时候直接在jsp中使用el表达式就可以获取user

User.jsp
<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<html>
<head>
</head>
<body>
${user}
</body>
</html>


代码非常简单。

访问http://localhost:8080/ssh02/userAction

输出

北京联动北方科技有限公司

当然 如果你们一直在跟着我做的话,还是会报错,空指针异常。

为什么会报错,因为我们在action中使用的userDao没有地方传入进来,所以userDao=null

那么为什么这边可以呢?

因为




赞(0)    操作        顶端 
java_along
注册用户
等级:上尉
经验:771
发帖:36
精华:0
注册:2014-2-17
状态:离线
发送短消息息给java_along 加好友    发送短消息息给java_along 发消息
发表于: IP:您无权察看 2014-9-11 23:24:56 | [全部帖] [楼主帖] 2  楼

struts2的 default.properties

北京联动北方科技有限公司

配置了如果是用spring来创建struts2的对象的话,会自动注入,名字相同的属性。

我在ssh.xml中配置了

<bean id="userHibernateImpl" class="com.javalong.ssh.dao.UserHibernateImpl">
<property name="sessionFactory" ref="mySessionFactory"></property>
</bean>


名字是userHibernateImpl,和userDao不同,所以不注入,所以如果就这样运行,是会报错的。

大家可以看看北京联动北方科技有限公司这一行,���明自动注入,不只按名称,还可以按类型,自动,等。

虽然userHibernateImpluserDao的名字不一样,但是类型是一样的,这里我们改为type就可以自动注入了。

就是在struts.xml中加入

<constant name="struts.objectFactory.spring.autoWire" value="type"></constant>


好,大功告成~



赞(0)    操作        顶端