首先是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>*.action</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
我用的struts2的版本是2.3.4.1,所以这里的<filter>应该是StrutsPrepareAndExecuteFilter,不再是旧的DispatcherFilter
另外这里的<filter-mapping>,我配的不是/*,而是*.action,目的是不把特殊路径的请求,交给struts2处理,比如下面的/webservice/*,就不要经过struts2
下面是struts.xml的配置
<package name="bookManage" extends="json-default" namespace="/book">
<interceptors>
<interceptor name="loginInterceptor" class="loginInterceptor" />
<interceptor-stack name="secureStack">
<interceptor-ref name="loginInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="secureStack" />
<global-results>
<result name="login" type="redirectAction">../login.action</result>
</global-results>
<action name="list" class="bookAction" method="list">
<result name="success">../jsp/bookManage/bookList.jsp</result>
</action>
<action name="delete" class="bookAction" method="delete">
<result name="success" type="redirectAction">list.action</result>
</action>
<action name="originAjax" class="bookAction" method="originAjax" />
<action name="pluginAjax" class="bookAction" method="pluginAjax">
<result type="json">
<param name="excludeNullProperties">true</param>
</result>
</action>
</package>
以上的配置有简化,分别针对4种不同的场景:
第一种,Action处理后跳转到jsp页面
<action name="list" class="bookAction" method="list">
<result name="success">../jsp/bookManage/bookList.jsp</result>
</action>
这里默认的resultType是dispatcher
对应的Action写法
public String list() {
books = bookService.getAllBooks();
return SUCCESS;
}
第二种,Action处理后,流转到另外一个Action,相当于Servlet规范中的redirect
<action name="delete" class="bookAction" method="delete">
<result name="success" type="redirectAction">list.action</result>
</action>
这里的resultType是redirectAction
对应的Action写法
public String delete() {
bookService.deleteBookById(id);
return SUCCESS;
}
第三种,在Action中直接写响应,不流转
<action name="originAjax" class="bookAction" method="originAjax" />
这里就没有<result>元素
对应的Action写法
public void originAjax() throws IOException {
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter writer = response.getWriter();
writer.print("hello " + ajaxField);
writer.flush();
writer.close();
}
第四种,通过json插件,返回json字符串,不流转
<action name="pluginAjax" class="bookAction" method="pluginAjax">
<result type="json">
<param name="excludeNullProperties">true</param>
</result>
</action>
这里的resultType是json,这种方式本质上和第三种一样
对应的Action写法
public String pluginAjax() {
ajaxField = "hello " + ajaxField;
return SUCCESS;
}
另外,这里面配置了拦截器、拦截器栈、全局result,可以把这些东西提取到公共的package里,让其它的业务子package来extends
分享到:
相关推荐
Struts2提供了几种内置的方式用于显示验证错误信息: 1. **全局错误信息显示**:在页面的特定区域集中显示所有验证错误信息。 - **示例代码**: ```xml <s:fielderror cssStyle="color:red"></s:fielderror> ```...
通过实验,学员能够掌握Struts2中几个常用标签(如`<s:radio>`、`<s:select>`、`<s:token>`)的应用,并理解OGNL表达式的基本用法。这些知识点对于初学者来说至关重要,因为它们构成了Struts2应用开发的基础。 ####...
针对上述问题,通常有以下几种解决方法: ##### 方法1:统一添加`.servlet`后缀 - **具体操作**:在所有的Servlet请求URL后面添加`.servlet`后缀,例如将`/myServlet`改为`/myServlet.servlet`。 - **实现步骤**:...
Struts2提供了多种类型的Result,如dispatcher、redirect、chain等,每种类型都有其特定的应用场景。 - **dispatcher**:将请求转发到指定的JSP页面。 - **redirect**:发送HTTP重定向命令给客户端,使其重新发送一...
接下来,我们将深入探讨Struts2的几种数据校验方式: 1. **注解式校验**:在Action类的字段上直接使用Java Bean Validation提供的注解,如`@NotBlank`、`@Min`、`@Max`等。这种方式简单直观,适用于快速开发。例如...
Struts2-Scan-master.zip 是一个与Struts2安全扫描相关的压缩包,主要涉及的是针对Struts2框架的漏洞检测。Struts2是Java后端开发中广泛使用的一个MVC框架,由于其流行性,安全问题一直是开发者关注的重点。Python...
本文将针对Struts2中的中文乱码问题提供几种解决方案,包括在不同场景下的处理方法。 #### 解决方案概述 **方案一**:适用于前台通过URL传递中文参数的情况,主要利用`jQuery`对中文参数进行编码处理。 **方案二*...
`uploadify`与`Struts2`结合的多文件上传实例就是一个典型的解决方案,尤其针对跨浏览器兼容性问题,如在Firefox下的session问题。下面我们将深入探讨这两个技术以及它们如何协同工作。 `Uploadify`是一个基于...
本章节针对初学者可能会遇到的一些常见问题进行了汇总和解答,帮助读者更好地理解和运用Struts框架。 #### 十三、对象到XML转换:Struts中的Bean到XML转换 Struts框架提供了将Java Bean对象序列化为XML文件的功能。...
7. **拦截器**:Struts 2引入了拦截器(Interceptor)的概念,这是一种强大的增强功能,可以用于日志记录、权限验证、事务管理等多种场景。文档可能会详细介绍如何编写和配置拦截器。 8. **最佳实践和案例研究**:...
Struts框架提供了几种方法来防止表单的重复提交: - **Token机制**:通过在每个表单中添加一个隐藏字段来记录一个唯一的token,并在服务器端验证这个token的有效性。如果验证通过,则继续处理表单;否则拒绝处理。 ...
除了上述方式外,还有以下几种事务配置方法: 1. **基于AspectJ的事务配置**: - 使用AspectJ可以更加灵活地配置事务边界,适用于复杂的事务管理场景。 - 示例配置可能涉及`@Aspect`和`@Before`等注解。 2. **...
针对上述问题,我们可以采取以下几种方法来解决Struts框架下的乱码问题: 1. **设置正确的字符集**: - **在Tomcat配置文件中设置**:修改`server.xml`文件中的Connector节点,添加`URIEncoding="UTF-8"`属性,...
Struts框架采用的是**Model2**架构,这是一种特定于Web应用程序的MVC实现方式。在Model2架构中,控制器的角色更为突出,主要负责接收用户请求、调用模型中的业务逻辑并确定使用哪个视图来渲染响应。 ##### 2.2 ...
本项目“Hibernate+Struts分页”是针对基于Sqlserver2000数据库的应用程序设计的,它整合了两个流行的Java开发框架——Hibernate(持久层框架)和Struts(MVC框架),以实现高效且用户友好的数据浏览功能。...
Struts新闻管理系统学习更新版是一个基于Struts框架的典型应用,旨在帮助开发者理解和掌握如何使用Struts构建实际的Web应用程序,特别是针对新闻管理这样的业务场景。这个系统可能包含了新闻发布、编辑、删除以及...
根据乱码出现的位置与场景不同,可将其大致分为以下几种类型: 1. **页面显示中文乱码** 2. **传递参数中文乱码** 3. **国际化资源文件乱码** 下面我们将针对每一种情况,详细介绍具体的解决方案。 #### 三、页面...
在IT行业中,Web应用程序开发是不可或缺的一部分,而Struts和Hibernate是两个非常重要的框架,它们在构建企业级...通过实践,可以深入理解Struts和Hibernate的协同工作方式,以及如何针对特定环境(如WAP)进行优化。