一、使用struts必须先配置web.xml文件
web.xml包含一切映射联系,包含着Servlet映射、过滤器映射等,处理表单提交的一切信息。而struts也是基于Servlet的。可以出从以下配置文件看出来。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 中文编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.jwy.tools.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<!-- Struts应用配置,在这里也可以配置多个模块的struts-config.xml -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <!--1.从这里可以看出struts也是一个Servlet-->
<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>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern> <!--2.从这里让struts解析所有.do请求-->
</servlet-mapping>
<!--3.下面举个普遍的Servlet以示区别-->
<servlet>
<servlet-name>User</servlet-name>
<servlet-class>com.jwy.servlet.User</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>User</servlet-name>
<url-pattern>/User</url-pattern> <!--解析User的请求,/是为了分段url中的User,必须要。该类处理的参数也是通过String username=new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK");//避免乱码-->
</servlet-mapping>
<!-- 欢迎页面 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
归纳:可以看出Servlet采用的request传递参数,但是struts是采用form-bean,更加独立业务逻辑;
二、配置Action的*.xml文件
不要以为struts-config.xml是struts自己带的。它只是一个Action的配置文件,对应着上面web.xml中config参数,可以自由命名。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans>
<!-- 用户登录Form -->
<form-bean name="userLoginForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="pwd" type="java.lang.String" />
<form-property name="loginName" type="java.lang.String" />
<form-property name="id" type="java.lang.Integer" />
<form-property name="type" type="java.lang.String" />
<form-property name="mail" type="java.lang.String" />
<form-property name="pwd1" type="java.lang.String" />
</form-bean>
</form-beans>
<global-exceptions />
<global-forwards/>
<action-mappings>
<!-- 处理用户登录页面请求类,必须继承下面三实现form-bean传递,对应上面的userLoginForm -->
<action type="com.jwy.action.UserLoginAction" name="userLoginForm" path="/userLogin" scope="request">
<forward name="index" path="/index.jsp" />
<forward name="manager" path="/manager/manager.jsp" />
<forward name="welcome" path="/stu/welcome.jsp" />
<forward name="addStuInfo" path="/stu/addStuInfo.jsp" /> </action>
</action-mappings>
</struts-config>
三、实现action的类
1、业务逻辑单一,继承org.apache.struts.action.Action抽象类,实现excute()方法,不必覆盖它:
mport org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
public class UserLoginAction extends Action{
public ActionForward excute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
{
DynaActionForm courseForm = (DynaActionForm) form; //提取出form-bean
Course course = new Course();
course.setName(courseForm.getString("name"));
course.setSchooltime(courseForm.getString("schooltime"));
course.setAddr(courseForm.getString("addr"));
courseDao.insert(course);
mapping.findForward("index"); //上面配置文件的forward元素
}
}
2、也业务不止一个,继承DispatchAction抽象类,它也继承Action,采用哪个业务逻辑由<action type="com.jwy.action.UserLoginAction" name="userLoginForm" path="/userLoginAction" scope="request"parameter=“first”>中的parameter和jsp中的<form action="userLoginAction?first=insert">的url参数决定的
mport org.apache.struts.action.DispatcherAction;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
public class UserLoginAction extends DispatcherAction{
public ActionForward insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
{
DynaActionForm courseForm = (DynaActionForm) form; //提取出form-bean
Course course = new Course();
course.setName(courseForm.getString("name"));
course.setSchooltime(courseForm.getString("schooltime"));
course.setAddr(courseForm.getString("addr"));
courseDao.insert(course);
mapping.findForward("index"); //上面配置文件的forward元素
}
}