继上篇博客

既然我们知道了不使用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进一步的详细解释(两)的更多相关文章

  1. php学习之路:WSDL详细解释(两)

    3.定义服务使用的逻辑消息 当服务的操作被调用时.服务被定义为消息交换.在wsdl文档中,这些消息被定义message元素. 这些消息由称之为part元素的部分组成. 一个服务的操作,通过指定逻辑消息 ...

  2. 菜鸟学习SSH(一)——Struts实现简单登录(附源码)

    从今天开始,一起跟各位聊聊java的三大框架——SSH.先从Struts开始说起,Struts对MVC进行了很好的封装,使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时 ...

  3. 菜鸟学SSH(一)——Struts实现简单登录(附源码)

    从今天开始,一起跟各位聊聊java的三大框架——SSH.先从Struts开始说起,Struts对MVC进行了很好的封装,使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时 ...

  4. 烂泥:学习ssh之ssh密钥随身携带

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 在上一篇文章<烂泥:学习ssh之ssh无密码登陆>中,我们讲解了如何使用ssh密钥,免密码登陆服务器. 这篇文章我们再来讲解,如何把已经生成的 ...

  5. 第1章 ssh和SSH服务(包含隧道内容)

    本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远程主机. 另外,本人翻译了ssh客户端命令的 ...

  6. man ssh翻译(ssh命令中文手册)

    本文为命令ssh的man文档翻译,翻译了90%的内容,剩余是一些没必要翻译的东西,请见谅. 如此文有所疑惑,希望我的另一篇文章能解惑: SSH(1)                    BSD Ge ...

  7. [转]ssh和SSH服务(包含隧道内容)

    本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远程主机. 另外,本人翻译了ssh客户端命令的 ...

  8. 烂泥:学习ssh之ssh无密码登陆

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 最近一个月没有写过文章,主要是刚刚换的新工作.新公司服务器OS使用的是ubuntu server版,和以前熟悉的centos还是有很多不同的. 刚好这几天 ...

  9. ssh和SSH服务(包含隧道内容)

    ssh和SSH服务(包含隧道内容) 72.16.10.6:/etc/fstab-->/172.16.10.3:/tmp/a.txt. [root@xuexi ~]# scp 172.16.10. ...

随机推荐

  1. Drupal 7 模 .info 文件描述

    Drupal使用.info文件以节省话题(theme)和模块(modules)基本数据(metadata). 编码:推荐使用UTF-8.这是一个没有BOM(Byte Order Mark). 下面是一 ...

  2. swift-辞典NSDictionary定义,变化的关键,删/加入关键

    // Playground - noun: a place where people can play import UIKit //--------------------------------- ...

  3. 03.Msbuild

    MSBuild的深入认识 分类: 专题开发 自动化 2009-01-20 11:56 5711人阅读 评论(1) 收藏 举报 任务引擎脚本工作扩展build 最近在从事自动构造工作的过程中,对MSBu ...

  4. 玩转web之ajax(一)---使用表单的serialize()方法中文乱码解决

    有时候我们需要使用ajax提交去提交form的值,这样就需要使用serialize()去获取form的值,但这样获取的值如果有中文,会乱码,原因和解决方法如下: 原因:.serialize()自动调用 ...

  5. SqlServer service broker 分布式系统(赵松桃)跳水 2005 数据库编程

    1.创建一个测试数据库 create database ServerbrokerTest on primary( name=ServerbrokerTest_data, filename='C:\Pr ...

  6. [JSP][JSTL]页面调用函数--它${fn:}内置函数、是推断字符串是空的、更换车厢

    页面中调用函数--之${fn:}内置函数 函数描写叙述 fn:contains(string, substring) 假设參数string中包括參数substring,返回true fn:contai ...

  7. 每天进步一点点之SQL 获取表中某个时间字段离当前时间最近的几条

    实际中用到的SQL: select * from (select top 3 Id, case when startSignup>GETDATE() then '敬请期待' when (star ...

  8. [LeetCode234]Palindrome Linked List

    题目: Given a singly linked list, determine if it is a palindrome. 判断一个单链表是不是回文 思路: 1.遍历整个链表,将链表每个节点的值 ...

  9. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  10. 了解ASP.NET5 Web应用程序结构

    本文参考ASP.NET5 官方文档 Understanding ASP.NET 5 Web Apps,加入了一些个人理解,理解不对的地方希望大家能指出,互相学习. ASP.NET 5 针对WEB编程引 ...