通过代码实例跟我学Struts2框架从入门到精通——Struts2 框架技术特性及工作流程

合集下载

struts2框架快速入门小案例

struts2框架快速入门小案例

struts2框架快速⼊门⼩案例struts2快速⼊门: index.jsp------>HelloAction--------->hello.jsp struts2流程 1.导⼊jar包 struts2的⽬录结构: apps: 例⼦程序 docs:⽂档 lib:struts2框架所应⽤的jar以及插件包 src:源代码 core 它是struts2的源代码 xwork-core struts2底层使⽤了xwork,xwork的源代码 注意:在struts2开发,⼀般情况下最少导⼊的jar包,去apps下的struts2-blank⽰例程序中copy 2.创建index.jsp页⾯ 3.对struts2框架进⾏配置 1.web.xml⽂件中配置前端控制器(核⼼控制器)-----就是⼀个Filter(⽬的:是为了让struts2框架可以运⾏。

) <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern></filter-mapping> 2.在src下(对应Tomcat的classes下)创建⼀个struts.xml配置⽂件 ,这个是struts2框架配置⽂件(⽬的:是为了struts2框架流程可以执⾏。

) 4.创建⼀个HelloAction类//要求,在HelloAction类中创建⼀个返回值是String类型的⽅法,注意,⽆参数。

【java开发系列】——struts2简单入门示例

【java开发系列】——struts2简单入门示例

【java开发系列】——struts2简单⼊门⽰例上篇推荐:前⾔ 最近正好有时间总结⼀下,过去的知识历程,虽说东西都是⼊门级的,⾼⼿肯定是不屑⼀顾了,但是对于初次涉猎的⼩⽩们,还是可以提供点参考的。

struts2其实就是为我们封装了servlet,简化了jsp跳转的复杂操作,并且提供了易于编写的标签,可以快速开发view层的代码。

过去,我们⽤jsp和servlet搭配,实现展现时,⼤体的过程是: 1 jsp触发action 2 servlet接受action,交给后台class处理 3 后台class跳转到其他的jsp,实现数据展现 现在有了struts2,实现过程变为 1 jsp出发action 2 struts2拦截请求,调⽤后台action 3 action返回结果,由不同的jsp展现数据 下⾯我们看下,需要的jar包 前⾯两个是apache commons的jar包,暂且忽略 freemarker提供了另⼀种展现⽅式 ognl提供了OGNL表达式 struts2-core提供struts2核⼼包 xwork-core由于struts2很多事基于webwork的,因此也需要这个的核⼼包 我们提供了三个jsp登陆界⾯login.jsp1 <%@ page language="java" contentType="text/html; charset=GBK"2 pageEncoding="GBK"%>3 <%@taglib prefix="s" uri="/struts-tags"%>4<html>5<head>6<meta http-equiv="Content-Type" content="text/html; charset=GBK">7<title><s:text name="loginPage"/></title>8</head>9<body>10<s:form action="login">11<s:textfield name="username" key="user"/>12<s:textfield name="password" key="pass"/>13<s:submit key="login"/>14</s:form>15</body>16</html>登陆成功界⾯welcome.jsp<%@ page language="java" contentType="text/html; charset=GBK"pageEncoding="GBK"%><%@taglib prefix="s" uri="/struts-tags"%><html><head><title><s:text name="succPage"/></title><meta http-equiv="Content-Type" content="text/html; charset=GBK"></head><s:text name="succTip"><s:param>${er}</s:param></s:text><br/></body></html>登陆失败界⾯error.jsp<%@ page language="java" contentType="text/html; charset=GBK"pageEncoding="GBK"%><%@taglib prefix="s" uri="/struts-tags"%><html><head><title><s:text name="errorPage"/></title><meta http-equiv="Content-Type" content="text/html; charset=GBK"></head><body><s:text name="failTip"/></body></html> 当login.jsp触发action时,就会向后抬发送login.action的请求,这个请求被后台拦截,交给struts.xml中配置的action处理1<?xml version="1.0" encoding="GBK"?>2<!DOCTYPE struts PUBLIC3 "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"4 "/dtds/struts-2.1.7.dtd">5<struts>6<!-- 指定全局国际化资源⽂件 -->7<constant name="struts.custom.i18n.resources" value="mess"/>8<!-- 指定国际化编码所使⽤的字符集 -->9<constant name="struts.i18n.encoding" value="GBK"/>10<!-- 所有的Action定义都应该放在package下 -->11<package name="test" extends="struts-default">12<action name="login" class="com.test.action.LoginAction">13<result name="error">/error.jsp</result>14<result name="success">/welcome.jsp</result>15</action>16</package>17</struts>下⾯是LoginAction的代码,可以看到成功登陆后,程序把username写⼊session中。

