struts语言 初体验

1. 什么是Struts2
struts2是以WebWork的筹划思想为主干,吸收了Struts1的有些有点,建立了卓殊WebWork和Struts1的MVC框架。

始建数组

1.1 WebWork: 强调系统里头的松耦合,使用拦截器来促成控制。
不借助于web容器,
从而解决了框架对ServletAPI的严密耦合,使得测试更加有益。同时,在展现层协理更加多的视图技术,开发更灵敏。

Array.of()方法

ES6为数组新增创设方法的目标之一,是协理开发者在利用Array构造器时避让js语言的一个怪异点。Array.of()方法总会成立一个饱含所有传入参数的数组,而无论是参数的数码与品类。

let arr = Array.of(1, 2);
console.log(arr.length);//2

let arr1 = Array.of(3);
console.log(arr1.length);//1
console.log(arr1[0]);//3

let arr2 = Array.of('2');
console.log(arr2.length);//1
console.log(arr2[0]);//'2'

在使用Array.of()方法创造数组时,只需将想要包涵在数组内的值作为参数传入。

2. struts的优缺点
【优点】
2.1. 兑现MVC方式,结构清晰,使开发者只关注工作逻辑的完成.
2.2. 有添加的tag能够用
,Struts的标记库(Taglib),如能灵活应用,则能大大升高开发效能。别的,就当前境内的JSP开发者而言,除了运用JSP自带的常用标记外,很少开发协调的标志,或许Struts是一个很好的起点。
2.3.
页面导航.页面导航将是事后的一个升华大势,事实上,那样做,使系统的系统尤其分明。通过一个布局文件,即可把握总连串统各部分之间的牵连,那对于前期的保安有着莫大的裨益。越发是当另一批开发者接手这么些项目时,那种优势展示得越来越不问可见。
2.4. 提供Exception处理机制 .
2.5. 多少库链接池管理
2.6. 支持I18N
【缺点】
2.1
转到浮现层时,需求安插forward,每三遍转到浮现层,相信大部分都是平昔转到jsp,而关乎到转会,须求布署forward,如果有十个展现层的jsp,需求配备十次struts,而且还不包涵有时候目录、文件变更,要求再次修改forward,注意,每一次修改配置之后,须求重新陈设整个项目,而tomcate这样的服务器,还必须再一次起动服务器,要是事情转移复杂频仍的系统,这样的操作简捷不可想像。现在就是那样,几十广大个人同时在线使用大家的系列,大家可以想象一下,烦恼有多大。
2.2 Struts
的Action必需是thread-safe格局,它可是允许一个实例去处理所有的伏乞。所以action用到的富有的资源都必不可少统一联合,这么些就引起了线程安全的题目。
2.3 测试不方便.
Struts的每个Action都同Web层耦合在协同,那样它的测试信赖于Web容器,单元测试也很难落实。可是有一个Junit的壮大工具Struts
TestCase可以兑现它的单元测试。
2.4 类型的转换.
Struts的FormBean把所有的数码都看成String类型,它可以应用工具Commons-Beanutils举办项目转化。但它的转折都是在Class级别,而且转化的体系是不行配置的。类型转化时的错误新闻重回给用户也是那多少个艰巨的。
2.5 对Servlet的依赖过强. Struts处理Action时必要求依赖ServletRequest
和ServletResponse,所有它摆脱不了Servlet容器。
2.6
前端表明式语言方面.Struts集成了JSTL,所以它根本使用JSTL的表明式语言来获取数据。但是JSTL的表明式语言在Collection和索引属性方面处理显得很弱。

Array.from()方法

在js中将非数组对象转换为实在的数组是那个费力的。在ES6中,将可迭代对象或者类数组对象作为第三个参数传入,Array.from()就能回到一个数组。

function arga(...args) {
    let arg = Array.from(arguments);
    console.log(arg);
}

arga('cc', 26, 'man');//['cc',26,'man']

3. Struts2 的获取
http://struts.apache.org

辉映转换

