Struct三种配置方式
方法一:使用ActionServlet,拦截器为servlet,Action类继承Action,方便在于表单提交的数据可以直接传输在UserForm中。
web.xml文件
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
struts-config.xml位于WEB-INF文件夹下面
<struts-config>
<form-beans>
<form-bean name="userform" type="com.ssh.actionform.UserForm"></form-bean>
</form-beans>
<action-mappings>
<action name="userform" path="/login" type="com.ssh.action.LoginAction" scope="request">
<forward name="sucess" path="/sucess.jsp"></forward>
<forward name="error" path="/error.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="com.yourcompany.struts.ApplicationResources" />
</struts-config>
Action类文件
public class LoginAction extends Action{
public ActionForward execute(ActionMapping actionMapping,ActionForm actionForm,
HttpServletRequest request,HttpServletResponse response){
//通过UserForm自动将表单的信息注入到UserForm中,在Action类中可以直接获取表单中的
//所有值, 但是要求表单中input 的name属性与UserForm类中的字段属性必须严格保持一致
UserForm user=(UserForm)actionForm;
System.out.println(user.getUserName()+":"+user.getPassWord());
return actionMapping.findForward("sucess");
}
}
public class UserForm extends ActionForm{
int id;
String userName;
String passWord;
//******此处省略属性set及get方法*******
}
方法二:Struct2.1.3版本之前的,拦截器使用filter,Filter的实现类为FilterDispatcher,Action类继承ActionSupport
web.xml文件
<filter> <!--定义核心Filter FilterDispatcher -->
<filter-name>struts2</filter-name> <!-- 定义核心Filter的名称 -->
<filter-class> <!--定义核心Filter的实现类 -->
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name><!--核心Filter的名称 -->
<url-pattern>/*</url-pattern><!--使用该核心Filter过滤所有的Web请求 -->
</filter-mapping>
struts.xml
<struts><!-- 根节点 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<package name="struts2" extends="struts-default">
<action name="login" class="com.sanqing.action.LoginAction">
<result name="studentSuccess" type="chain">getRandomSubject</result><!--进入考试页面-->
<result name="teacherSuccess" type="redirect">/teacher/index.html</result><!--老师登录成功页面-->
<result name="input">/login.jsp</result><!--登录失败页面-->
</action>
</package>
</struts>
Action类文件
public class LoginAction extends ActionSupport {
private String id; //
private String password; //
//******此处省略属性set及get方法*******
public String execute() throws Exception {
return this.INPUT;
}
}
方法三:Struct与Spring相结合,拦截器使用filter,Filter的实现类为StrutsPrepareAndExecuteFilter,Action类继承ActionSupport方法的好处在于:不用为每一个action写一个Action类,只需要在struct的action中配置method方法,因此在一个Action类中可以响应多个action请求。
web.xml配置
<filter>
<filter-name>struct2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struct2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 定义spring配置文件在哪里 -->
<context-param>
<!-- 参数名称必须叫contextConfigLocation -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<!-- 在应用服务器启动的时候,根据contextConfigLocation的取值, 创建BeanFactory 对象,并且把这个对象放入ServletContext -->
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
struts.xml文件配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<global-results>
<result name="error">error.jsp</result>
</global-results>
<action name="login" class="com.iven.action.UserAction"
method="login">
<result name="success">/main.jsp</result>
<result name="admin">/admin/main.jsp</result>
<result name="login">/login.jsp</result>
</action>
</package>
</struts>
创建Action类UserAction
@Controller
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = null;
@Override
public User getModel() {
if (user == null) {
user = new User();
}
return user;
}
public String login(){
return LOGIN;
}
}