通过代码实例跟我学Struts2框架从入门到精通——Struts 2框架标签库中的主题和模板相关的应用技术

通过代码实例跟我学Struts2框架从入门到精通——Struts 2框架标签库中的主题和模板相关的应用技术

1.1Struts 2框架标签库中的主题和模板相关的应用技术1、主题和模板的概念(1)模板(template)一些代码,通常使用FreeMarker写成,可以被某些Tag表示出来(通常是UI Tag)。

(2)主题(theme)一组模板打包在一起,提供通用功能的模版。

主题和模板主要针对可视化的标签(Tag)而言,使用以下例子来说明三者之间的关系。

假如我们要开发如下的一个画面,我们使用如下的代码:<s:url action="login" id="loginUrl"></s:url><s:form action="%{loginUrl}"><s:textfield label="Name" name="name"/><s:password label="Password" name="password" /><s:submit></s:submit><s:reset></s:reset></s:form>使用模板可以定义Tag的基本形式,在使用tag的时候,我们只需要指定该Tag的不同属性,即可根据Tag指定的特殊属性,结合模板的基本属性生成可视化的HTML元素。

主题是不同tag结合在一起而形成的。

2、Struts2默认提供了四种主题(1)四种主题中的Simple 主题最简单的主题,示例的效果如下:(2)四种主题中的XHTML主题默认主题,使用常用的HTML技巧,示例的效果如下:(3)四种主题中的XHTML主题使用CSS实现的XHTML主题(4)四种主题中的AJAX主题基于XHTML主题,但是应用了AJAX功能。

3、与四种主题相关的配置在struts.properties文件中有如下项目:struts.ui.theme=xhtmlstruts.ui.templateDir=templatestruts.ui.templateSuffix=ftl其中的struts.ui.theme的值表示的是使用哪个主题,可选项为:xhtml、simple、css_html、ajax,其中xhtml为默认值。

通过代码实例跟我学Struts2框架从入门到精通——Struts 2框架中的OGNL相关技术及应用实例

通过代码实例跟我学Struts2框架从入门到精通——Struts 2框架中的OGNL相关技术及应用实例

1.1通过代码实例跟我学Struts2框架从入门到精通——Struts 2框架中的OGNL相关技术及应用实例1.1.1Struts 2中的OGNL1、Struts 2中的表达式语言(1)Struts 2支持以下几种表达式语言1)OGNL(Object-Graph Navigation Language),可以方便地操作对象属性(使表达式与java对象中的getter和setter属性绑定,且一个OGNL表达式可以进行存和取两方面的操作)的开源表达式语言;2)JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言;3)Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python、Ruby和Smarttalk等)的一些起特性;4)Velocity,严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,具说其性能要比JSP好。

应用表达式语言主要有以下几大好处:1)避免采用Java脚本之类的语句,使页面更简洁;2)支持运算符(如+-*/),比普通的标志具有更高的自由度和更强的功能;3)简单明了地表达代码逻辑,比使用代码更可读与便于维护。

(2)Struts 2默认的表达式语言是OGNLOGNL是一个用来获取和设置JAVA对象的属性的表达式语言。

通过使用表达式语法导航对象图,而不是直接调用对象的获取和设置方法。

使用它的基本原因是它相对其它表达式语言具有下面几大优势:1)支持对象方法调用,如xxx.doSomeSpecial();2)支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名]例如:@ng.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;支持赋值操作和表达式串联如price=100, discount=0.8, calculatePrice(),这个表达式会返回80;●访问OGNL上下文(OGNL context)和ActionContext;●操作集合对象。

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架的拦截器组件技术及应用

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架的拦截器组件技术及应用

(2)在struts-default.xml中定义的默认拦默认拦截器timer组件的示例
将在控制台中出现下面的结果
11、应用了用户自定义的拦截器组件后有可能存在的问题
(1)解决的基本方法 不仅引用自定义的拦截器组件,也对默认的 defaultStack进行引用。 (2)请见下面的示例
(4)编程自定义实 现特定功能的拦截 器,只需要实现拦 截器接口 Interceptor
5、Struts 2框架中的各种形式的拦截器的主要作用
6、实现Interceptor接口创建自定义拦截器 (1)Interceptor接口提供有如下的三个方法
(2)使用init方法可以给拦截器类做必要的初始化操作 ( 3 )应用 destroy 方法可以在拦截器被垃圾回收之前调用, 用来回收init方法初始化的资源。 7 、 intercept() 为拦截器的核心方法,实现具体的拦截功 能
(1)Web Filter和Servlet相互配合、协同工作 Servlet 完成业务功能调度、 Filter 实现系统服务;但 Web Filter 依赖 Servlet 容器并由 Servlet 容器进行生命 周期的管理 (2) Struts2中的拦截器独立于Servlet容器 (3)拦截器是用Java中的“动态代理”和“反射”技术实 现的,并由Struts2的运行时系统程序调度和管理。
(3)在struts.xml文件中定义和引用该拦截器组件
(4)测试该拦截器组件
(5)注意拦截器只能拦截对Action的访问,不能防止用户非 法直接访问的*.jsp页面文件 为此,可以应用Filter组件来控制对*.jsp页面的访问。
10、引用Struts 2框架中的默认拦截器
(1)在struts-default.xml中已经配置了Struts 2框架中 的默认拦截器

