在我们的开发中,有一个经典的框架,就是SSH,他们分别是:Struts,Spring,Hibernate,我们队他们神交已久,在以前的博客中我介绍了Hibernate,今天我们也逐步揭开Struts的神秘面纱,一起来看看这个熟悉的老朋友!

简介

首先我们还是去维基百科上看看他的介绍:

Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

不要被MVC吓住,我们马上去看看他是什么?

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

MVC模式最早由Trygve Reenskaug在1978年提出[1] ,是施乐帕罗奥多研究中心(XeroxPARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:

(控制器Controller)- 负责转发请求,对请求进行处理。

(视图View) - 界面设计人员进行图形界面设计。

(模型Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。

下面让我们通过一个简单的例子认识他:

实例:

Struts环境搭建

1.首先要下载struts的jar包,地址http://struts.apache.org/

2.解压后将lib文件夹里的jar包都加入到项目中

3.在webapps文件夹中解压struts-blank.war,将其中的struts-config.xml拷贝到项目中

4.配置web.xml部署ActionServlet。这个格式是相对固定的,所以一般复制即可

<span style="font-size:18px;"><servlet>  <servlet-name>action</servlet-name>  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  <init-param>  <param-name>config</param-name>  <param-value>/WEB-INF/struts-config.xml</param-value>  </init-param>  <init-param>  <param-name>debug</param-name>  <param-value>2</param-value>  </init-param>  <init-param>  <param-name>detail</param-name>  <param-value>2</param-value>  </init-param>  <load-on-startup>2</load-on-startup>
</servlet>  <servlet-mapping>  <servlet-name>action</servlet-name>  <url-pattern>*.do</url-pattern>
</servlet-mapping>
</span>

5.配置struts-config.xml部署Action、ActionForm。其中type均为你项目中Action和ActionForm所在包的完整路径;name可以随便起,但是Action中的name必须与它用到的ActionForm的name相一致;再有就是action中要添加scope="request"这个属性,因为scope默认是session,这个可以根据实际情况自己定。

<span style="font-size:18px;"><struts-config>  <form-beans>  <form-bean name="loginForm" type="com.wang.struts.LoginActionForm"></form-bean>  <!-- 可以有多个ActionForm -->  </form-beans>  <action-mappings>  <action path="/login" type="com.wang.struts.LoginAction" name="loginForm" scope="request">  <forward name="success" path="/login_success.jsp"></forward>  <forward name="error" path="/login_error.jsp"></forward>  </action>  <!-- 可以有多个Action -->  </action-mappings>
</struts-config>
</span>

6.编写action类:

<span style="font-size:18px;">package com.action;import java.util.Map;import com.entity.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;public class loginaction extends ActionSupport {private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}@Overridepublic String execute() throws Exception {if("admin".equals(user.getUserName()) && "admin".equals(user.getPassWord()) ){    //System.out.println("you are success!");Map<String, Object> session = (Map)ActionContext.getContext().get("session");session.put("userName", user.getUserName());return "success";}else{//System.out.println("your user name is wrong !");return "error";}//System.out.println("hello!");//return super.execute();}}
</span>

7.编写登陆页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SS2_Test_Login</title>
</head>
<body><form action="login">User login <hr/>User Name: <input name="user.userName" type="text"><br/>User PassWord: <input name="user.PassWord" type="text"><input id="Btn_Login" type="submit" value="OK"></form></body>
</html>

我们看看他是怎么运行的:

这个具体的运行,我们才刚刚接触,暂且认为,他就是一个三层的调用吧!

MVC体现:

而这和MVC有什么关系呢?听听百科的解释:

MVC结构[编辑]

在Struts中,已经由一个名为ActionServlet的Servlet充当控制器(Controller)的角色,根据描述模型、视图、控制器对应关系的struts-config.xml的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。在MVC的模型(Model)部分,经常划分为两个主要子系统(系统的内部数据状态与改变数据状态的逻辑动作),这两个概念子系统分别具体对应Struts里的ActionForm与Action两个需要继承实现超类。在这里,Struts可以与各种标准的数据访问技术结合在一起,包括EnterpriseJava Beans(EJB), JDBC与JNDI。在Struts的视图(View)端,除了使用标准的JavaServerPages(JSP)以外,还提供了大量的标签库使用,同时也可以与其他表现层组件技术(产品)进行整合,比如VelocityTemplates,XSLT等。通过应用Struts的框架,最终用户可以把大部分的关注点放在自己的业务逻辑(Action)与映射关系的配置文件(struts-config.xml)中。

总结:

写完了这个测试,我们发现,Struts给我们带来了很大的方便,将后台处理和前台显示通过xml配置文件实现了自动适配,自动处理!给我们的编程带来了很大的好处,这样我们写的后台处理和前台处理代码就会带来很大的复用性!

而通过这个实例,我们对框架的理解也更深刻一点,框架是一种另外意义上的抽象,框架提供的是公共服务,他是种对横向上的抽象。通过这个例子,我们也更理解面向对象的设计了!

每一种技术的学习,其实都不难,那么难在哪呢?难在你认为他“高大上”了,其实拨开所有技术的脸皮,不还是ascii码的组合,面向对象技术,设计模式的应用吗?这么看来,这个世界,还是简单的!

JAVA必备——Struts相关推荐

  1. Java开发框架——Struts框架

    为了解决这些问题,出现了Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个Servlet),针对不同的业务,我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面 ...

  2. IDEA最全最常用的配置与性能优化(Java必备)

    IDEA最全最常用的配置与性能优化(Java必备) 简介 一.性能优化 1.JVM启动参数 2.清空缓存并重建索引 二.优化设置 1.显示方法分隔符 2.忽略大小写提示 3.主题设置 4.设置字体 5 ...

  3. java通过struts实现web中的文件下载

    上一篇已经记录了 web中的文件上传功能 java通过struts实现web中的文件上传 本篇记录下载功能 定义一个Action类,FileDownload.java package com.stru ...

  4. 浅谈工厂设计--java必备技能

    浅谈工厂设计–java必备技能 说到工厂,我就联想到了亚洲的大工厂富士康–接过订单然后按照固定的模板生产商品,其实java中工厂类中的工厂方法也是一样,接过参数,根据参数来生产需要的商品: 今天我们一 ...

  5. java 方法 掌握,共享手册|一定要掌握这几个Java必备的学习方法,事半功倍!

    [摘要]作为一门面向对象编程语言,Java吸收了C++语言的优点,也展现了其强大的一面,我们能在各个地方看到其功能强大和简单易用的两个特征,当然,也吸引了很多程序员的注意力,所以就有人想了解Java的 ...

  6. java 必备_Java基础必备

    标签: 写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希 ...

  7. Java必备主流技术流程图

    1.spring的生命周期 Spring作为当前Java最流行.最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必要: 首先容器启动后,对bean进行初始化 按照bean的定义,注入属性 ...

  8. Java必备常见单词

    资源共享学习交流群号:769674658(快满)qq交流二群(296389054) 部署项目前可购买一台服务器,最低9.9元带回家就能搭建自己的网站.系统.平台. 云服务器精选特惠_云服务器ECS_精 ...

  9. java通过struts实现web中的文件上传

    单文件上传 fileupload.jsp <%@ page language="java" import="java.util.*" pageEncodi ...

  10. java必备基础知识点

    转载自:  http://www.cnblogs.com/whyhappy/p/5279802.html Java基础 1. 简述Java的基本历史 java起源于SUN公司的一个GREEN的项目,其 ...

最新文章

  1. 面向对象的软件测试技术
  2. Erdaicms旅游网站系统微信和手机端分销系统正式上线发布啦
  3. maven 在 mac中的配置
  4. SAP CRM Survey调查问卷的存储模型
  5. caffe安装_Ubuntu 16.04 下 Theano 安装,及配置多 GPU使用(Multiple GPUs)
  6. oracle多久断开连接,Oracle自动断开连接
  7. Sql注入工具php,phpcms框架SQL注入--基于Havij工具
  8. 【DP】【记忆化搜索】NIKOLA(jzoj 1150)
  9. java exec 关闭_如何正确关闭java ExecutorService
  10. 前端 验证码隐藏怎么实现_Python爬虫教程:200行代码实现一个滑动验证码
  11. Java开发工具插件配置记录
  12. vue-cli watch简单用法
  13. springboot启动命令linux,springboot项目命linux环境下命令启动
  14. SQL语句:查询多表更新数据
  15. ecshop flow.php goods_number,ecshop二次开发属性库存缺货的思路
  16. FFmpeg开发(1)从mp4中提取aac音频
  17. 【机器学习基础】泛化能力、过拟合、欠拟合、不收敛、奥卡姆剃刀原则
  18. 如何查看docker的版本号是多少
  19. JAVA学习日志 关于周易数字卦的一个算法
  20. 大数据开发 电脑内存大小

热门文章

  1. 什么是软件设计模式?
  2. 游程编码解密(C语言详解)
  3. 希尔密码C语言源代码,希尔密码加密解密(示例代码)
  4. Excel 新手向个人练习-1 VLOOKUP,COUNTIF
  5. 关于NB-IoT的十大问题和答案
  6. 静态代理和动态代理的区别
  7. TkMybatis的使用
  8. html网页使用js连接mysql_html下利用javascript连数据库
  9. MaxScript学习 | 创建石头
  10. 泛微 - eteams