配置struts2时,需要用到web.xml文件和struts.xml文件;
web.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Struts 2.0 Hello World</display-name>
<filter>
<!-- 配置Struts2核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 配置Struts2核心Filter的实现类 -->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<!-- 配置Struts2框架默认加载的Action包结构,可以没有。 -->
<param-name>actionPackages</param-name>
<param-value>org.apache.struts2.ssh.strutsAction</param-value>
</init-param>
</filter>
<filter-mapping>
<!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
struts.xml
该类的作用是,添加action的映射。
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"/>
<!-- extends于struts-default.xml使其具有struts2默认定义的一些行为。-->
<package name="tutorial" extends="struts-default">
<action name="HelloWorld" class="tutorial.HelloWorld">
<result>HelloWorld.jsp</result>
</action>
</package>
<!-- extends="json-default",后可以返回json类型的数据,数据的key就是 param 标签类的值,而该数据是在 Action中封装好的
private Map<String, String> callback;
public String noRespontText() {
callback = new HashMap<String, String>();
callback.put("one", "1");
callback.put("tow", "2");
callback.put("three", "3");
callback.put("four", "4");
callback.put("five", "5");
callback.put("six", "6");
return "success";
}
--!>
<package name="tutorial" extends="json-default">
<!--配置拦截器类--!>
<interceptors>
<interceptor name="auth" class="demo1.AuthorizationInterceptor" />
</interceptors>
<action name="HelloWorldTEXT" class="demo1.HelloWorld" method="noRespontText">
<result type="json" name="success"><!--表示该方法的返回值为success字符串是,返回callback对象--!>
<param name="root">callback</param>
</result>
</action>
<action name="Sfilter" class="demo1.HelloWorld" method="showAdmin">
<interceptor-ref name="auth" /><!--拦截器使用:在执行该方法前,先执行auth对应的类,interceptors标签的类(上面个)--!>
<result name ="login" > /SayHello.jsp </result>
<result name ="success" > /welcome.jsp </result>
</action>
</package>
</struts>
拦截类:
public class AuthorizationInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation ai) throws Exception {
Map<String, Object> session = ai.getInvocationContext().getSession();
String role = (String) session.get( "login" );
System.out.println("role"+role);
if ( null != role) {
return "success";
//调用后面的action方法(showAdmin)继续执行
} else {
return Action.LOGIN;
}
}
}