第1章Struts2框架技术入门

第1章Struts2框架技术入门
3
1.1.1 Struts2的由来与发展

Struts2是在WebWork2基础发展而来的。和struts1一样, Struts2也属于 MVC框架。,但Struts2和struts1在代码编写风格上几乎不一样的, struts2有以下优点:
Struts2的应用可以不依赖于Servlet API和struts API。 Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等
6
2. Struts2软件包中主要文件
7
(1)apps文件夹:该文件夹中存放基于 Struts2的实例应用,这些实例对学习者来说 是非常有用的资料。 (2)docs文件夹:该文件夹中存放Struts2的 相关文档,Struts2 API、Struts2快速入门等 文档内容。 (3)lib文件夹:该文件夹中存放Struts2框架 的核心类库以及Struts2的第三方插件类库。 (4)src文件夹:该文件夹中存放Struts2框架 的全部源代码。
27
不同的开发者有自己的方式来实现模型组件,
Struts2框架的目的是使用Action来调用模型 组件。例如一个银行存款的模型组件,代码 如【例1-1】所示。
28
29
【例1-1】中的代码是一个完成某一功能的业
务逻辑模块,在执行saving(String accounts,String money)方法时能够通过调用 其他类或者直接访问数据库完成存款功能。 使用业务控制器Action可以调用该业务逻辑 组件在Action的execute()中实现,代码如 【例1-2】所示。
25
26
1.2.2 Struts2的模型组件
模型组件可以是实现业务逻辑的模块,可以

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架系统的标签库及iterator标签的应用示例

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架系统的标签库及iterator标签的应用示例

1.1通过代码实例跟我学Struts2框架从入门到精通——Struts2框架系统的标签库及iterator标签的应用示例1.1.1标签技术概述1、为什么要提出标签库(1)分离页面和逻辑处理几乎是每个MVC框架的重要组成部分。

从Struts1开始,到Webwork2,SpringMVC,都有自己的定义的一套标签库。

但标签库,只是框架的一部分,为了解决页面显示数据、封装简单页面逻辑而产生的类HTML标记的组件。

(2)标签产生的初衷在JSP诞生之初,JSP提供了在HTML代码中嵌入Java代码的特性。

这种特性使得我们可以比较容易的利用Java这种强类型语言的优势,完成许多复杂的业务逻辑。

不过随着时间的推移,我们发现在HTML代码中嵌入过多的Java代码,非常不利于JSP 的维护和扩展。

对于动辄上千行的JSP代码,很多时候,程序员基本丧失了对JSP的维护能力。

基于上述的这个问题,我们尝试使用一种新的技术,来解决上面这些问题。

这也就是标签产生的初衷:1)尽量避免在JSP页面中使用Java代码,而改用类似HTML的标签的形式来表达页面逻辑,让逻辑与显示分离,提高JSP的可维护性;2)由于HTML自身的标签的表达能力不足,通过使用JSP Tag,可以对HTML语义进行扩展,从而完成许多HTML自身标签无法完成的工作2、应用标签技术的优缺点(1)主要的优点1)标签产生的初衷没有错,它的存在,能够简化JSP开发的难度,并对HTML的许多标签进行功能扩展;2)标签从效果上的确在一定程度上解决了在JSP页面中,避免使用Java代码的情况3)由于Java的语法与表现能力上的优势,使用Taglib能够极大程度的封装成块的HTML代码,从而形成一套完整的页面组件,能够极大的简化页面开发(2)主要的缺点●标签只是为了尝试避免在JSP页面中使用Java代码,实际上,这种情况很难避免。

有时候,为了达到这个目的,反而带来了更多的代码和沉重的维护成本。

通过代码实例跟我学Struts2框架从入门到精通——应用Struts2框架时所需要的系统库文件

通过代码实例跟我学Struts2框架从入门到精通——应用Struts2框架时所需要的系统库文件

1.1通过代码实例跟我学Struts2框架从入门到精通——应用Struts2框架时所需要的系统库文件1.1.1Apache官方网站对Struts2框架的主要技术特性介绍1、开发方面(1)容易上手–从教程和模版程序或者Maven原型可以很容易的开发出新项目。

(2)改进的设计–清晰的代码设计对应着独立于HTTP的框架接口。

(3)增强的标签(Tag) - 使用样式表驱动的表单标签以及所提供的标签可以减少编码量。

