`

Struts使用全注解,配置拦截器(Interceptor)和注解配置Json(struts-json插件)

阅读更多

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...

3
1
分享到:
评论
2 楼 meigesir 2014-10-15  
sbwfgihc 写道
struts2.2.1加入了json-plugin也没有org.apache.struts2.json.JSONValidationInterceptor这个类啊,楼主用的哪个版本

用错Json插件了吧
1 楼 sbwfgihc 2014-10-14  
struts2.2.1加入了json-plugin也没有org.apache.struts2.json.JSONValidationInterceptor这个类啊,楼主用的哪个版本

相关推荐

    Struts2注解配置教程

    本文档是对Struts2注解配置教程的知识点概述,详细介绍了Struts2中注解配置的使用方法和优势,帮助开发者掌握如何通过Java注解简化和优化Struts2框架的配置过程。通过零配置概念,减少XML配置的复杂度,使得代码更加...

    struts2所需的包和Struts2_json所需包

    Struts2提供了丰富的特性,如拦截器、插件架构、强大的标签库等,使得开发者能更方便地处理HTTP请求和响应。而Struts2与JSON的集成则进一步增强了其功能,使得数据交换更为简洁,特别是在AJAX和移动应用中。 在标题...

    struts-2.0.11.2-lib

    - 使用`struts.xml`或`struts-default.xml`等配置文件来配置Action、结果页面和拦截器栈。 6. **安全性**: - Struts2.0.11.2版本在安全方面已经进行了多次优化,但依然需要注意其漏洞,例如著名的OGNL注入漏洞,...

    Struts2-JSON-Example

    在Struts2框架中,通过配置和插件,我们可以让Action类返回JSON响应,从而与前端AJAX请求进行交互。 首先,为了使Struts2支持JSON响应,我们需要在项目中添加Struts2的JSON插件。这个插件通常包含在Struts2的核心库...

    struts-2.3.34 全英文参考文档

    Struts 2是Java平台上的一个开源MVC框架...通过阅读"struts-2.3.34 全英文参考文档",开发者可以深入理解Struts 2的工作原理,掌握其配置技巧,利用插件和拦截器提高开发效率,从而构建出高效、安全、可扩展的Web应用。

    struts-2.3.31-all.zip

    这些拦截器可以通过配置文件或注解灵活组合使用。 3. **Tiles模板**:Struts2支持Tiles框架,用于创建复杂的布局和可重用的页面片段。这使得页面结构更易于管理和维护。 4. **Plug-in插件系统**:Struts2拥有强大...

    struts-2.3.16.3-docs.zip

    2. **拦截器(Interceptor)**:拦截器是Struts 2的一个强大功能,它们可以添加到Action调用链中,用于执行预处理和后处理任务,如日志记录、权限验证等。2.3.16.3版本可能包含对拦截器优化的改进。 3. **配置灵活...

    Struts2拦截器源码

    Struts2中的拦截器可以通过XML配置文件或注解进行声明。例如,`struts-default.xml`中包含了默认的拦截器栈,如`params`拦截器用于处理请求参数,`exception`拦截器用于处理异常,`validation`拦截器进行数据校验。 ...

    struts-2.3.16-all

    通过学习和使用`struts-2.3.16-all`,开发者可以掌握Struts 2的MVC设计模式、拦截器机制、配置方式、以及与其他框架的集成技巧,从而更好地构建高效、安全的Java Web应用。同时,了解每个版本的更新内容和改进,有助...

    struts-2.3.16.1-all

    3. **配置Action**:在struts.xml文件中定义Action及其关联的视图和拦截器。 4. **编写视图**:根据结果类型创建对应的JSP或Freemarker页面。 5. **运行与测试**:运行应用,通过HTTP请求触发Action,观察和调试...

    struts2使用json

    - `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 ...

    struts-2.3.15.1.zip

    5. **配置文件解析**:struts-default.xml和struts-plugin.xml等配置文件用于初始化Struts 2框架,定义全局设置和插件配置。开发者可以根据项目需求自定义struts.xml配置文件,指定Action、Result和Interceptor的...

    struts-2.1.6_jar包(全)

    在使用Struts 2.1.6时,需要了解其配置文件(struts.xml或struts-default.xml),Action类的设计,以及结果类型和拦截器的使用。此外,Struts 2的注解功能和约定优于配置(Convention over Configuration)原则也是...

    struts-2.1.8-all-src.zip

    2. **配置灵活性**:Struts2允许通过XML或者注解进行配置,提供了一种灵活的方式来配置Action、结果、拦截器等。 3. **拦截器**:拦截器是Struts2的一大特色,它实现了AOP(面向切面编程),可以插入到Action调用的...

    struts-2.1.8.1最新最全jar包

    3. **Plug-ins**:Struts 2支持多种插件,比如 strut2-convention-plugin、struts2-json-plugin、struts2-dojo-plugin 等,这些插件扩展了框架的功能,例如自动化约定优于配置、JSON响应和Dojo工具集支持。...

    struts-2.3.32-src源码包

    4. **Interceptor**(拦截器):拦截器是Struts2的一大特色,它允许在Action调用前后插入自定义逻辑。例如,`ValidationInterceptor`用于验证表单数据,`ExceptionMappingInterceptor`处理异常。开发者可以通过`...

    struts2的配置信息

    6. `struts2-json-plugin.jar`:JSON插件,支持JSON序列化和反序列化,方便前后端交互。 理解了lib目录后,我们转向“struts2的基本配置”。Struts2的配置主要分为两部分:XML配置和注解配置。在典型的`struts-...

    struts-2.3.14-all

    2. **拦截器(Interceptor)**:拦截器是Struts 2中一个重要的概念,它们可以插在Action调用之前或之后,执行一些预处理或后处理操作,如日志记录、权限检查等。2.3.14版本可能包含了更多的内置拦截器,同时优化了...

    struts2包及配置

    Struts2的核心组件包括Action、Result、Interceptor(拦截器)等。Action是业务逻辑的执行者,Result负责展示结果页面,Interceptor则在Action调用前后执行预处理和后处理,增强了框架的扩展性。 1. **Action**: ...

    struts-2.3.20.1-src.zip

    - `struts-annotations`:提供了注解支持,使得开发者可以通过注解配置Action和拦截器。 - `struts-ognl`:包含OGNL的相关类,用于对象属性的访问和表达式解析。 - `struts-tags`:包含JSP标签库的源代码,如s:form...

Global site tag (gtag.js) - Google Analytics