Structs2框架

15.1 B/S应用开发历史

servlet/jsp

--JSP Model1--

JSP:收集用户的信息/展示数据/业务代码

JAVA BEAN: 封装数据、处理数据、 高内聚、低耦合

 

--JSP Model2--

M:model(entity,dao,service)

V: view(jsp)

C: controller (servlet)

 

--Struts1--

--WebWork 核心x-work

Struts2(以上合并,核心是x-work)

 

衡量框架的标准:

健壮性:高 稳定

易用性:高 简单

扩展性:高

侵入性:低

 

 

15.2 Strusts2的概念

Strusts2是一种轻量级的MVC型框架,它主要解决了请求分发的问题,侧重点在控制层与视图层。

 

MVC设计模式:

    MVC是经典的设计模式,按照代码的功能不同,将其划分为3个模块,分别是:

M: 模型

    负责数据的封装和处理,比如entity,dao,service等等

V:视图

   负责数据的收集与展示

C:控制

   控制器是模型与视图的桥梁,比如servlet

优势:实现了代码的解耦,适合团队开发,方便后期维护

 

 

 

15.3 Strust2的开发流程

开发流程:

1. 新建一个web工程

2. jar包

3. 配置前端控制器

4. 配置struts.xml文件

5. 编写action

 

 

执行流程:

localhost:8080/appname/namespace/hello

1. 所有的请求经过FC前端控制器

2. FC根据struts.xml文件的配置信息决定调用哪一个action

   -- 根据namespace找到对应的package

   -- 根据hello找到对应的action,从而找到了业务控制器HelloAction

3. 调用Action中的方法

4. 根据Action方法返回的字符串决定调用哪一个result

5. 最后根据result的配置信息输出视图

 

 

15.4 在action中如何获取页面参数值

在action中如何获取页面参数值

url?name=zs

1. 在action中定义一个成员变量,名字与参数保持一致

2. 给成员变量提供get/set方法

 

15.5 在jsp页面如何获取Action属性的值

在jsp页面中如何获取Action中属性的值 ${name}

 

练习:写一个login.jsp

   用户名密码

   在action中获取用户名和密码,判断是否正确

   如果正确,跳转到hello.jsp

   反之,回到登陆页面,并提示错误信息

 17.1Result组件

Result是用于输出的组件,向页面输出一些内容,比如转发、重定向等等,每一个Result是一个类,需要实现一个接口Result。

Struts2中预置了10种返回类型,定义在Struts-default.xml文件中。

 

Result类型

1. dispatcher

默认类型,转发,可以将请求转发给jsp页面

 

2. redirectAction

重定向,将请求发送给另一个action

 

3. stream

用于向页面输出二进制数据,可以将二进制数据发送给发起端。

 

4. json

该类型不在10种范围内,若要使用,需要引入相关jar包(struts2-json-plugin),并将package继承的父包改成json-default。

默认情况下,会将栈顶所有的属性值做成json格式返回。

情况1:可以指定返回的数据

<param name="root" > ognl</param>

注:如果ognl表达式的数据类型是基本类型,直接将数值返回,如果是引用类型,会将结果做成

{key:value,key:value}返回

情况2:可以指定某几个返回的数据

<param name="includeProperties"> flag,userCode </param>

 

完成开通、暂停:

1. 修改starttime以及status的值

2. 重定向到列表页面

 

 

拦截器

19.1 拦截器

用途:适合封装一些通用的处理,便于重复利用,比如登录拦截、参数传递、事务处理。

优势:提供代码的灵活性,方便后期维护扩展。

 

19.2 如何定义拦截器

step1. 写一个Java类型实现接口Interceptor

step2. 重写方法

step3. 配置 struts.xml

 

 

struts06 及netctoss

19.3 上传文件拦截

struts06

xml文件的分割

ognl

16.1 OGNL表达式

1. 是一门功能强大的表达式语言,类似EL

1) 访问基本属性     "属性名"

2) 访问引用类型      "引用类型.属性名"

3) 访问数组、集合    "属性名[下标]"
4) 访问map数据       "属性名.key"

5) 基本运算              "age>18""name+10"

