Struts2 Annotation 实践

1.登陆Action

/*
 * action也需要在这个路径(/anno)下
 * 如:@Action(value="/anno/login"
 * */
//可以这样(在WEB-INF下):@ResultPath("/WEB-INF/jsps")
@ParentPackage("annoInterceptorPackage")
@ResultPath("/anno")
@Results({
	@Result(name="error",location="anno_login_error.jsp",type="redirect"),
	@Result(name="success",location="anno_login_success.jsp",type="redirect")
})
@ExceptionMappings({
	@ExceptionMapping(result="error",exception="java.lang.Exception")
})
@InterceptorRefs({
	@InterceptorRef("namePrefixInterceptor"),
	@InterceptorRef("defaultStack")
})
public class LoginAction extends ActionSupport {
	private static final long serialVersionUID = 1L;
	private User user;
	private String injectMsg;

	@Actions({
		@Action(value="/anno/login",params={"injectMsg","hi,mtea"}
		/*
		//当配置了Action级的结果视图,则可以不需要方法级别的结果视图
		,results={
					@Result(name="error",location="/anno/anno_login_error.jsp",type="redirect"),
					@Result(name="success",location="/anno/anno_login_success.jsp",type="redirect")
				}
				
				
		 */
		/*
		//当配置了Action级的拦截器,则可以不需要方法级别的拦截器
		
		,interceptorRefs={
				@InterceptorRef("namePrefixInterceptor"),
				@InterceptorRef("defaultStack")
			}
		*/
		)
	})
	public String login() throws Exception {
		System.out.println("getInjextMsg():"+getInjectMsg());
		if (user != null) {
			if (user.getUsername().equals("mtea") && user.getPassword().equals("123")) {
				System.out.println("login()()-SUCCESS");
				return SUCCESS;
			} else {
				System.out.println("login()()-ERROR");
				throw new Exception("测试异常");
				//return ERROR;
			}
		} else {
			return ERROR;
		}

2.用户名前缀拦截器

/**
 * 登陆名前缀拦截
 */
public class NamePrefixInterceptor extends AbstractInterceptor {
	private static final long serialVersionUID = 1L;
	
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		HttpServletRequest request = ServletActionContext.getRequest(); 
		String username=request.getParameter("user.username");
		System.out.println("NamePrefixInterceptor-intercept()-username:"+username);
		if(username.startsWith("m")){
			return Action.ERROR;
		}else{
			return invocation.invoke();
		}
	}
}

3.配置拦截器

	<package name="annoInterceptorPackage" namespace="/anno" extends="struts-default">
		<interceptors>
			<interceptor name="namePrefixInterceptor" class="com.mtea.erp.interceptor.NamePrefixInterceptor"/>
		</interceptors>
	</package>

4.简单截图


注意:

annoInterceptorPackage 这个名字需要和 @ParentPackage("annoInterceptorPackage") 一样,否则的话,tomcat出错!


<constant name="struts.devMode" value="true" />

<constant name="struts.convention.classes.reload" value="true" />


同时配置的话,估计也会出错!

猜你喜欢

转载自macrotea.iteye.com/blog/1025944