(4)有状态的复选框(Checkbox) - 避免了特殊的处理代码,职能复选框能感知自己的状态何时被切换。

(5)灵活的取消按钮–取消时直接转向另一个操作(action)。

(6)最好的AJAX 支持–通过使用和标准Struts标签观感一致的 AJAX 标签,可以增加交互性和灵活性。

(7)方便的 Spring 集成–使用Spring向 Action中注入依赖关系,无需编写额外的连接代码或者其它配置。

(同时支持Plexus?)(8)增强的表示层展示–可以将处理结果以JasperReports, JFreeChart, Action 链, 或者文件下载的方式展示。

(9)POJO 表单–不需要ActionForm! 可以使用任何JavaBean 来捕获输入或者直接将属性设置到Action类上。

可以同时使用二进制和字符串类型的属性!(10)POJO Action –使用任何类作为Action 类–甚至接口也是可选的!Struts2是一个标准的Command模式框架实现,并且完全从web层脱离出来。

Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control 依赖倒转控制)容器等。

2、发布方面(1)方便的插件机制–添加JAR文件即可添加框架扩展。

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架入门示例

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架入门示例

1.1通过代码实例跟我学Struts2框架从入门到精通——Struts2框架入门示例1.1.1Struts2 框架的入门示例1、新建立一个Web项目(1)项目名称为sshwebcrm、并且添加JSTL标签库但最好将项目的J2EE系统库的版本选择为J2EE5.0版,以便能够应用MyEclipse的可视化帮助。

(2)设置编译环境为JDK1.6Struts2默认需要Java5的运行环境,和支持Servlet API 2.4,JSP API 2.0的Web容器。

2、在项目中添加图片等资源文件(1)各个资源文件所在的目录当然,如果没有这些资源文件也是可以的,只是更符合实际的应用项目。

(2)最终的结果目录及文件3、在项目中添加index.jsp页面<%@ page isELIgnored="false" pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><title>蓝梦集团CRM系统首页</title><meta http-equiv="pragma" content="no-cache" /><meta http-equiv="cache-control" content="no-cache" /><meta http-equiv="expires" content="0" /><meta http-equiv="keywords" content="蓝梦集团,CRM,账户" /><meta http-equiv="description" content="这是蓝梦集团CRM系统" /></head><body><jsp:include page="/commonPage/pageHead.jsp" ></jsp:include><jsp:include page="/commonPage/navMenuBar.jsp" ></jsp:include><br/><div id="someOnePageContent" ><strong>这是蓝梦集团CRM系统(客户关系系统)的首页内容</strong></div><br/><jsp:include page="/commonPage/authorInfo.jsp" ></jsp:include></body></html>在该页面中应用<jsp:include >动作标签包含其它的公共资源文件,从而形成一个完整结构的页面。

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架和Spring框架相互整合的应用技术

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架和Spring框架相互整合的应用技术
主要为spring.jar(由 Spring提供)和struts2spring-plugin-2.1.6.jar(由 Struts2提供)
3、修改web.xml文件 ( 1 )添加 <contextparam>标签 (2)添加 <listener>标签 (类似于Spring Web Ioc的环境)
6 、修改 struts.xml 文件中的原来 UserInfoManageAction 类 的定义
注意:
这里的 Action 和平常不同的就是 class 属性,它对应 于Spring所定义的bean的id,而不是它的类全名。
7、部署并执行本Web应用 (1)启动Tomcat服务器,并观察控制台上的输出
4、修改struts.xml文件以告知Struts 2运行时使用Spring 来创建对象(如Action等)
在Struts2中每一个对象都是靠ObjectFactory创建的,而 Spring框架就是用来创建和管理对象的。因此,只需要将 ObjectFactory的对象创建方法改为Spring即可。
Struts2框架和Spring框架 相互整合的应用技术
Struts2框架和Spring框架 相互整合的应用技术
在本讲您能了解如下知识点 为什么Strut2要与Spring进行整合 添加Spring的系统包 实现的主要步骤

1、为什么要将Strut2与Spring进行整合 (1)主要的目的 能够在Struts2中应用Spring中的IoC和AoP,使得Action 类也能够有Spring IoC管理。 (2)在Struts2中也已经提供了struts2-spring-plugin2.0.8.jar实现与Spring整合 2、在Struts2的Web项目中 添加Spring的系统包

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架中的业务请求处理器Action组件相关的应用技术

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架中的业务请求处理器Action组件相关的应用技术

