【SSH 基础】SSH框架--struts深入详解(二)


继上篇博客        

既然我们知道了不使用struts给我们带来这么多弊端,那么下面我们来看看struts是如何封装的,怎么解决我们出现的问题的?

 

先来说一下struts的基本流程,帮助大家理解下面的代码:

 

 Struts基本简要流程如下:

     1、客户端浏览器发出HTTP请求。

     2、根据web.xml配置,该请求被FilterDispatcher接收。

     3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。

     4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

     5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。

     6、返回HTTP响应到客户端浏览器。

 

示例分析(使用struts

 

配置文件web.xml

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>	

add.jsp

<%@ page language="java" contentType="text/html; charset=GB2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
	<head>
		<title>添加页面</title>
	</head>
	<body>
		<center>
			<s:form action="grade">
				<s:textfield name="grade.USERID" label="用户编号" />
				<s:textfield name="grade.USERNAME" label="用户姓名" />
				<s:textfield name="grade.CHINESE" label="语文成绩" />
				<s:textfield name="grade.MATHS" label="数学成绩" />
				<s:textfield name="grade.ENGLISH" label="英语成绩" />
				<s:submit value="确定" />
				<s:reset value="重置" />
			</s:form>
		</center>
	</body>
</html>

Struts.xml


<package name="book" extends="struts-default">
		<action name="grade" class="action.GradeAction">
			<result name="show">show.jsp</result>			
		</action>
		<action name="login" class="action.UserAction">
			<result name="success">success.jsp</result>
			<result name="error">error.jsp</result>
		</action>
</package>
 

GradeAction.java


public class GradeAction {
	private Grade grade;
	private List<Grade> gradeList;
	public Grade getGrade() {
		return grade;
	}
	public void setGrade(Grade grade) {
		this.grade = grade;
	}
	public List<Grade> getGradeList() {
		return gradeList;
	}
	public void setGradeList(List<Grade> gradeList) {
		this.gradeList = gradeList;
	}
	public String execute() throws Exception{
		GradeDao gradeDao=new GradeDao();
		gradeDao.insertGrade(grade);
		ArrayList<Grade> gradeList = (ArrayList) gradeDao.listGrade();
		this.setGradeList(gradeList);
		return "show";
	}

单纯的看,这两套代码(结合上篇博客来看),从代码量上来看,都是完成同样的添加功能,使用struts后,明显代码量减少了许多,而且每个操作完成后的跳转页都配置到了配置文件中,这样给我们系统的维护带来了极大的便利。它相当于从界面到action传递的过程中,是以对象的方式传递的,就不需要我们像之前的操作那样一个字段一个字段的去获取。

 

当然还有一点,就是struts是如何解决servlet过多的问题的?


Struts.xml


 <package name="testlogin2" namespace="/user" extends="struts-default">
   
   		<action name="login" class="com.action.LoginAction2" method="doFun">
   			<result name="success">/success.jsp</result>
   			<result name="error" type="redirect">/error.jsp</result>
   			
   		</action>
   		<!-- 第三种方式 :一个action处理多个请求 如:user/modifyUser
   		<action name="*User_*" class="com.action.UserManagerAction" method="{1}User">
    		<result name="success">/{2}.jsp</result>
    		<result name="error">/error.jsp</result>
    	</action>-->
   		
   		<action name="*User" class="com.action.UserManagerAction" method="{1}User">
    		<result name="success">/success.jsp</result>
    		<result name="error">/error.jsp</result>
    	</action>
   		
   		
   </package>

public class UserManagerAction extends ActionSupport {
	
	private User user;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public String addUser(){
		System.out.println("---------AddUser()-------");
		return "success";
	}
	public String modifyUser(){
		System.out.println("---------ModifyUser()-------");
		return "success";
	}
	public String delUser(){
		System.out.println("---------DelUser()-------");
		return "success";
	}
}

servlet的关系

 

     前面我们说对于Model 2模型来说,Servlet过多,转向频繁,流程,配置等不易集中管理,那么strutsServlet有什么关系?它怎么就能解决Servlet的这些问题呢?

 

     可以说Struts2本质还是一个Servlet,只是对Servlet进一步的封装罢了

   

     对于解决问题来说:

     打个比方:做Web项目,好比建房子。

     Servlet好比木材,用一根根的木材搭,也可盖起房子,只是速度慢而已;

     Struts2好比是用木材做好的一个房子大概结构,要建房子时,只需把它拿过来,再往其里面添砖加瓦,修修补补,就能很快盖好房子,这要比直接使用Servlet要快得多

 

 

以上只是我对struts的简单理解,用一句话概括,struts就是将某些功能进行提取,然后做了一个封装,能让我们更好的使用(框架)。当然对于它的优势还需要我们在以后做项目的过程中慢慢体会!





你可能感兴趣的:(【SSH 基础】SSH框架--struts深入详解(二))