struts1的基本配置和工作流程

1.引入struts的jar包
 commons-beanutils-1.7.0.jar  --------Java 反射和内省 API 包装器
 commons-chain-1.1.jar ---提供了一个基于Java的框架和API来描述顺序的处
 commons-digester-1.8.jar---用于分析 XML 配置文件的 XML 到 Java 对象映
 commons-logging-1.0.4.jar ----各种日志 API 实现的包装器
 struts-core-1.3.8.jar---核心包
 struts-extras-1.3.8.jar----扩展包

 struts-taglib-1.3.8.jar(标签库包)


2.定义login.jsp页面

<form action="${pageContext.request.contextPath}/login.do" method="post">
    	帐号<input type="text" id="userName" name="userName"><br>
    	密码<input type="password" id="passWord" name="passWord"><br>
   		<input type="submit" value="提交">
</form>


3.定义LoginForm 
      * 继承ActionForm
      * ActionFormBean中属性的名称 必须和jsp页面表单组件中name属性的值相同

package com.xxc.form;

import org.apache.struts.action.ActionForm;

@SuppressWarnings("serial")
public class LoginForm extends ActionForm {
	private String userName;
	private String passWord;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassWord() {
		return passWord;
	}

	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}

}


4.定义LoginAction 要继承Action, 重写execute方法  注意execute中是HttpServletRequest参数而不是ServletRequest参数

package com.xxc.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.xxc.form.LoginForm;

public class LoginAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//由此可见ActionMapping是将当前action标签里的信息封装成了对象
		System.out.println("Name--->"+mapping.getName());//loginForm
		System.out.println("Type--->"+mapping.getType());//com.xxc.action.LoginAction
		System.out.println("Path--->"+mapping.getPath());//   /login
		System.out.println("Scope--->"+mapping.getScope());//request
		
		
		
		LoginForm loginform = (LoginForm)form;//进行强转
		String userName = loginform.getUserName();
		String passWord = loginform.getPassWord();
		
		System.out.println("userName--->"+userName);
		System.out.println("passWord--->"+passWord);
		
		return mapping.findForward("success");<!--参数是当前action标签中forward自标签中的name属性-->
	}
}


5.建立请求路径(/login.do和LoginAction中execute方法的联系,使用struts-cofig.xml搭建之间的联系
         * struts-cofig.xml放置到WEB-INF下(也可以放在别的目录下,具体在web.xml中的  <servlet>标签中的<init-param>标签中配置路径)
         * 配置struts-cofig.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
     <!--
      	    配置ActionFormBean
           * name属性:form-bean标签的唯一标识
           * type属性:ActionFormBean所在的路径
      -->
	<form-beans>
		<form-bean name="loginForm" type="com.xxc.form.LoginForm"></form-bean>
	</form-beans>
	<!-- 
		action-mappings是action的集合
			*path属性:是action标签的唯一表示
			*type:表示ActionServlet中要实例化的action类路径
	 -->
	<action-mappings>
		<action path="/login" type="com.xxc.action.LoginAction" name="loginForm" scope="request"><!--name表示用哪个actionForm封装当前表单的数据的 -->
			<forward name="success" path="/success.jsp"></forward>
		</action>
	</action-mappings>
</struts-config>


6.配置web.xml  将所有.do请求用ActionServlet进行拦截(需要在web.xml中进行servlet配置)

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">



	<servlet>
		<!-- 
			这个action是struts1提供的
				*是struts1的中央控制器
				*在目前的版本中只能配置一次ActionServlet
		 -->
		<servlet-name>action</servlet-name>
		<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
		<!-- 加载struts-config.xml文件 , 如果struts-config.xml在/WEB-INF/下,可以不配置 -->
		<init-param>
			<!-- param-name中config这个参数的名称是固定的 -->
			<param-name>config</param-name>
			<!-- param-name中config这个参数的名称是固定的 -->
			<param-value>/WEB-INF/struts-config.xml</param-value>
		</init-param>
		<!-- 服务器启动时就初始化这个servlet,数字越小越先加载 -->
		<load-on-startup>0</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<!-- 只要请求路径的后缀名是.do,就要访问struts的中央控制器ActionServlet -->
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</web-app>




Struts1的工作流程:

1.服务器启动时,做的初始化工作:
   * 在web.xml文件配置ActionServlet的映射
   * 服务器启动时,实例化和初始化ActionServlet
   * ActionServlet 初始化时,加载struts-config.xml文件

2.当客户端向服务器发送的请求的流程(以请求的路径/login.do为例)  这些都是struts1内部完成的工作

 * 1 当客户端向服务器发送请求,请求的路径是/login.do,由于ActionServet接受请求路径的形式是*.do
   
       所以该请求,将访问ActionServlet
   
 * 2 ActionServlet接到请求后,解析请求路径/loginAction(去掉.do)
 
 * 3 ActionServlet到struts-config.xml文件中查找action标签的path属性的值=/login,通过该对应关
   
     系,找到Action标签,
   
 * 4 ActionServlet把找到的Action标签中的信息封装到 Actionmapping对象中
   
 * 5 ActionServlet在Action标签中查找name属性,根据name属性的值到form-beans表中查找用户封装表单数据的
      ActinForm(LoginForm)
   
 * 6 ActionServlet封装表单的数据到loginForm中.
   
 * 7 ActionServlet在Action标签中查找type属性的值type=cn.itcast.web.action.LoginAction
   
 * 8 ActionServlet为type=com.xxc.action.LoginAction创建实例
   
 * 9 在ActionServlet调用action中execute方法(此时调用的是子类重写父类的方法),方法的返回值是
      ActionForward对象, execute的四个参数 
        execute(4产生的ActionMapping对象,6产生ActionForm对象,
HttpServletRequest对象,HttpServletResponse对象)
   * 10  ActionServlet中利用ActionForward对象的getPath()方法,获取要转发的路径/success.jsp
   
 * 11 在ActionServlet中 转发或者重定向
      request.getRequestDispatcher("/success.jsp").forward(request, response);




RequestProcessor:

这个类是真正封装了struts控制器在处理servlet请求时所遵循的控制逻辑。也就是说servlet会调用RequestProcessor,

而不是将所有代码都写在ActionServlet中的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值