Struts2整合Spring
来源:互联网 发布:手机人工智能有什么用 编辑:程序博客网 时间:2024/06/09 20:36
Struts整合Spring:
前2天弄了Struts2整合Spring弄了好久,开始一直对配置文件哪些不理解,为什么在Struts的Action中可以生成实例对线,为什么要用Spring的ico容器来生成,还给它起了一个牛B哄哄的名字(依赖注入/控制反转)--其实也没有那么神秘,废话不多说,你慢慢看下去会对你的理解Struts整合Spring有帮助。
首先:Spring的核心是IoC(Inversion ofControl 控制反转)容器和AOP机制;控制反转或者叫依赖注入其实很好理解;比如说一个person类(调用者),要用斧头类(被调用者)的对象去调用劈柴的方法。通常我们是在person类中去new 一个斧头类的对象,然后再去调用劈柴的方法。但是你用spring框架的时候,你就不需要这样去做,那怎么做呢?在Spring框架下,创建斧头类的对象不再需要person类去做,而是又spring容器去生成斧头的对象(控制反转),然后注入到person类(调用者)中(依赖注入)。理解这里很重要,
这里是告诉我们spring容器它帮我们创建被调用者的对象,并且通过依赖注入到调用者中去。
接下来我们用一个登录例子去讲解Struts2整合Spring。
步骤:
1、首先你得有一个空白的Struts2项目(这个不会可以到我博客前面找Struts框架的搭建,估计看这篇博文的应该没有不会的吧,如果有那么小伙子你是要上天呀!)
1、准备Spring.jar和commons-logging.jar。Struts2整合spring必须的2个包,网上可以下载到
2、完成Spring容器的初始化并配置相关内容(类似Strust2加载核心控制器一样)
3、请求页面
4、实现控制器逻辑(Action)
5、实现业务逻辑(Service)
6、配置Struts.xml
7、配置applicationContext.xml
:
首先给贴出文件目录结构:清晰明了有木有啊有木有!!!
a) 把相应jar包拉到一个空白的Struts2的lib目录下
a)web.xml
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"id="WebApp_9"version="2.4">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
<listerner>标签会在web应用启动时自动加载applicationContext.xml文件(默认是在ERB-INF路径下);可以通过在加入<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applocationContext.xml</param-value>
<context-param>
以上代码可以把加载路径修改为/WEB-INF/目录下的classes中
b) 我们来写一个很简单的请求页面(里边有name和pass 2个属性)
<%@ pagelanguage="java"contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglibprefix="s"uri="/struts-tags"%>
<!DOCTYPEhtml PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html; charset=ISO-8859-1">
<title>String_Struts</title>
</head>
<body>
<formaction="new/string_struts.action">
用户名:<inputtype="text"name="name">
<br/>
密码:<inputtype="text"name="pass">
<br/>
<inputtype="submit"name="提交把">
</form>
</body>
</html>
e)实现控制器逻辑(Action)
package com.jluzh.ex8.action;
import com.jluzh.ex8.servlet.UserServlet;
import com.opensymphony.xwork2.ActionSupport;
public class Spring_StrutsAction extends ActionSupport{
private String name;
private String pass;
private UserServlet us;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public UserServlet getUs() {
return us;
}
public void setUs(UserServlet us) {
this.us = us;
}
public String execute() throws Exception{
if(us.logintest(getName(), getPass()))
return SUCCESS;
else return ERROR;
}
}
这里需要注意的是加粗字体部分,我们把处理用户登录的逻辑放在UserServlet组件中,该组件包含一个logintest方法;该方法根据用户名与密码判断用户登录是否成功。实际上,业务逻辑组件是整个应用的核心,控制器可以获得业务逻辑组件的引用,既可以调用业务逻辑组件的所有方法,这就完成了控制器与业务逻辑组件的之间的整合。
c) 实现业务逻辑组件
定义业务逻辑组件接口:
publicinterfaceUserServlet{
publicbooleanlogintest(Stringname,Stringpass);
}
实现业务逻辑组件接口
publicclassUserServletImpimplementsUserServlet{
@Override
publicbooleanlogintest(Stringname,Stringpass){
//TODO Auto-generated method stub
if(name.equals("wanglinbomk")&&pass.equals("wlb922922"))
returntrue;
elsereturnfalse;
}
}
从以上代码可以看出UserServletImp类实现了UserServlet(业务逻辑组件接口),在配置文件中会把UserServletImp依赖注入到前面Action类的UserServlet 的us对象中。
d) 配置Struts.xml
<struts>
<constantname="struts.enable.DynamicMethodInvocation"value="false"/>
<constantname="struts.devMode"value="true"/>
<constantname="struts.objectFactory"value="spring"/>
<packagename="default"namespace="/new"extends="struts-default">
<actionname="string_struts"class="string_struts">
<resultname="success">/WEB-INF/contest/success.jsp</result>
</action>
<actionname="*">
<result>/WEB-INF/contest/{1}.jsp</result>
</action>
</package>
<!-- Add packages here -->
</struts>
注意上面action的class对应的不是一个具体的类(包名.类名),而是一个字符串标识(先理解为专门的ID)
h)配置applicationContext.xml
<beansxmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<beanid="string_struts"class="com.jluzh.ex8.action.Spring_StrutsAction">
<propertyname="us">
<beanclass="com.jluzh.ex8.servlet.UserServletImp"></bean>
</property>
</bean>
</beans>
注意看以上代码:<beanid=”String_struts”…/>对应struts.xml中的具体处理类(包名加类名)。<property name=”us”…/>指定action中的”us”(也就是为action中的us注入)。用什么注入呢?用的就是<property<bean class=”…”/> /> 是<bean>中class的类去注入。
- Spring -- spring整合struts2
- Spring:Spring整合Struts2
- 【Spring】Spring整合Struts2
- EJB3,Spring,Struts2整合
- struts2+hibernate+spring整合
- Struts2 与 Spring 整合
- struts2 spring hibernate 整合
- Spring struts2 hibernate 整合
- struts2整合spring步骤
- spring/struts2整合
- spring 整合struts2
- spring + struts2 整合
- Struts2与Spring整合
- Struts2和Spring整合
- struts2+spring+hibernate整合
- Struts2+Spring整合
- struts2 spring整合注意事项。
- Struts2+Spring整合
- C++学习写在前面
- Hadoop-2.7.2伪分布式集群搭建
- Spring MVC 3.x 消息转换器
- 关于解决/lib/ld-linux.so.2: bad ELF interpreter:
- swift基础判断网络连接
- Struts2整合Spring
- Apache安装
- Android 5.0学习之动画
- Win10 右键菜单添加文本编辑器的菜单项
- 确认(confirm 消息对话框)
- 关于http keep-alive与tcp keep-alive
- MySQL.zip安装及初始化
- Eclipse下NDK开发
- Verify Preorder Serialization of a Binary Tree