7、为什么要将Action类实现Action接口 (1)理解实现接口的基本要求 表面上实现Struts 2的Action 接口没有太大的好处, 仅会污染系统中的Action实现类! (2)实现Action接口可以帮助开发者达到: 更好地实现Action类和强制提供execute()方法 可以“简化”和“规范” execute 方法的返回值、并可 以使execute方法的返回值标准化。
(3)什么场合下需要继承ActionSupport类 因此,如果在应用系统中需要上面的各种应用功能要 求,最好采用继承ActionSupport这个适配器类。
(4)继承ActionSupport类的Action组件类的代码示例
目前尽管继承了ActionSupport类,还没有真正体验到 它的优点!请继续学习…
这些符号常量的含义,可以参考Struts2框架中的 API帮助文档中的说明
4、Struts 2框架中的Action组件类的代码实现示例 但该Action类是采用继承于ActionSupport基类,而 不是纯POJO的实现。
5、Action类可以采用下面的多种实现形式 (1)POJO类——但不推荐采用这样的方式 (2)实现Action接口 (3)继承ActionSupport类
但原来的 Struts 中的 Action 程序类则必须要耦合系统 类 。
(2)Action组件类的返回值是一个轻量级的“字符串”对象 而不是象 Struts 框架中返回“重量级”的 ActionForward 对 象。 当然,为了规范 Action 类的方法返回值以提高代码的 可 读 性 ,在 接 口 com.opensymphony.xwork2.Action 中 定 义 了许多标准的符号常量 ——比如:SUCCESS、ERROR、INPUT、LOGIN和NONE等。

通过实例跟我学Struts2从入门到精通——体验Struts2框架的拦截器组件能够提供“系统的可扩展性”的应用实例

通过实例跟我学Struts2从入门到精通——体验Struts2框架的拦截器组件能够提供“系统的可扩展性”的应用实例

1.1通过代码实例跟我学Struts2框架从入门到精通——体验Struts2框架的拦截器组件能够提供“系统的可扩展性”的应用实例1.1.1动态添加或者删除组件1、在配置文件中除掉对某个拦截器的引用<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.1.dtd"><struts><include file="struts-default.xml"/><package name ="userInfoPackage" extends ="struts-default" ><interceptors><interceptor name ="authorizedUserInterceptor"class="com.px1987.sshwebcrm.interceptor.AuthorizedUserInterceptor" /> <interceptor name ="logInfoInterceptor"class="com.px1987.sshwebcrm.interceptor.LogInfoInterceptor" /></interceptors ><default-action-ref name="defaultActionName" /><action name ="userInfoAction" class ="erInfoAction" ><result name="success">/userManage/loginSuccess.jsp</result> </action><action name ="userInfoManageActionModel"class="erInfoManageActionModel" ><result name="success">/userManage/loginSuccess.jsp</result><!--<interceptor-ref name ="authorizedUserInterceptor" />--><interceptor-ref name ="logInfoInterceptor" /><interceptor-ref name ="defaultStack" /></action><action method="doUpdateUser" name ="updateUserInfo"class ="erInfoAction" > <result name="success">/userManage/loginSuccess.jsp</result> </action><action method="doDeleteUser" name ="deleteUserInfo"class ="erInfoAction" > <result name="success">/userManage/loginSuccess.jsp</result> </action><action name ="*userInfoAction" class ="erInfoAction"method="{1}"><result name="success">/userManage/loginSuccess.jsp</result></action><action name ="defaultActionName" class ="erInfoAction"method="defaultActionMethod"><result name="success">/userManage/loginSuccess.jsp</result><param name="resultMessage">这是在struts.xml文件中为某个Action提供“注入的属性”值</param></action></package></struts>2、再测试和执行该Action类因此,在应用方面具有比较好的灵活性!可以根据项目中的应用的需要,随时动态添加或者删除。

通过代码实例跟我学Struts2框架从入门到精通——Struts 2框架中的转换器相关应用技术及示例

通过代码实例跟我学Struts2框架从入门到精通——Struts 2框架中的转换器相关应用技术及示例

1.1通过代码实例跟我学Struts2框架从入门到精通——Struts 2框架中的转换器相关应用技术及示例1.1.1Struts 2框架中的转换器相关应用技术1、在Web服务器端所获得的数据为String开发Web应用程序与开发传统桌面应用程序不同,Web应用程序实际上是分布个不同的主机(当然也可以同一个主机,不过比较少见)上的两个进程之间互交。

这种互交建立在HTTP之上,它们互相传递是都是字符串。

换句话说,服务器可以的接收到的来自用户的数据只能是字符串或字符数组,而在服务器上的对象中,这些数据往往有多种不同的类型,如日期(Date),整数(int),浮点数(float)或自定义类型(UDT)等,如图1所示。

因此,我们需要服务器端将字符串转换为适合的类型。

同样的问题也发生在使用UI展示服务器数据的情况。

HTML的Form控件不同于桌面应用程序可以表示对象,其值只能为字符串类型,所以我们需要通过某种方式将特定对象转换成字符串。

