在我们的开发中,有一个经典的框架,就是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)是软件project中的一种软件架构模式,把软件系统分为三个基本部分:模型(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;
} @Override
public 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必备的开发知识和技能

    java必备的开发知识和技能 https://blog.csdn.net/qq_34405062/article/details/89389646 学习一下java 其实上学那会儿学的 早就过时加落伍 ...

  2. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  3. java必备基础知识(一)

    学习的一点建议: 每一门语言的学习都要从基础知识开始,学习是一个过程,"万丈高楼平地起",没有一个好的地基,想必再豪华的高楼大厦终究有一天会倒塌.因此,我们学习知识也要打牢根基,厚 ...

  4. java必备基础知识点

    Java基础 1. 简述Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机.冰箱等 2. 简单写出 ...

  5. java学习-struts基础(一)

    struts发展 struts是Apache软件基金会赞助的一个开源项目,是一个基于Java EE的MVC开源实现. 它为Servlet/JSP技术的应用提供技术框架2001.7--Struts1正式 ...

  6. java之struts框架入门教程

    本教程主要讲述struts的简单入门操作 使用的是myeclipse工具 1.创建web项目 2.复制struts必要的jar包到 WebRoot/WEB-INF/lib 下 jar包列表如下: as ...

  7. MVC基于Struts2的CRUD,java+bean+struts

    1,所需jar包,将jar包导入lib中 2,项目目录结构 3,struts.xml <?xml version="1.0" encoding="UTF-8&quo ...

  8. java:struts框架(网路静态U盘项目)

    1.网络静态U盘项目: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYP ...

  9. java:struts框架5(Converter,Validation,Tags(Object-Graph Navigation Language))

    1.Converter: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTY ...

随机推荐

  1. OGG-01008 Extract displays Discarding bad record (discard recs=1) when using filter or where clause

    因为在extract參数文件里使用了where语句,而where后面的的条件列又不是主键,没有为update.delete操作记录日志,因此会报1008错误. Applies to: Oracle G ...

  2. C语言中main函数的參数具体解释

    main函数的定义形式         main函数能够不带參数,也能够带參数,这个參数能够觉得是 main函数的形式參数.C语言规定main函数的參数仅仅能有两个,习惯上这两个參数写为argc和ar ...

  3. Effective C++:条款25:考虑写出一个不抛异常的swap函数

    (一) 缺省情况下swap动作可由标准程序库提供的swap算法完毕: namespace std { template<typename T> void swap(T& a, T& ...

  4. fscanf()功能具体解释

    一旦文件被解析常规时间或使用正则表达式.或者是敲自己太傻代码来解析一个普通文件. 今天突然发现c该图书馆有一个现成的文件可以解析常规功能,这是fscanf()功能.哎 曾经自己做了这么多无用功.在这里 ...

  5. cocos2d-x3.0数据结构

    1.cocos2d::Vector 1.头报价"CCVector.h"头文件. 2.保存的数据类型必须是cocos2d::Ref的子类. 3.实现是动态加入数据集合即链表.主要的使 ...

  6. JAVA网络编程Socket常见问题 【长连接专题】

    一. 网络程序运行过程中的常见异常及处理 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行new ...

  7. 使用CMakeLists.txt 判断编译器是否支持C++11

    #将下面的内容添加到CMakeLists.txt当中include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11&quo ...

  8. [Windows Phone] 在 Windows Phone 8 控制闪光灯

    原文:[Windows Phone] 在 Windows Phone 8 控制闪光灯 ? 前言 在 Windows Phone 如果想要控制闪光灯,该怎麽做?在 Windows Phone 8 提供类 ...

  9. java单元测试(Junit)

    JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),供Java开发人员编写单元测试之用. 对不同性质的被 ...

  10. FTP文件操作之创建目录

    前面几篇博客讲的都是对文件的操作,今天跟大家说一说对目录的操作,先让我们从创建目录开始说起吧. 创建目录很简单,首先创建一个ftp对象,然后将参数传进去,接着告诉ftp对象需要执行什么操作即可. 下面 ...