假如您想进行尤其的数组转换,你可以向Array.from()方法传递一个辉映用的函数作为第一个参数。此函数会将数组对象的每一个值转换为对象格局,并将其储存在目的数组的照应地方上。

function arga(...args) {
    return Array.from(arguments, value => value + 1);
}

let arr = arga('cc', 26, 'man');
console.log(arr);//['cc1',27,'man1']

比方映射函数要求在目的上干活,你可以手动传递第二个参数给Array.from()方法,从而指定映射函数内部的this值

let helper = {
    diff: 1,
    add(value) {
        return value + this.diff;
    }
}

function translate() {
    return Array.from(arguments, helper.add, helper);
}

let arr = translate('cc', 26, 'man');
console.log(arr);

4. Struts2 的应用

可迭代对象上行使

Array.from()方法不但可以用于类数组对象,也可用来迭代对象。(Set,Map)

  • 4.1 确认环境

数组上的新格局

1) 在品种中引入Struts2 jar包
struts2-core xwork-core ognl fremarker javassist commons-fileupload
commons-io Commons-lang
2) 修改工程的web.xml文件,配置过滤器

find()与findIndex()方法

find()与findIndex()方法均接受七个参数:一个回调函数,一个可选值用于指定回调函数内部的this。该回调函数可承受四个参数:数组的某个元素,该因素对应的目录地点,以及该数组本身。该回调函数应当在给定的因素知足你定义的尺度时回来true,而find()和findIndex()方法均会在回调函数第四回回到true时甘休查找。

两者唯一的区分是:find()方法重临匹配的值,而findIndex()再次来到匹配岗位的目录。

let arr = [1, 2, 3, 'cc', 5, 1, 9];

console.log(arr.find((value, keys, arr) => {
    return value > 2;
}))//3

console.log(arr.findIndex((value, keys, arr) => {
    return value > 2;
}))//2
  • 4.2 代码编写

fill()方法

fill()方法能应用一定值填充数组中的一个或多少个元素。当只是用一个参数时,该办法会用该参数的值填充整个数组。

let arr = [1, 2, 3, 'cc', 5];
arr.fill(1);
console.log(arr);//[1,1,1,1,1];

假设不想改变数组中的所有因素,而只是想改变其中一些,那么可以选取可选的序幕地方参数与停止地点参数(不蕴含停止地方的那么些元素)

let arr = [1, 2, 3, 'cc', 5];

arr.fill(1, 2);
console.log(arr);//[1,2,1,1,1]

arr.fill(0, 1, 3);
console.log(arr);//[1,0,0,1,1];

1)
编写开发处理请求的Action类,并贯彻具体的处理请求的艺术,该措施要求重临一个字符串类型的结果【action类,
extends ActionSupport】
2) 编写struts.xml文件,对Action进行安排【位于src的根目录下】
3) 编写与Action相关的JSP页面

copyWithin()方法

copyWithin()方法与fill()类似,可以一遍性修改数组的四个要素。但是,与fill()使用单个值来填充数组分裂,copyWithin()方法允许你在数组内部复制自身因素。为此你必要传递五个参数给copyWithin()方法:从哪些岗位上马填充,以及被用来复制的数码的起第一地点索引。

//将数组的前两个元素复制到数组的最后两个位置
let arr = [1, 2, 3, 'cc', 5];

arr.copyWithin(3, 0);
console.log(arr);//[1,2,3,1,2]

默许情形下,copyWithin()方法总是会直接复制到数组末尾,但是你还足以提供一个可选参数来界定到底有些许元素会被覆盖。那第多少个参数指定了复制为止的职分(不包蕴该职位本身)。

let arr = [1, 2, 3, 'cc', 5, 9, 17];

//从索引3的位置开始粘贴
//从索引0的位置开始复制
//遇到索引3时停止复制
arr.copyWithin(3, 0, 3);
console.log(arr);//[1,2,3,1,2,3,17]

5. Struts2访问servletAPI对象

类型化数组

类型化数组是有异样用途的数组,被设计用来处理数值类型数据。

  • 5.1
    使用ActionContext类获取ServletAPI对象对应的MAP对

