Struts 1.X工作原理

Struts 是Apache所开发的一个web应用框架,用来简化web开发的中常用、重复的工作。

原理图:

在以前的的开发中,浏览器的请求会找一个Servlet处理,然后返回浏览器,而在struts中所有的请求都会找一个叫做ActionServlet处理,它会根据配置文件配的action来将请求交给指定的Action来处理。

配置Struts:

1.引入Struts的jar包

2.在web工程目录下新建struts-config.xml(它用来配置struts如何工作)

3.配置web.xml中Struts的ActionServlet处理请求

引入jar包和配置文件后工程结构目录应为:

web.xml 配置如下节点:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>Struts</display-name>
	<servlet>
	<!-- 这个ActionServlet是Struts用来处理所有请求并根据配置文件调用指定的Action,没有它Struts无从谈起 -->
	<servlet-name>ActionServlet</servlet-name>
	<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
	<!-- ActionServet在init方法中读取config配置项,来决定如何处理这个请求。 -->
	<init-param>
	<param-name>config</param-name>
	<param-value>/WEB-INF/struts-config.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
	</servlet>
	<!--  处理所有*.st的请求 -->
	<servlet-mapping>
	<servlet-name>ActionServlet</servlet-name>
	<url-pattern>*.st</url-pattern>
	</servlet-mapping>
</web-app>

配置struts-config.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>

</struts-config>

这里的配置文件是空的,struts所有的配置都在<struts-config></struts-config>节点中配置

从上面的Struts工作原理图可以看出,请求先被ActionServlet处理,然后转到指定的Action中进行业务逻辑的处理(这个Action可以理解为MVC模式里的控制器),处理完毕后返回ActionServlet,再由ActionServlet返回浏览器。

第一个案例:

1.新建一个处理请求的Action并覆盖父类的execute方法,它继承至Action类

2.配置struts-config.xml文件,指定某个请求由这个Action处理.

新建一个用于处理请求的Action



 

package struts.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;

public class IndexAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		request.setAttribute("msg", "IndexAction 处理.....");
		return mapping.findForward("index");//这个index在struts-config.xml文件中action节点的子节点中配置,表示跳转路径。
	}

}


在struts-config.xml中配置action

<?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>
<action-mappings>
<action path="/Index" type="struts.action.IndexAction">
<forward name="index" path="/WEB-INF/jsp/Index.jsp"></forward>
</action>
</action-mappings>
</struts-config>

这里的action-mapping节点中的每一个action节点表示一个action

action节点的属性含义

path:它表示这个action处理它指定的路径

type:action处理类的路径

action节点中的forward节点表示,跳转路径。

到这里就配置完毕了,启动tomcat,访问:http://localhost:8080/DemoStruts/Index.st

就会看到

是不是挺简单,不过strtus只能做这点事情,用它干嘛呢?

它可以简化web开发中的一些重复、繁杂的劳动,仅仅是简化而已,而不是替代,它能做得事情用传统的jsp技术也能做。

简化一  表单注册,它自动封装表单数据到一个bean

1.新建一个bean 继承至actionfrom

package struts.bean;

import org.apache.struts.action.ActionForm;

public class RegisterUserBean 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;
	}
}

2.新建一个Action用于处理这个请求

package struts.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 struts.bean.RegisterUserBean;

public class RegisterAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//从ActionForm拿到封装后表单数据
		RegisterUserBean userbean=(RegisterUserBean) form;
		System.out.println(userbean.getUsername());
		request.setAttribute("msg", userbean.getUsername());
		return mapping.findForward("index");
	}

}


3.配置struts-config.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>
<form-beans>
<form-bean name="registeruser" type="struts.bean.RegisterUserBean"></form-bean>
</form-beans>
<action-mappings>
<action path="/Index" type="struts.action.IndexAction">
<forward name="index" path="/WEB-INF/jsp/Index.jsp"></forward>
</action>
<action path="/RegisterUI" type="struts.action.RegisterUIAction">
<forward name="registerui" path="/WEB-INF/jsp/RegisterUser.jsp"></forward>
</action>
<action path="/RegisterAction" name="registeruser" type="struts.action.RegisterAction">
<forward name="index" path="/WEB-INF/jsp/Index.jsp"></forward>
</action>
</action-mappings>
</struts-config>


这样就配置OK了.

Struts 转发请求:


 

 浏览器发起一个请求,首先进入ActionServlet,它根据配置文件对这个请求做一系列的封装和处理(可以理解为预处理)后调用处理这个请求的Action类的Execute方法,Action处理完毕后返回一个ActionForward,ActionSerlvet根据返回的ActionServlet决定如何跳转。

猜你喜欢

转载自blog.csdn.net/vs2008aspnet/article/details/11848963