- 浏览: 516945 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
一、 在 web.xml 配置 struts.xml
struts-default.xml,struts-plugin.xml 系统默认必需加上,后面写自己的struts.xml
位置 是从 WEB-INF 的 classes 开始计算
struts.xml 的路径为 WEB-INF/struts-configs/struts.xml (沿用struts1的习惯)
struts-default.xml文件位置 不用动 , 不需要 放在WEB-INF/struts-configs/中
更改web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,../struts-configs/struts.xml
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
普通 Struts 2 配置 web.xml
<?xml version="1.0" encoding="GBK"?> <!-- 配置Web应用配置文件的根元素,并指定配置文件的Schema信息 --> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!-- 定义Struts 2的核心控制器:FilterDispatcher --> <filter> <!-- 定义核心Filter的名字 --> <filter-name>struts2</filter-name> <!-- 定义核心Filter的实现类 --> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <!-- FilterDispatcher用来初始化Struts 2并且处理所有的HTTP请求 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
2. Struts 2.2.1 配置 web.xml 之类
与 2.1 略有不同
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <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> </web-app>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="js" extends="struts-default" namespace="/09"> <action name="ifAction" class="js.IfAction"> <result name="success">/09/s-if.jsp</result> </action> </package> </struts>
<s:a action="09/ifAction">s-if.jsp</s:a>
二、 struts2.2.1 报错
1. 缺少
javassist-3.7.ga.jar 包
如有以下报错:
2010/12/15 11:25:37 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error 致命的: Dispatcher initialization failed java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(ContainerImpl.java:295) at com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.construct(ContainerImpl.java:431) at com.opensymphony.xwork2.inject.ContainerBuilder$5.create(ContainerBuilder.java:207) at com.opensymphony.xwork2.inject.Scope$2$1.create(Scope.java:51)
Struts2最新版本2.2.1中所设计的核心库文件,包括以下内容:
struts2-core-2.2.1.jar
:Struts2框架的核心类库。
xwork-core-2.2.1.jar
:Xwork核心类库,Struts2在其上构建。
ognl-3.0.jar
:对象图导航语言(Object Graph Navigation Language),它是一种功能强大的表达式语言(Expression Language,简称为EL),通
过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
freemarker-2.3.16.jar
:Struts 2的UI标签的模板使用FreeMarker编写。
commons-fileupload-1.2.1.jar
:文件上传组件,2.1.6版本后必须加入此文件。
commons-io-1.3.2.jar
:IO输入输出流组件,主要完成文件的读写功能。
javassist-3.7.ga.jar
:Javassist是一个开源的分析、编辑和创建Java字节码的类库。
-------------------------------------------------------------------
commons-logging-1.0.4.jar
:ASF出品的日志包,Struts2框架使用这个日志包来支持Log4J和JDK 1.4版本之上的日志记录
注意: javassist-3.7.ga.jar struts2源码包里没有,可以去下载。。也可以ognl-3.0.jar 替换成ognl-2.6.11.jar,这 样就不必要加javassist-3.7.ga.jar
● 少了javassist-3.7.ga.jar ,可以在struts2-2.2.1-all.zip 包中找到
方法: 打开 struts2-2.2.1-all\struts-2.2.1\apps\ 目录下随便一个.war 文件 用解压软件,然后在 WEB-INF/lib 下找到 javassist-3.7.ga.jar
2. 没有使用 spring 去掉一些包
2010/12/15 11:44:13 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error 致命的: Dispatcher initialization failed java.lang.NullPointerException at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:220) at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyResultType(XmlConfigurationProvider.java:530) at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addResultTypes(XmlConfigurationProvider.java:501)
原因两个:
1.
lib
中多导入包的大原因:去掉 struts2-spring-plugin-2.1.8
包即可,因为没有用到spring
。
2.
还有的原因是用spring了,却没加监听器,在 web.xml
里面加上
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
3. struts 2.2.1 基本功能使用的包
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
freemarker-2.3.16.jar
javassist-3.7.ga.jar
ognl-3.0.jar
struts2-core-2.2.1.jar
xwork-core-2.2.1.jar
三、 struts 2 中 jsp 提交 list ,map 到 Action
详情请看 : Struts 2 的标签库(二) 中的 3.2 iterator 标签
<s:form action="iteratorAction.action" method="post"> <h3>action の List</h3> <s:iterator value="list" id="aList" status="st"> index: <s:property value="#st.index"/> value: <s:property value="aList"/> <br/> <!-- 下面是把 list 传回 Action --> <s:hidden name="list[%{#st.index}]" value="%{list[#st.index]}"></s:hidden> </s:iterator> <br/><br/> <h3>action の Map</h3> <s:iterator value="map" id="aMap" status="st"> index: <s:property value="#st.index"/> key: <s:property value="key"/> value: <s:property value="value"/> <br/> <!-- 下面是把 map 传回 Action --> <input type="hidden" name="map['<s:property value="key"/>']" value="<s:property value="value"/>"></input> </s:iterator> <br/><br/> <input type="submit" value="submit"></input> </s:form>
下面这段是关键:
list
1.
<s:iterator value="list" id="aList" status="st">
<!-- 下面是把 list 传回 Action -->
<s:hidden name="list[%{#st.index}]" value="%{list[#st.index]}"></s:hidden>
</s:iterator>
<br/><br/>
2.
<input type="hidden" name="list2[<s:property value="#st.index" />]" value="<s:property value="tl2"/>"></input>
map
<s:iterator value="map" id="aMap" status="st">
<!-- 下面是把 map 传回 Action -->
<input type="hidden" name="map['<s:property value="key"/>']" value="<s:property value="value"/>"></input>
</s:iterator>
package js; import java.util.*; import com.opensymphony.xwork2.ActionSupport; public class IteratorAction extends ActionSupport { private List<String> list ; private Map<String,String> map ; @Override public String execute() throws Exception { if (list == null || list.isEmpty()) { System.out.println("list is null !"); list = new ArrayList<String>(); list.add("あ"); list.add("い"); list.add("う"); list.add("え"); list.add("お"); } else { System.out.println("list is not null !"); System.out.println(list.toString()); } if (map == null || map.isEmpty()) { System.out.println("map is null !"); map = new HashMap<String, String>(); map.put("a", "か"); map.put("b", "き"); map.put("c", "く"); map.put("d", "け"); map.put("e", "こ"); } else { System.out.println("map is not null !"); System.out.println(map.toString()); } return SUCCESS; } public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } }
<package name="js" extends="struts-default" namespace="/09"> <action name="iteratorAction" class="js.IteratorAction"> <result name="success">/09/s-iterator.jsp</result> </action> </package>
四、 ActionContext、ValueStack、Stack Context
看源码你就会发现,ActionContext这个类中有一个变量:
Map context,
实际上调用 ActionContext的put,get 就相当于调用context的相就方法,你在页面上通过获取的就相当于调用 context.get("request"),context.get("attr"),而你通过ac.put("list", List)也只能通过ac.get("list")获得。
而ActionContext.getValueStack()相当于调用context.get(OgnlValueStack.VALUE_STACK)所获取的与通过ActionContext.get("request")获取的是不一样的东西
=======================================================================================
ActionContext
一次Action调用都会创建一个ActionContext
调用:ActionContext context = ActionContext.getContext()
ValueStack
由OGNL框架实现
可以把它简单的看作一个List
Stack Object:放入stack中的对象,一般是action。
Stack Context(map):stack上下文,它包含一些列对象,包括request/session/attr/application map等。
EL:存取对象的任意属性,调用对象的方法,遍历整个对象结构图
=======================================================================================
ActionContext是Action上下文
可以得到request session application
ValueStack是值栈 存放表单中的值
Stack Context 栈上下文 也是用来存值的
=======================================================================================
你可以通过在页面中添加<s:debug/>标签察看ValueStack 和Stack Context中有哪些具体的内容。ValueStack里面的东西先入后出,很多没有id的元素使用完之后就退栈了。
StackContext提供了一些命名对象,这些命名对象与根对象无关,访问这些对象需要使用#前缀指名。比如这里面存在:parameters对象,request对象, session对象,application对象等等。
=======================================================================================
value stack contents ognl 值栈
stack context action上下文
action上下文是一个map对象,通过#key获得对象内容,在#request又可以得到值栈,值栈里存储的是一些action里的变量
于是获得action变量内容有三种方式
1,从值栈中直接获得
<s:property value="type"/>
${type }
2,从action上下文获得值栈的属性
<s:property value="#request['type']"/>或者<s:property value="#request.type"/>
=======================================================================================
1) ValueStack 可以用 request.getAttribute("struts.valueStack") 取得的一个 com.opensymphony.xwork2.util.OgnlValueStack 实例,它实现为一个栈,有 peek()、pop()、push(obj) 方法。
2) Stack Context 是在前面的 ValueStack 的上下中的一个 java.util.Stack 实例:
//stack 为 ValueStack 实例,COMPONENT_STACK="__component_stack"
// org.apache.struts2.components.Component.getComponentStack() 中的代码
Stack componentStack = (Stack) stack.getContext().get(COMPONENT_STACK);
五、 struts2 的 ONGL 标签取值
经常搞不清楚 %
, #
怎么用。
1. 先解决最基础的温饱问题:如何把
action
中的值带到页面展示出来
(先定义一个action ,有个username 字段,假设value="song" 想传递到页面上)
public class Login extends ActionSupport { private String username; public String execute() throws Exception { return INPUT; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
下面是页面上显示username的一些尝试:
=========直接把值显示出来
。。。========
1.s:property
标签
<s:property value="username"/>
2.$ 符号表达式
${username}
上面的两种方式都是可以显示"song"出来的,如果只用来显示,推荐${username} ,简单明了。不过${}
不可以放在struts2
自带的<s:xxx >
标签中混用,会报不支持变量表达式异常
。
========== 用#
试一下
。。。==============
1.#
表达式
#username
失败,页面输出 "#username"
2.s:property
标签1:
<s:property value="#username"/>
失败,页面无输出
3.s:property
标签2:
<s:property value="#request.username"/>
成功,页面输出"song"(这种属性放进了request中)
4.s:property
标签3:
<s:property value="#session.username"/>
失败,页面无输出(没有放到session中)
========= 用%
试一下
。。。==========
1.%
表达式
%{username}
失败,页面输出"%{username}"
2.%
表达式
%{'username'}
失败,页面输出 "%{'username'}"
3.s:property
标签4:
<s:property value="%{username}"/>
成功,页面输出"song"
4.s:property
标签 Error4:
<s:property value="%{'username'}"/>
失败,页面输出"username"
测试了一大把,最后总结出了4
种拿到值得办法:
<s:property value="username"/>
${username}
<s:property value="#request.username"/> (#session. #application.类似)
<s:property value="%{username}"/>
六、 struts.xml 中的 include 标签和package 标签以及 action 标签的 name 属性
struts.xml中的<include/>标签
当系统变大后,可能会导致struts.xml
内容非常多,这时我们就可以采用模块化
的方式
将不同的配置文件分散在不同的配置里面,然后由struts.xml将它们统一的加载进来
比如struts_1.xml
、struts_2.xml
、struts_3.xml
三个文件,分别是针对不同模块的配置
最后就可以由struts.xml统一将其整合起来,整合的方式就是把这它们包含进来即可
<include file="struts_1.xml"/><include file="struts_2.xml"/><include file="struts_3.xml"/>
在struts_1.xml
或者struts_2.xml
中的配置方式与struts.xml
中的配置方式是一模一样
的
即它们顶部都必须有
XML声明
和DTD
,它们DTD都是相同的,接下来是<struts/>根元素
即不能认为struts_1.xml
是被包含文件,便将顶部XML声明和DTD省略掉,这是不可以的
最后由struts.xml统一引入,于是系统加载,便将struts_1.xml及struts_2.xml等的配置都加载到内存中
这就相当于进行模块化的配置。对于大中型的系统来说,是不可避免的会使用模块化的配置方式的
struts.xml中<package name="#"/>的命名
其中struts.xml中<package/>的name
可随意命名,不会影响到其它的任何东西
它的name属性的作用仅仅是用来标识<package/>
的,以便另外的<package/>可以继承
它
<package name="struts-default" abstract="true">
在struts-default.xml的第73行配置<package/>时,声明了一个abstract="true"
属性
我们发现这个包中声明了结果类型、拦截器等等,却唯独没有声明<action/>
的配置
但是在我们自己定义的struts.xml
中有若干个<action/>的配置
因此abstract="true"
表示当前包是抽象包,所以当前包中不允许出现<action/>
的配置
抽象包的作用极类似于Java抽象类。自己不能实例化,只能被继承,然后由子类实现它的若干方法,最后由子类实例化
所以struts-default包中不能包含任何<action/>定义,具体的定义则是由其子包来定义的
<package name="struts2" extends="struts-default">中的extends的含义
Struts2中可以用包机制
区分不同的Action,而将功能相似
的Action放到一个package
中
类似于Java中包的机制,不同的是Struts2的包支持多继承
,如下所示
<package name="struts2" extends="struts-default, jfreechart-default">
并且Struts2的package之间,又是可以实现继承
关系的
继承之后就可以把被继承的package中的所有东西都拿来使用了
所以它就相当于将<package name="struts-default"/>
的全部东西都继承过来了
于是才可以直接把struts-default.xml
包中的所有结果类型、拦截器等都拿来供我们使用
如果我们的包不继承Struts2提供的struts-default包,那么我们很多工作都会变得无法完成
在Struts2应用启动时会自动读取struts-default.xml
,将该文件定义的所有东西加载到内存中
接下来再加载当前应用的struts.xml
文件,然后将内存中struts-default.xml的信息读取过来
然后才会加入到我们当前的应用中,并且在default.properties
的第180行和181行有如下代码
### A list of configuration files automatically loaded by Struts
struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml
翻译
:被Struts自动加载的一个配置文件列表
应用启动时加载顺序是:先加载struts-default.xml
,次之struts-plugin.xml
,最次struts.xml
因此:后者中的配置信息就可以覆盖掉前者中的配置信息
<package/>的namespace属性
若未配置<package/>标签的namespace属性,则相当于namespace=""
,表示当前package位于默认命名空间里
命名空间要以斜线开头
,假设包的namespace="/hello"
,且表单action="login"
,然后在页面中点击提交
按钮
这时在页面中将显示The requested resource (/struts2/login) is not available
这时可将表单改为action="/hello/login"
或在表单中使用namespace和action属性分开来写
即<form action="login" namespace="/hello">
,注意此时若写成login.action则会出错
修改完表单action后,再次提交时显示的却是The requested resource (/struts2/hello/login) is not available
这是因为根本就不存在这个路径,正确的路径应该是/struts2/hello/login.action
所以配置包的namespace后,须手工添加action后缀,即action="/hello/login.action"
再次提交则正常显示,且浏览器显示的是http://127.0.0.1:8088/struts2/hello/login.action
另外
:假设发送action="/test/login.action"
请求,但struts.xml
中根本就没有
命名空间为test
的包
当Struts2发现该命名空间不存在时,它会到默认命名空间
下寻找login的<action/>
的信息
假设发送action="/hello/login.action"
请求,当/hello
的namespace下不存在login.action时
Struts2会尝试到默认的命名空间下去寻找有没有名字叫做login的<action/>信息
若默认命名空间下不存在名为login的<action/>的信息,则会报告资源找不到的错误
Struts2还支持根命名空间【"/"】
当直接请求contextPath
下的资源时,它会先到根命名空间
下寻找匹配的Action
例如请求http://127.0.0.1:8088/project/BB.action
时,Strtus2会首先到"/"
命名空间下去找这个Action
服务器的根
是http://127.0.0.1:8088/
网 站的根
是http://127.0.0.1:8088/struts2_demo/
假设JSP中写成<a href=“/login.jsp”></a>
,则实际指向
的是http://127.0.0.1:8088/login.jsp
即JSP中的根
指的是服务器的根
。而命名空间的斜杠
代表网站的根
,也叫项目的根
或者应用的根
struts.xml中<action/>的name值的开头不允许加斜杠
这是由default.properties
的第109行属性决定,即struts.enable.SlashesInActionNames
默认为FALSE
比如说在struts.xml中,不指定<package/>的namespace属性,并写成<action name="hello/login">
再在表单中写成action="<%=request.getContextPath()%>/hello/login.action"
,此时仍可正常访问
但要注意:此时不能写成<action name="/hello/login"/>
,否则在运行时仍会报告404错误
总之直接使用命名空间就是了,不建议修改struts.enable.SlashesInActionNames
属性,保持默认配置即可
七、 Spring整合Struts2的两种方案(struts2,spring整合)
一、
需要的 JAR
文件为: Spring
和 Struts2
框架本身需要的 JAR
文件以及他们所依赖的 JAR
文件,比如 commons-logging.jar
等等,另外还需要 Struts2
发布包中的 struts2-spring-plugin-x.xx.jar
。
二、
在 web.xml
中增加 WebApplicationContext
的相应配置,以下两种配置方式本质是一样的。
1. Servlet 2.3
及以上版本可以使用监听器,相应配置如下:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
如果spring 配置文件被命名为applicationContext.xml ,并且放在WEB-INF 目录下,则不需要配置<context-param> ,因为ContextLoaderListener 默认在WEB-INF 目录下寻找名为applicationContext.xml 的文件。若存在多个Spring 配置文件,则在<param-value> 中依次列出,之间以逗号隔开。
2.
Servlet 2.3
以下版本由于不支持<listener>,需要配置<servlet>,格式如下:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <servlet> <servlet-name>contextLoaderServlet</servlet-name> <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
如果spring 配置文件被命名为applicationContext.xml ,并且放在WEB-INF 目录下,则不需要配置<context-param> ,因为ContextLoaderListener 默认在WEB-INF 目录下寻找名为applicationContext.xml 的文件,或者是名字为contextConfigLocation 的ServletContext 参数所指定的文件。由于该Servlet 配置只是为了在容器启动时能启动ContextLoaderServlet 使其工作,而不需要引用该Servlet ,所以不需要配置<servlet-mapping> 。
三、
在 web.xml
中完成加载 WebApplicationContext
之后,接下来就可以做到 Spring
和 Struts2
的整合了。整合有两种方法,分别叙述如下:
1.
第一种实现方法:
1)
将 Struts 的业务逻辑控制器类配置在 Spring 的配置文件中,业务逻辑控制器中引用的业务类一并注入。注意,必须将业务逻辑控制器类配置为 scope=”prototype”!
示例如下:
<bean id=”LoginAction” class=”yaso.struts.action.LoginAction”> <property name=”loginDao” ref=”LoginDao”/> </bean>
2)
在 struts.xml 或者等效的 Struts2 配置文件中配置 Action 时,指定 <action> 的 class 属性为 Spring 配置文件中相应 bean 的 id 或者 name 值。示例如下:
<action name=”LoginAction” class=”LoginAction”> <result name=”success”>/index.jsp</result> </action>
2.
第二种实现方法:
1)
业务类在 Spring 配置文件中配置,业务逻辑控制器类不需要配置,Struts2 的 Action 像没有整合 Spring 之前一样配置,<action> 的 class 属性指定业务逻辑控制器类的全限定名。
2)
业务逻辑控制器类(action)
中引用的业务类
不需要自己去初始化,Struts2 的 Spring 插件会使用 bean 的自动装配将业务类注入进来
,其实业务逻辑控制器也不是Struts2 创建的,而是 Struts2 的 Spring 插件创建的
。默认情况下,插件使用 by name 的方式装配,可以通过增加 Struts2 常量来修改匹配方式:设置方式为:struts.objectFactory.spring.autoWire = typeName,可选的装配参数如下:
a)
name:等价于Spring配置中的autowire=”byName”,这是缺省值。
b)
type:等价于Spring配置中的autowire=”byType”。
c)
auto:等价于Spring配置中的autowire=”autodetect”。
d)
constructor:等价于Spring配置中的autowire=” constructor”。
四、
如果原先在Struts2中使用了多个object factory,则需要通过Struts2常量显式指定object factory,方式如下:struts.objectFactory = spring;如果没有使用多个object factory,这一步可以省略。
五、
可以通过设增加Struts2常量来指定是否使用Spring自身的类缓存机制。可以设定的值为true或false,默认为true。设置方式为:struts.objectFactory.spring.useClassCache = false。
六、
至此,完成了两种方式的整合。比较这两种整合方式,其本质是一样的。不同之处在于,使用第二种自动装配的方式时,由于没有在Spring中配
在web.xml
里面设置
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
----------struts2的action请求设置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/application.xml,/WEB-INF/spring/applicationDao.xml
,/WEB-INF/spring/applicationAction.xml,/WEB-INF/spring/applicationService.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
配置spring管理相关组件。。
例如:
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>unkou</display-name> <filter> <filter-name>loginCheck</filter-name> <filter-class> jp.or.nhk.ssp.common.interceptor.LoginCheckInteceptor </filter-class> </filter> <filter-mapping> <filter-name>loginCheck</filter-name> <url-pattern>/manual/*</url-pattern> <url-pattern>/guide/*</url-pattern> </filter-mapping> <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.util.Log4jConfigListener </listener-class> </listener> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring-config/spring-context.xml </param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>file:/opt/ssp/sspu/conf/log4j.xml</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <context-param> <param-name>log4jExposeWebAppRoot</param-name> <param-value>false</param-value> </context-param> </web-app>
发表评论
文章已被作者锁定,不允许评论。
-
Struts1 与 Struts2 的12点区别
2011-11-16 11:14 7381) 在Action实现类方面 ... -
Struts 2 的 Ajax 支持(四)
2011-03-14 16:21 17365.4 tabbedpanel 标签 ... -
Struts 2 的 Ajax 支持(三)
2011-02-11 13:18 24265.2 submit 和 a 标签 ... -
Struts 2 的 Ajax 支持(二)
2011-01-27 14:08 2391四、 基于 Dojo 的 pub-sub 事件模型 ... -
Struts 2 的 Ajax 支持(一)
2011-01-20 14:55 2482一、 Ajax 概述 ... -
Struts 2 的拦截器(三)
2011-01-20 13:09 2904六、 拦截器示例 : 实现权限控制 权限检 ... -
Struts 2 的拦截器(二)
2011-01-12 16:38 1624四、 开发自己的拦截器 Struts 2 ... -
Struts 2 的拦截器(一)
2010-12-31 16:53 2015一、 理解拦截器 ... -
Struts 2 的标签库(五)
2010-12-29 11:35 11356.8 select 标签 以下代码 都是基 ... -
Struts 2 的标签库(四)
2010-12-24 16:21 1638六、 表单标签 表单标签,分为 2 种 : f ... -
Struts 2 的标签库(三)
2010-12-20 14:15 1966四、 数据标签 数据标签主要 ... -
Struts 2 的标签库(二)
2010-12-15 16:21 2026三、 控制标签 Str ... -
Struts 2 的标签库(一)
2010-12-13 13:47 1357一、 Struts 2 标签库概述 ... -
Struts 2 的国际化(二)
2010-12-09 13:25 2254二、 Struts 2 的国际化入门 ... -
Struts 2 的国际化(一)
2010-12-06 22:44 1301一、 程序国际化简 ... -
Struts2 上传和下载文件(三)
2010-12-03 14:58 1790三、 同时上传多个 ... -
Struts2 上传和下载文件(二)
2010-11-29 13:37 1977二、 Struts 2 的文件上传 ... -
Struts2 上传和下载文件(一)
2010-11-17 22:28 2075一、 文件上传的原理 1. 表单元 ... -
struts2 输入校验 (四)
2010-11-15 22:43 1209六、 手动完成输入校验 对于一些特殊的检验 ... -
struts2 输入校验 (三)
2010-11-08 13:25 1714五、 内建校验器 S ...
相关推荐
在配置Struts2时,通常会使用一个名为`struts.xml`的配置文件,该文件定义了应用程序的行为和组件。为了在开发环境中获得更好的代码辅助和提示,我们需要使IDE(例如Eclipse)理解`struts.xml`文件的结构,这通常...
在"28_Struts2ImgCode"这个文件名中,虽然没有实际的文件内容,但我们可以推测它可能包含了与Struts2和图像验证码相关的代码示例。在HTTPS环境中,如果涉及到图片验证码,需要注意的是,验证码图片也需要通过HTTPS...
`<package>`节点是Struts2配置文件中的一个非常重要的组成部分,它用于组织相关的配置项,如Action的定义、拦截器的配置以及结果类型的设定等。`<package>`节点可以包含以下子节点: 1. **`<action>`** - 定义一个...
### Struts2配置文件介绍 #### 一、Struts2的核心配置文件 在Struts2框架中,有多个重要的配置文件用于控制应用的行为与结构,其中最核心的是`struts.xml`文件。此外还包括`web.xml`、`struts.properties`、`...
在Struts2中,配置文件主要分为两个部分:`struts-default.xml`和用户自定义的配置文件,如`struts.xml`或`struts-config.xml`。这些XML文件定义了Action、结果类型、拦截器和包等元素,从而控制应用程序的行为。 *...
在描述的问题中,开发者尝试将`struts.xml`文件移动到项目中的不同位置,但发现即使指定了新的路径,Struts2也无法正确加载该配置文件。这是因为Struts2框架在启动时,并不直接根据应用程序的根目录来寻找配置文件,...
总结,Struts2配置涉及多个方面,包括核心库的引入、配置文件的编写、Action、Result、Interceptor的定义以及与Spring的整合等。通过合理配置,可以构建出高效、灵活的Web应用。在实际项目中,应根据需求调整和优化...
了解Struts2配置文件的加载顺序对于优化应用性能和解决配置问题至关重要。 Struts2的配置主要分布在以下几个文件中: 1. **struts-default.xml**:这是Struts2的核心配置文件,位于`struts2-core.jar`库的`/org/...
- **Struts配置文件**:是Struts2的核心配置文件,通常位于`/WEB-INF/struts-config.xml`。 - 配置文件中定义了框架的主要行为,如Action映射、拦截器、结果类型等。 - 通过`struts-config.xml`文件,可以灵活地控制...
配置文件在Struts2中起着至关重要的作用,它定义了框架的行为、动作映射、拦截器和其他关键设置。以下是Struts2配置文件的一些核心元素和属性的详细说明: 1. **配置文件结构**: Struts2的配置通常存储在一个名为...
在配置Struts2与Spring的整合时,我们需要`spring-context.jar`、`spring-webmvc-struts.jar`等,它们负责管理Bean、依赖注入以及与Struts2的集成。 5. **Hibernate ORM**:如果项目中使用Hibernate作为持久层框架...
配置SSH框架时关于Struts2的配置文件
`struts.xml` 文件是Struts2的核心配置文件之一,主要负责管理和定义应用程序中的Action映射以及相关的Result定义。具体来说,该文件包括以下几个关键部分: 1. **Action 映射**: - 指定每个Action的名称、执行的...
### Struts2 配置文件详解 #### 一、引言 在Struts2框架的应用开发过程中,配置文件起到了至关重要的作用。Struts2主要依赖于两种基于XML的配置文件:`web.xml` 和 `struts-config.xml`(通常命名为 `struts.xml`)...
在开始使用Struts2之前,我们需要先进行环境配置。以下将详细介绍Struts2的初始使用环境配置步骤。 首先,确保你已经安装了Java Development Kit (JDK)。JDK是开发Java应用的基础,你需要至少JDK 1.6或以上版本来...
本文将详细介绍Struts2.5.2的配置过程以及可能遇到的问题和解决方案。 首先,配置Struts2.5.2需要从官方站点下载所需的jar包。在http://struts.apache.org/download.cgi#struts252上,你可以找到两个选项:1是指...
在没有使用任何集成开发环境的情况下配置Struts2,可能会遇到各种问题,尤其是在配置过程中对于细节的把握至关重要。以下是配置过程中需要注意的一些关键点: 1. **路径与大小写敏感性**:无论是Tomcat的地址路径...