数值数据类型

类型化数组允许存储并操作各个区其他数值类型:

  1. 8位有号子整数(int8)
  2. 8位无符号整数(uint8)
  3. 16位有标志整数(int16)
  4. 16位无符号整数(uint16)
  5. 32位有号子整数(int32)
  6. 32位无符号整数(uint32)
  7. 32位浮点数(float32)
  8. 64位浮点数(float64)

抱有与类型化数组相关的操作和对象都围绕着那多种数据类型。为了拔取它们,你首先需求成立一个数组缓冲区用于存储数据。

【使用Map对象替代ServletAPI中的HttpServletRequest, HttpSession和
ServletContext】

数组缓冲区

数组缓冲区(array
buffer)是内存中蕴含一定数量字节的区域,而具有的品类化数组都基于数组缓冲区。你可以利用下例那样使用ArrayBuffer构造器来创制一个数组缓冲区:

let buffer = new ArrayBuffer(10);//分配了10个字节

也足以采用slice()方法来创立一个新的,包含已有缓冲区部分内容的数组缓冲区。该slice()方法
类似于数组上的同名方法,可以利用伊始地方与停止地方参数,重返由原缓冲区元素构成的一个新的ArrayBuffer实例。

let buffer1 = buffer.slice(2, 5);
console.log(buffer1.byteLength);//3

单纯创设一个缓冲区而不可以写入数据尚未什么样含义。为了写入数据,你须求创设一个视图。

1) 获得request参数 【get()】
ActionContext ac = ActionContext.getContext();
Map request = (Map)ac.get(“request”);

利用视图操作数组缓冲区

数组缓冲区代表了一块内存区域,而视图则是您操作那块区域的接口。视图工作在数组缓冲区或者其子集上,可以读写某种数值数据类型的数目。DataView类型是数组缓冲区的通用视图,允许你对前述所有种种数值数据类型举行操作。

动用DataView首先须要制造ArrayBuffer的一个实例,再在地点创立一个新的ArrayBuffer视图

2) 获取对象的HttpSession对象的Map对象【getSession()】
Map session = ActionContext.getContext().getSession();

循环数组元素的两种方法

在大家的支出进程中都有遇上那样的难题:逐个取出数组中的元素。那么在js中有何措施可以形成这几个工作吧?

3) 获取相应的ServletContext对象的Map对象 【getApplication()】
Map app = ActionContext.getContext().getApplication();

for循环

恐怕大家首先能想到的是for循环了,那也是我们最常用的。

let arr = [1, 2, 3, 4, 5];

for (let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

以身作则: Action页面保存用户名: session.put(“name”,”values”);
         JSP页面获取用户名: ${sessionScope.name}

for-in

通过键值(索引)来对数组举办遍历

let arr = [1, 2, 3, 4, 5];

for (let i in arr) {
    console.log(arr[i]);
}
  • 5.2 struts2 向Action
    注入ServletAPI对象对应的Map对象

forEach()

forEach()方法是数组对象的原生方法,用于对数组举办遍历,传入的参数是一个回调函数,该回调函数接收多个参数元素值,元素索引和数组对象

let arr = [1, 2, 3, 4, 5];

arr.forEach((value, key, arr) => console.log(`索引${key}的值是${value}`));

 

for-of

for-of循环在循环每便执行时会调用可迭代对象的next()方法,并将结果对象的value储存在一个变量上。循环进度会持续到结果对象的done属性编程true截止。

let arr = [1, 2, 3, 4, 5];

for (let num of arr) {
    console.log(num);
}
  • 5.3 与Servlet
    API耦合的拜访形式

 

6. Struts 2 标签

标签分为两类: UI标签(UI Tag) 和通用标签 (Generic Tag)
<%@taglib uri=”/struts-tags” prefix=”s” %>

6.1 UI标签: 表单标签、非表单标签、Ajax标签
<s:form></s:form> <s:textfield></s:textfield>
……

6.2 通用标签: 条件标签 <s:if> <s:elseif> <s:else>
迭代标签: <s:iterator>

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图