Struts注解插件和struts-Json插件都默认继承struts-default包,导致无法同时使用注解,因为Action类只能有一个父包,配置其中一个都会把另一个给覆盖掉,嘿嘿,不用担心,只需要把struts-json插件中的默认配置都拷到struts.xml配置文件即可
配置步骤:
一、查看struts-json插件中的默认配置文件:struts-plugin.xml代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="json-default" extends="struts-default">
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<interceptors>
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
<interceptor name="jsonValidation" class="org.apache.struts2.json.JSONValidationInterceptor"/>
<!-- Sample JSON validation stack -->
<interceptor-stack name="jsonValidationWorkflowStack">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel</param>
</interceptor-ref>
<interceptor-ref name="jsonValidation"/>
<interceptor-ref name="workflow"/>
</interceptor-stack>
</interceptors>
</package>
</struts>
二、把上面配置信息全部都拷到struts.xml中
1>我的拦截器代码,一个简单的登录拦截器:LoginInterceptor.java
package com.kaishengit.web.interceptor;
import java.util.Map;
import java.util.Set;
import com.kaishengit.pojo.Employee;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.util.TextParseUtil;
public class LoginInterceptor extends AbstractInterceptor{
private static final long serialVersionUID = 1L;
private String excludeActionName;//剔除的拦截方法
private String sessionName;//用户名在session中存放的key值
@Override
public String intercept(ActionInvocation invocation) throws Exception {
String actionName = invocation.getProxy().getActionName();//获取当前访问的action名字
Set<String> set = TextParseUtil.commaDelimitedStringToSet(excludeActionName);
if(set.contains(actionName)){
return invocation.invoke();
}else{
Map<String, Object> session = invocation.getInvocationContext().getSession();
Employee employee = (Employee) session.get(sessionName);
if(employee == null){
return "login";//没有登录,跳转到登录页
}else{
return invocation.invoke();
}
}
}
//get set
public String getExcludeActionName() {
return excludeActionName;
}
public void setExcludeActionName(String excludeActionName) {
this.excludeActionName = excludeActionName;
}
public String getSessionName() {
return sessionName;
}
public void setSessionName(String sessionName) {
this.sessionName = sessionName;
}
}
2>配置struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<constant name="struts.convention.result.path" value="/WEB-INF/views"/>
<!--配置Struts-convention注解的默认父包 -->
<constant name="struts.convention.default.parent.package" value="myPackage"/>
<!--继承Struts-convention注解插件的xml -->
<package name="myPackage" extends="convention-default">
<!-- 把Struts-json插件默认配置文件代码全部有序copy过来 -->
<!-- json -->
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<interceptors>
<interceptor name="loginInterceptor" class="com.kaishengit.web.interceptor.LoginInterceptor"/>
<!-- json -->
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
<interceptor name="jsonValidation" class="org.apache.struts2.json.JSONValidationInterceptor"/>
<!-- 拦截器栈名采用Struts-json插件的栈名 -->
<interceptor-stack name="jsonValidationWorkflowStack">
<interceptor-ref name="loginInterceptor">
<param name="sessionName">employee</param>
<param name="excludeActionName">index,login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<!-- json -->
<interceptor-ref name="basicStack"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel</param>
</interceptor-ref>
<interceptor-ref name="jsonValidation"/>
<interceptor-ref name="workflow"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="jsonValidationWorkflowStack"/>
<global-results>
<result name="login" type="redirectAction">index.action</result>
</global-results>
</package>
</struts>
三、注解使用Json,一个例子
package com.kaishengit.action;
import java.util.ArrayList;
import java.util.List;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import com.kaishengit.pojo.Employee;
import com.kaishengit.pojo.FileType;
import com.kaishengit.pojo.Message;
import com.kaishengit.pojo.Project;
import com.kaishengit.service.EmployeeService;
public class CopyOfAjaxAction extends BaseAction{
private static final long serialVersionUID = 1L;
private EmployeeService employeeService;
private List<Employee> employeeList;
private Employee employee;
private String id;
private Message message;
private Project project;
private FileType fileType;
/**
* 显示employee
*/
//注解使用方式↓
@Action(value="employeeJson",results={@Result(name="success",params={"root","employeeList","noCache","true","enableGZIP","true","excludeNullProperties","true"},type="json")})
public String execute(){
employeeList = employeeService.findAll();
//定制json
List<Employee> jsonList = new ArrayList<Employee>();
for (Employee employee : employeeList) {
Employee jsonEmployee = new Employee();
jsonEmployee.setId(employee.getId());
jsonEmployee.setUsername(employee.getUsername());
jsonList.add(jsonEmployee);
}
employeeList = jsonList;
return "success";
}
//get set
public List<Employee> getEmployeeList() {
return employeeList;
}
public void setEmployeeList(List<Employee> employeeList) {
this.employeeList = employeeList;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public Message getMessage() {
return message;
}
public void setMessage(Message message) {
this.message = message;
}
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
public FileType getFileType() {
return fileType;
}
public void setFileType(FileType fileType) {
this.fileType = fileType;
}
@Autowired
public void setEmployeeService(EmployeeService employeeService) {
this.employeeService = employeeService;
}
}
end...
分享到:
相关推荐
本文档是对Struts2注解配置教程的知识点概述,详细介绍了Struts2中注解配置的使用方法和优势,帮助开发者掌握如何通过Java注解简化和优化Struts2框架的配置过程。通过零配置概念,减少XML配置的复杂度,使得代码更加...
Struts2提供了丰富的特性,如拦截器、插件架构、强大的标签库等,使得开发者能更方便地处理HTTP请求和响应。而Struts2与JSON的集成则进一步增强了其功能,使得数据交换更为简洁,特别是在AJAX和移动应用中。 在标题...
- 使用`struts.xml`或`struts-default.xml`等配置文件来配置Action、结果页面和拦截器栈。 6. **安全性**: - Struts2.0.11.2版本在安全方面已经进行了多次优化,但依然需要注意其漏洞,例如著名的OGNL注入漏洞,...
在Struts2框架中,通过配置和插件,我们可以让Action类返回JSON响应,从而与前端AJAX请求进行交互。 首先,为了使Struts2支持JSON响应,我们需要在项目中添加Struts2的JSON插件。这个插件通常包含在Struts2的核心库...
Struts 2是Java平台上的一个开源MVC框架...通过阅读"struts-2.3.34 全英文参考文档",开发者可以深入理解Struts 2的工作原理,掌握其配置技巧,利用插件和拦截器提高开发效率,从而构建出高效、安全、可扩展的Web应用。
这些拦截器可以通过配置文件或注解灵活组合使用。 3. **Tiles模板**:Struts2支持Tiles框架,用于创建复杂的布局和可重用的页面片段。这使得页面结构更易于管理和维护。 4. **Plug-in插件系统**:Struts2拥有强大...
2. **拦截器(Interceptor)**:拦截器是Struts 2的一个强大功能,它们可以添加到Action调用链中,用于执行预处理和后处理任务,如日志记录、权限验证等。2.3.16.3版本可能包含对拦截器优化的改进。 3. **配置灵活...
Struts2中的拦截器可以通过XML配置文件或注解进行声明。例如,`struts-default.xml`中包含了默认的拦截器栈,如`params`拦截器用于处理请求参数,`exception`拦截器用于处理异常,`validation`拦截器进行数据校验。 ...
通过学习和使用`struts-2.3.16-all`,开发者可以掌握Struts 2的MVC设计模式、拦截器机制、配置方式、以及与其他框架的集成技巧,从而更好地构建高效、安全的Java Web应用。同时,了解每个版本的更新内容和改进,有助...
3. **配置Action**:在struts.xml文件中定义Action及其关联的视图和拦截器。 4. **编写视图**:根据结果类型创建对应的JSP或Freemarker页面。 5. **运行与测试**:运行应用,通过HTTP请求触发Action,观察和调试...
- `struts2-json-plugin-2.1.8.1.jar`:这是Struts2的JSON插件,提供了处理JSON请求和响应的功能。 - `json-lib-2.1.jar`:JSON库,用于在Java中处理JSON对象。 - `commons-collections-3.2.1.jar`:Apache ...
5. **配置文件解析**:struts-default.xml和struts-plugin.xml等配置文件用于初始化Struts 2框架,定义全局设置和插件配置。开发者可以根据项目需求自定义struts.xml配置文件,指定Action、Result和Interceptor的...
在使用Struts 2.1.6时,需要了解其配置文件(struts.xml或struts-default.xml),Action类的设计,以及结果类型和拦截器的使用。此外,Struts 2的注解功能和约定优于配置(Convention over Configuration)原则也是...
2. **配置灵活性**:Struts2允许通过XML或者注解进行配置,提供了一种灵活的方式来配置Action、结果、拦截器等。 3. **拦截器**:拦截器是Struts2的一大特色,它实现了AOP(面向切面编程),可以插入到Action调用的...
3. **Plug-ins**:Struts 2支持多种插件,比如 strut2-convention-plugin、struts2-json-plugin、struts2-dojo-plugin 等,这些插件扩展了框架的功能,例如自动化约定优于配置、JSON响应和Dojo工具集支持。...
4. **Interceptor**(拦截器):拦截器是Struts2的一大特色,它允许在Action调用前后插入自定义逻辑。例如,`ValidationInterceptor`用于验证表单数据,`ExceptionMappingInterceptor`处理异常。开发者可以通过`...
6. `struts2-json-plugin.jar`:JSON插件,支持JSON序列化和反序列化,方便前后端交互。 理解了lib目录后,我们转向“struts2的基本配置”。Struts2的配置主要分为两部分:XML配置和注解配置。在典型的`struts-...
2. **拦截器(Interceptor)**:拦截器是Struts 2中一个重要的概念,它们可以插在Action调用之前或之后,执行一些预处理或后处理操作,如日志记录、权限检查等。2.3.14版本可能包含了更多的内置拦截器,同时优化了...
Struts2的核心组件包括Action、Result、Interceptor(拦截器)等。Action是业务逻辑的执行者,Result负责展示结果页面,Interceptor则在Action调用前后执行预处理和后处理,增强了框架的扩展性。 1. **Action**: ...
- `struts-annotations`:提供了注解支持,使得开发者可以通过注解配置Action和拦截器。 - `struts-ognl`:包含OGNL的相关类,用于对象属性的访问和表达式解析。 - `struts-tags`:包含JSP标签库的源代码,如s:form...