2、常规的实现方式(1)在服务器端将String---DateDate birthday = DateFormat.getInstance(DateFormat.SHORT).parse(strDate);(2)在表示层<input type="text" value="<%= DateFormat.getInstance(DateFormat.SHORT).format(birthday) %>" />3、利用Struts2框架中的Converter(1)在HTML中,并没有数据类型的概念,任何数据都被当作字符串或者字符串数组来传递(2)Struts2框架为开发者提供了一些内建的类型转换比如基本类型之间的转换、“1984-08-27”格式的字符串能够被正确的转换为Date类型等等或者对于将String转换为int等简单类型,Struts2已经提供。

struts2简单示例

struts2简单示例

struts2简单⽰例今天写⼀个struts2的例⼦,⽬的是为了让⼤家明⽩struts2的基本流程,其实框架没有⼤家想象的那么难,说⽩了struts2的本质就是⼀个⼤的Servlet,即原本需要提交到Servlet处理的部分现在通过配置⽂件将其交给普通的Class类进⾏处理。

⾸先新建⼀个javaWeb项⽬,然后把struts2所依赖的包导⼊到lib下(可以百度⼀下也可以直接到官⽹上下载),然后在web.xml中对struts2进⾏配置,添加的内容如下:1<filter>2<filter-name>struts2</filter-name>3<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>4</filter>5<filter-mapping>6<filter-name>struts2</filter-name>7<url-pattern>/*</url-pattern>8</filter-mapping>在index.jsp中写如下代码:1<form method="post" action="testAction">2名称:<input type="text" name="name"/>3<input type="submit" value="提交"/>4</form>接下来是写struts的配置⽂件struts.xml,内容如下:1<?xml version="1.0" encoding="UTF-8" ?>2<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"3 "/dtds/struts-2.1.dtd">4<struts>5<package name="testaction" namespace="/" extends="struts-default">6<action name="testAction" class="com.struts.action.TestAction">7<result name="success">/success.jsp</result>8<result name="error">/index.jsp</result>9</action>10</package>11</struts>其中⼀个action对应⼀个响应,在index.jsp中action="testAction"所以此处action的name="testAction"这是⼀⼀对应的关系。

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架中的各种核心系统配置文件的应用技术

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架中的各种核心系统配置文件的应用技术

8、struts.properties文件的应用示例 ---解决Struts2中的表单提交时的中文乱码问题
9、体验Struts2对多配置文件的支持
将struts.xml分离为两个不同的配置文件:其中在 struts.xml中存放全局配置定义,而在struts-XXX.xml中存 放与某个模块有关的配置定义——满足团队开发。
努力学习以实现自己的人生理想和目标
1、子曰:“学而不思则罔,思而不学则殆。” “学而时习之”
2、子曰:“知之者不如好之者,好之者不如乐之者”
3、子曰:“三人行,必有我师焉” 4、子曰:“我非生而知之者,好古,敏以求之者也” 5、师者:“传道、授业和解惑”
Struts2框架中的各种核心系统 配置文件的应用技术
Struts2框架中的各种核心系统 配置文件的应用技术
The Emphases in Teaching Materials 在本讲重点了解如下知识点 应用Struts2时所涉及的各种配置文件 默认的核心系统配置项目及配置文件 核心配置文件struts.xml及应用 struts.properties文件及应用 struts.properties常用属性及含义
1、应用Struts2框架时所涉及的各种配置文件 (1)主要的配置文件
(2)这些配置文件的主要功能
2、Struts2框架默认的核心系统配置项目及配置文件
在Struts2的核心系统包文件中包含有struts-default.xml的内容
3、Struts2框架中的核心配置文件struts.xml及应用 (1)Struts2框架中的核心配置文件struts.xml
(2)Struts 2框架支持多种不同的表示层的实现技术
(3)采用Velocity模板技术时的<result>标签定义示例

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架中..

通过代码实例跟我学Struts2框架从入门到精通——如何应用Struts2框架中..

1.1如何应用Struts 2框架中的CheckboxInterceptor和prepare默认拦截器的应用实例1.1.1Struts 2框架中的CheckboxInterceptor默认拦截器的应用示例1、主要的功能此拦截器是针对checkbox表单控件的,当提交的表单里有checkbox时,默认情况下,如果没选中,提交的值是null;如果选中,提交的值是"true"。

CheckboxInterceptor的作用是当没选中checkbox时,提交一个指定的值,而不是null。

2、实现的原理你需要在页面中为每个checkbox指定一个名字为"__checkbox_"+checkbox名的hidden 控件,例如,如果表单有一个名为vip的checkbox,就需要一个名为__checkbox_vip的hidden。

默认的,这个事情不需要你来做,因为Struts2在checkbox的simple模板中已经为你做了,即下面这条语句:<input type="hidden" name="__checkbox_${?html}"value="${parameters.fieldV alue?html}"/>因此CheckboxInterceptor实现原理如下:当提交表单后,CheckboxInterceptor会在请求参数里查找名字以"__checkbox_"开头的参数,如果找到,继续在请求参数里找对应的checkbox参数,如果没找到(表示没有选中该checkbox),就给checkbox参数一个指定的值,默认的,这个值为"false"。

3、可以在struts.xml文件中为某个Action引用该拦截器时设置改变这个值如下示例是将其值改成"no":<interceptor-ref name="checkbox"><param name="uncheckedValue">no</param></interceptor-ref>默认情况下,请求每个action都会调用CheckboxInterceptor,因为在Struts2定义的默认拦截器defaultStack中包含了它。

通过代码实例跟我学Struts2框架从入门到精通——熟悉Struts2框架系统内自带的Demo示例

通过代码实例跟我学Struts2框架从入门到精通——熟悉Struts2框架系统内自带的Demo示例

1.1通过代码实例跟我学Struts2框架从入门到精通——熟悉Struts2框架系统内自带的Demo示例
1.1.1实例struts2-blank-
2.0.11
struts2-blank-2.0.11.war这个项目,它可以告诉你如何搭建一个最最简单的Struts2的项目;它还会告诉你,Struts2至少需要依赖哪些jar包;同时,也给你做出了一些范例,web.xml怎么写,struts.xml又怎么写。

struts2-blank-2.0.11.war这个项目包含了核心精简过的Struts 2 空应用模版,在它的包的WEB-INF/lib 目录下包含了Struts2框架所必须的核心jar 文件。

1.1.2实例struts2-showcase-
2.0.11.2.war
struts2-showcase-2.0.11.war这个项目,可以看到Struts2的特性的大杂烩,这对于你看reference是相当有帮助的。

比如说,你在看文档时看到了“文件上传”的章节,那么你就可以参考项目中的upload子目录。

相当于你一边看文档,一边已经有一个现成的跑得通的例子在这里提供给你。

因为该示例项目列出了几乎所有Struts 2 所支持的功能的示例,包括actionchaining,ajax,chat,filedownload,fileupload,jsf,modelDriven 等等。

浏览该示例的页面:http://127.0.0.1:8080/struts2-showcase-2.0.11.2/index.jsp。

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架中的拦截器相关的应用技术

通过代码实例跟我学Struts2框架从入门到精通——Struts2框架中的拦截器相关的应用技术

1.1通过代码实例跟我学Struts2框架从入门到精通——Struts2框架中的拦截器相关的应用技术
1.1.1与拦截器组件编程实现相关的应用技术
1、为什么要应用拦截器
(1)拦截器其实是对AOP的思想的具体应用
传统的JSP&Servlet架构中,客户端发送一个请求,服务器端生成一个request对象,并执行相应的doGet()或者doPst()方法,最后由response返回一个响应到客户端,整个服务过程结束。

所以所有的业务逻辑功能只能在doGet ()或者doPst()方法中调用,这样整个业务就写死了,如果想增加新的功能,只能修改doGet ()或者doPst()方法,不符合开闭原则(OCP)。

(2)Struts 2框架中的默认截器的工作过程
2、Struts 2框架中的默认拦截器
在Struts2中每发送一个请求都要经过好几层的拦截器最终才到达所调用的action。

由多个拦截器组成的就是一个intercptor-stack,如果扩展了struts-default就默认集成了defaultstack。

里面包含了许多常用的拦截器,比如文件上传时会用到fileUpload,
要调出session对象由servletConfig来做。

因为defaultstack里的拦截器,默认已经配好了,所以无需要专门对这些拦截器进行配置。

3、Struts 2框架中的各种形式的拦截器的主要作用。

通过实例跟我学Struts2框架从入门到精通——如何实现在Struts2框架的Action类中访问Servlet API中的对象

通过实例跟我学Struts2框架从入门到精通——如何实现在Struts2框架的Action类中访问Servlet API中的对象
Map request = (Map) ActionContext.getContext().get("request");
要获得上述对象,关键 Struts 2.0 中 com.opensymphony.xwork2.ActionContext 类。我们 可 以 通 过 它 的 静 态 方 法 getContext() 获 取 当 前 Action 的 上 下 文 对 象 。 另 外 , org.apache.struts2.ServletActionContext 作为辅助类(Helper Class),可以帮助您快捷地获得 这几个对象。
Map application = (Map) ActionContext.getContext().get("application"); application.put("myId",myProp);
Map session = (Map) ActionContext.getContext().get("session"); session.put("myId", myProp);
(ServletContext) ActionContext.getContext().get(StrutsStatics.SERVLET_CONTEXT); 也可以获得转换后的 Map 集合对象:
Map attr = (Map) ActionContext.getContext().get(4;myId",myProp);
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sruts2框架为J2EE Web应用开发者提供了对上面的各个 方面的技术支持,进一步简化Web应用系统的开发实现和提 高开发效率。这也是Struts2之所以能够流行的主要技术原 因。 5、Struts 2框架的控制器组件是Struts 2框架的核心 (1)前端控制器组件 (2)后端业务控制器组件
(3)在web.xml中配置出前端控制器 对于前端控制器采用标准的Filter(过滤器)组件实 现,逻辑更清晰。StrutsPrepareAndExecuteFilter组件 在web.xml配置定义的示例如下:
(7)灵活可扩展的架构:如何支持各种不同的展现层技术? 如何与业务层或数据层的各种框架整合?
(8)安全和访问控制的管理:如何提供基于Web的安全机 制和资源访问控制的管理?
(9)代码实现的简洁和高效:如何让开发步骤和代码维护 变得简单?如何尽量减少开发的中间环节?如何将公共的 功能剥离出来,并可以灵活的组装应用? (10)其它问题 异步调用、国际化支持、文件上传、文件下载、防止 Web表单重复提交等等。
拦截器组件完成系统通用的功能实现,为应用系统提 供统一的功能服务。
8、Struts2 第2部分 框架的请 求响应的 工作流程
第1部分
第3部分
第5部分
第4部分
第1部分:分别代表了客户端的一次Http请求,和服务器端运算结 束之后的一次响应输出(也就是MVC的表示层部分); 第2部分:代表Servlet 过滤器(前端控制器部分); 第3部分:WebWork框架的核心部分; 第4部分:拦截器部分(前端控制器的辅助功能组件) ; 第5部分:需要开发人员自己开发的各个部分的程序,其中包 Action类(后端业务控制器部分) 页面模板 配置文件xwork.xml(在Struts2框架中实际为struts.xml文 件)等。
注: 由于J2EE目前倡导轻量级的服务器技术及POJO编程实 现,因此Struts1.X的系统架构背离了J2EE的发展方向。 而Struts2更好地适应了J2EE技术发展的方向。
4、明确应用系统Web层需要解决的技术问题 (1)数据的输入:如何获得基于无状态 HTTP的请求数据? 如何将请求的字符数据转换为对应的模型对象? (2)输入数据的验证:如何验证输入数据的合法性并给出 明确的错误消息提示 ? (3)数据的输出:如何展现复杂的对象结构?如何处理复 杂的展现逻辑? (4)数据的传递和共享:如何在不同的请求或页面之间传 递和共享数据? (5)页面的流程管理:如何管理Web应用中的页面流程? ( 6 )模块化的管理:如何将复杂的 Web 应用以模块化的方 式管理?
3、Struts2框架与原有的Struts相比,其MVC结构更完整
(1)ActionForm和Action组件类都可以是POJO类,与具体 的框架系统相互隔离 (2)不再需要在Action组件类中耦合有多种HTTP有关的参 数对象,有助于应用单元测试,提高开发效率。 (3)支持多种不同形式的表现层实现技术,完全支持JSP, FreeMarker, 以及 Velocity 标签。 (4)拦截器组件技术,它其实是对面向切面编程AOP的具 体应用,为应用系统提供多层次的系统服务 (5)提供有对Web表单数据验证、表单数据类型转换、页 面信息的国际化、文件上传、下载等Web应用开发中多方 面的“通用技术”的实现支持。
6、Struts2入门示 例(体验Struts2的 主要特性)
7、Struts 2框架的系统架构 (1)前端控制器组件 完成对请求的预处理,并调用相关的请求处理的后端 业务控制器Action组件 (2)后端业务控制器组件 根据请求的类型分别调用不同的业务功能组件,完成 最终的功能处理,并将处理的结果返送到相关的表现层JSP 页面中显示输出。
Struts2 框架技术特性及工作流程
Struts2 in Teaching Materials 在本讲重点了解如下知识点 项目概况及技术特性 前端请求控制器组件 后端业务控制器组件 环境搭建及入门示例 请求响应的工作流程
1、Struts2框架是对WebWork框架升级的结果 Struts2框架是Struts和WebWork2的合并版本,并集成了 这两大流行的MVC框架的各自的优点,它其实是对 WebWork框架的升级,而不只是对Struts框架的升级。 2、Apache官方网站对Struts2的特性介绍 (1)开发方面 (2)发布方面 (3)维护方面
注意:与Struts一样,也没有提供对MVC的“模型层(M)”支持。
努力学习以实现自己的人生理想和目标
1、子曰:“学而不思则罔,思而不学则殆。” “学而时习之”
2、子曰:“知之者不如好之者,好之者不如乐之者”
3、子曰:“三人行,必有我师焉” 4、子曰:“我非生而知之者,好古,敏以求之者也” 5、师者:“传道、授业和解惑”
相关文档
最新文档