6) 调用方法              "list.size()"

7) 调用静态方法        "@类名@方法名()"

8) 创建集合               "{元素1,元素2...}

9) 创建map             "#{key:value,key:value}"

 

 

16.2 ValueStack

2. ValueStack

   值栈:ognl引擎,stack区,map区

  1) 存数据

   当表单提交时,拉截器可以拦截到表单中的数据,并将数据存放到vs中,ognl引擎,根据拦截到的数据查找(从上往下)stack区   中是否有相同名字的属性,如果有,将拦截到值赋值给该属性。

   2) 取数据  

   ognl引擎根据ongl表达式依次从stack区查找,找到则返回,反之返回空

   

 

 

16.3 struts2的六大核心组件

1. FC

前端控制器,负责请求分发

 

2. Action

业务控制器,负责处理具体业务逻辑

 

3. VS

值栈,是action与JSP数据交互的媒介

 

4. Interceptor

拦截器,负责扩展Action

 

5. Result

负责输出

 

6. Tags

标签,负责显示数据

 

执行流程:

a. 请求发给FC

b. FC根据配置信息确定调用哪一个Action

c. 创建VS值栈对象

d. 创建Action对象,并且将Action放到vs的栈顶

e. 调用Action方法,根据输入属性算输出属性

f.  在调用Action之前或者之后会调用一系列的拦截器

g. 根据Action返回的字符串决定调用哪一个Result组件

h. Result组件根据vs中的数据按照特定的格式将数据输出,通常情况下,是Result转发到JSP页面,在页面中使用tags标签输出数据

 

16.4 el表达式为什么能获取vs中的数据

因为struts2中重写了request.getAttribute的方法

重写了之后,查找的范围依次是pageContext,request,VS,session,application

 

实例练习:

登录功能:

step1. 配置action--> 登录页面

step2. 客户端验证

           非空 合法性(/^[a-zA-Z0-9]{5,10}$/)

           在前端校验的情况下,向服务器发送请求

step3. 业务控制器(AdminAction)-- login.action

           AdminDAO  AdminDAOImpl

           findByUsername(String username)

step4. 根据action返回的result字符串决定调用哪一个result

 

 

 

struts标签

18.1 Struts标签

a. 显示标签

<s:property value="ognl"/>

根据ognl表达式查找vs中的数据,并返回到页面上。

 

b. 循环标签

<s:iterator value="ognl">

   循环体

<s:iterator>

 

<s:debug></s:debug>

 

根据ognl表达式查找vs值栈中的数据,在循环的过程当中,栈顶会有原先的action变成循环对象,此刻action退居到第二位,循环结束之后,栈顶恢复为action

 

<s:iterator begin=""  end=""  var="">

   //循环体

</s:iterator>

一般在分页时用,循环的对象是Integer,没有属性,可以通过<s:property/>取元素值,也可以通过绑定名获取<s:propertyvalue="#p">

 

c. 判断标签

  <s:if test="ognl"></s:if>

  <s:else> </s:else>

 

 

18.2 UI标签

<s:form>

 18.3"修改" 模块练习

 

3.修改

  load.action 加载按钮 --->UpdateCostAction  保存按钮-->updateCost.jsp

  

   点击保存-->修改表中的相应字段-->div显示3秒后消失

  

 

 if

   包月

   基本时长、单位费用不能修改

  

   套餐

   三个输入框数据都可以修改

  

   计时

   基本时长、基本费用都不能修改

  

   点击取消,回到当前列表页面

 

 

 

 

15.6 NETCTOSS练习

NETCTOSS(电信运营支持系统网络版)

NET China Telecom Operation Support Sys

项目背景:

电信有一套unix服务对外出租,需要使用一套系统来解决这类出租业务,实现自动化办公的目的。

使用者:营业员

作用:可以创建账号、查询自费、以及查询用户的消费情况

部署:应用服务器

 

资费列表页面:

1. cost表

2. Cost实体类

3. DAO接口

  List<Cost> findAll() throws Exception

4. 实现类

5. ListCostAction

   输出属性 list

6. costList.jsp  循环遍历将数据展示出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值