【SSH 基金会】SSH框架--struts进一步的详细解释(两)
继上篇博客
既然我们知道了不使用struts给我们带来这么多弊端,那么以下我们来看看struts是怎样封装的。怎么解决我们出现的问题的?
先来说一下struts的基本流程,帮助大家理解以下的代码:
Struts基本简要流程例如以下:
1、client浏览器发出HTTP请求。
2、依据web.xml配置。该请求被FilterDispatcher接收。
3、依据struts.xml配置。找到须要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。
4、Action调用业务逻辑组件处理业务逻辑,这一步包括表单验证。
5、Action运行完成,依据struts.xml中的配置找到相应的返回结果result,并跳转到相应页面。
6、返回HTTP响应到client浏览器。
演示样例分析(使用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过多,转向频繁。流程。配置等不易集中管理,那么struts与Servlet有什么关系?它怎么就能解决Servlet的这些问题呢?
能够说Struts2本质还是一个Servlet。仅仅是对Servlet进一步的封装罢了
对于解决这个问题来说:
打个例如:做Web项目,好比建房子。
Servlet好比木材。用一根根的木材搭,也可盖起房子。仅仅是速度慢而已。
Struts2好比是用木材做好的一个房子大概结构,要建房子时,仅仅需把它拿过来,再往其里面添砖加瓦,修修补补,就能非常快盖好房子,这要比直接使用Servlet要快得多
以上仅仅是我对struts的简单理解,用一句话概括,struts就是将某些功能进行提取,然后做了一个封装。能让我们更好的使用(框架)。
当然对于它的优势还须要我们在以后做项目的过程中慢慢体会!
版权声明:本文博客原创文章。博客,未经同意,不得转载。
【SSH 基金会】SSH框架--struts进一步的详细解释(两)的更多相关文章
- php学习之路:WSDL详细解释(两)
		
3.定义服务使用的逻辑消息 当服务的操作被调用时.服务被定义为消息交换.在wsdl文档中,这些消息被定义message元素. 这些消息由称之为part元素的部分组成. 一个服务的操作,通过指定逻辑消息 ...
 - 菜鸟学习SSH(一)——Struts实现简单登录(附源码)
		
从今天开始,一起跟各位聊聊java的三大框架——SSH.先从Struts开始说起,Struts对MVC进行了很好的封装,使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时 ...
 - 菜鸟学SSH(一)——Struts实现简单登录(附源码)
		
从今天开始,一起跟各位聊聊java的三大框架——SSH.先从Struts开始说起,Struts对MVC进行了很好的封装,使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时 ...
 - 烂泥:学习ssh之ssh密钥随身携带
		
本文由秀依林枫提供友情赞助,首发于烂泥行天下 在上一篇文章<烂泥:学习ssh之ssh无密码登陆>中,我们讲解了如何使用ssh密钥,免密码登陆服务器. 这篇文章我们再来讲解,如何把已经生成的 ...
 - 第1章 ssh和SSH服务(包含隧道内容)
		
本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远程主机. 另外,本人翻译了ssh客户端命令的 ...
 - man ssh翻译(ssh命令中文手册)
		
本文为命令ssh的man文档翻译,翻译了90%的内容,剩余是一些没必要翻译的东西,请见谅. 如此文有所疑惑,希望我的另一篇文章能解惑: SSH(1) BSD Ge ...
 - [转]ssh和SSH服务(包含隧道内容)
		
本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远程主机. 另外,本人翻译了ssh客户端命令的 ...
 - 烂泥:学习ssh之ssh无密码登陆
		
本文由秀依林枫提供友情赞助,首发于烂泥行天下 最近一个月没有写过文章,主要是刚刚换的新工作.新公司服务器OS使用的是ubuntu server版,和以前熟悉的centos还是有很多不同的. 刚好这几天 ...
 - ssh和SSH服务(包含隧道内容)
		
ssh和SSH服务(包含隧道内容) 72.16.10.6:/etc/fstab-->/172.16.10.3:/tmp/a.txt. [root@xuexi ~]# scp 172.16.10. ...
 
随机推荐
- java.lang.OutOfMemoryError: Java heap space错误和方法(集、转)
			
错误的方式来解决溢出下面的堆空间是从网上找: java.lang.OutOfMemoryError: Java heap space ================================= ...
 - hadoop namenode -format  Couldn'tload main class "-Djava.library.path=.home.hadoop.hadoop-2.5.2.lib"
			
<pre name="code" class="sql">[hadoop@MasterHadoop50 ~]$ hadoop namenode -f ...
 - OpenCV Haar AdaBoost源代码改进(比EMCV快6倍)
			
这几天研究了OpenCV源代码 Haar AdaBoost算法,作了一下改进 1.去掉了全部动态分配内存的操作.对嵌入式系统有一定的速度提升 2.凝视覆盖了大量关键代码 3.降低了代码一半的体积,而且 ...
 - Mac下使用MySQL
			
0 安装 http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.17-osx10.7-x86.dmg http://dev.mysql.com/down ...
 - lunix  shell  基础经常使用整理
			
1 ps -ef 显示正在执行的进程,pid 等信息 UID PID PPID C STIME TTY TIME CMD root 1 0 0 03:45 ? 00:00:02 ini ...
 - Java 抽象工厂模式
			
抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families ...
 - Iphone CodeSign error: no provisioning profile at path 错
			
今天在退房手续,变化了profile,当再次进行整理编译项目时.就出现了这个问题,在xCode 6 开发环境下出现了, 出现这个错误提示Code Sign error: Provisioning pr ...
 - Javascript设计模式系列三
			
继承,一个类或对象继承另一个类或对象的三种方法.类式继承.原型式继承.掺元类. 一.类式继承,原型链.Extend函数. <script type="text/javascript&q ...
 - WPF动态加载3D 放大-旋转-平移
			
原文:WPF动态加载3D 放大-旋转-平移 WavefrontObjLoader.cs 第二步:ModelVisual3DWithName.cs public class ModelVisual3DW ...
 - iOS缓存类的设计
			
使用执行速度缓存的程序可以大大提高程序,设计一个简单的缓存类并不需要太复杂的逻辑. 只需要一个简单的3接口. 存款对象 以一个对象 删除对象 阅读对象 watermark/2/text/aHR0cDo ...