通过代码实例跟我学Struts2框架从入门到精通——Struts2 框架技术特性及工作流程
- 格式:pdf
- 大小:341.61 KB
- 文档页数:12
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简单⼊门⽰例上篇推荐:前⾔ 最近正好有时间总结⼀下,过去的知识历程,虽说东西都是⼊门级的,⾼⼿肯定是不屑⼀顾了,但是对于初次涉猎的⼩⽩们,还是可以提供点参考的。
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中。
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为默认值。
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;●操作集合对象。
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代码,实际上,这种情况很难避免。
有时候,为了达到这个目的,反而带来了更多的代码和沉重的维护成本。
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文件即可添加框架扩展。
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 >动作标签包含其它的公共资源文件,从而形成一个完整结构的页面。