版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章 第一个Struts2应用本章将通过一个简单的例子向读者展示Struts2的魅力,虽然只是惊鸿一瞥,但是通过这个例子读者将初步掌握Struts2的开发环境配置,以及基于Struts2的web应用开发的基本方法,还为这个例子增加一些高级特性拦截器。在了解了这些特性之后希望读者能对Struts2的优点有进一步的了解。在这章中,将从最基本的工具安装开始说起,包括开发环境的建立和配置,如TOMCAT,JDK的安装配置,Eclipse的安装配置以及使用。接下就会了解Struts2的一些jar文件,以及怎样配置成功一个Struts2的项目,怎样添加jar包等等知识。有了上面的基础之后就来欣赏一个St
2、ruts2的基本Action示例,通过一个完整的Action的例子为读者介绍Action的基本方面,最后通过一个高级输入特性向读者展示Struts2的特性,而且在本章后面读者可以了解到一个最简单的自定义拦截器的实现方式。2.1 Struts2开发环境配置本书中进行Struts2开发的环境是JDK1.5.10+Tomcat5.5.20+。这三款软件可以到Sun & Open Symphony & Apache站点进行下载。在调试和运行书中所提供的代码时,推荐使用与本书相同的配置进行开发,因为在Struts2的开发环境中,并不一定是越是新的就越好。而且新的版本可能会存在与旧的版本以
3、及其它软件版本环境之间的兼容性问题。 JDK和Tomcat的安装与配置JDK的安装与配置1. for windows installer并双击安装,如图2-1。图2-1 安装初始画面2. 一路按提示下去就可以正确的安装,安装完毕之后就是一些环境变量的设置:l 在本例中设置JAVA_HOME=D:javajdk-。l 将JAVA_HOMEbin路径添加到环境变量path。读者首先新建一个变量,命名为JAVA_HOME,填入相应路径。再在环境变量Path中添加相应路径即可。3. 测试,在命令行模式下输入javac命令,如果显示相应的选项则表示安装成功。注意:由于NETBEANS IDE 是和JDK
4、捆绑在一起的,接下来安装NETBEANS IDE,但是不用担心,如果不喜欢的话,安装完毕之后卸载即可。TOMCAT容器的安装和配置进行Java Web开发的时候,编写的服务器端程序如(JSP | Servlet),其本身并不是可执行的文件,需要一个环境来运行它。在Struts2的开发过程中,需要一个容器环境来试运行Struts2应用,这样的容器有很多,比如Resin,Weblogic,JBoss以及TOMCAT。在这里推荐使用TOMCAT,首先因为它是开源的;其次,其配置也是最简单的,当然在轻量级的应用中它也是最常用和最受欢迎的。Apache Tomcat的下载地址:Tomcat 在Windo
5、ws下的安装是十分简单的,读者只需要从其官方站点下载其自解压安装版本For Windows Installer,一路往下点击安装即可。安装开始的界面如图2-2所示:图2-2安装的初始画面:在提示选择安装的组件的时候,建议选择完全安装并勾选所有的组件,以避免在后期的开发调试过程中遇到不必要的麻烦,如图2-3。图2-3组件选择界面接下来的画面是提示对TOMCAT的管理进行一些最基本的配置,如图2-4图2-4 管理员密码设置画面此处设置TOMCAT服务的端口号,一般设为8080(缺省值),TOMCAT管理员账号和密码,请记住自己的设置,因为在后来的管理和配置过程中,TOMCAT会要求输入这个账号和密
6、码。然后选择JDK的位置,请正确配置JDK的位置,否则可能造成TOMCAT无法启动,如图2-5所示。图2-5 JDK的配置页面继续点击直到安装完成,安装完成后设置好TOMCAT_HOME和CATALINA_HOME这两个环境变量就可以了,在本例中应该这样配置:TOMCAT_HOME= D:Program FilesApache FoundationTomcat5.5 CATALINA_HOME= D:Program FilesApache FoundationTomcat5.5配置完毕之后,在浏览器的地址栏里面输入http:/localhost:8080/如果出现下面的一张图,TOMCAT已经
7、可以正常工作了,成功页面如图2-6。图2-6 登录成功页面2.1.2 MyEclipse的安装和配置在这里向大家介绍一个工具,便于开发。MyEclipse相信大家都很熟悉的,它是Eclipse的一个插件,现在来看看安装与配置。大家先上网下载Eclipse压缩包和MyEclipse插件。Eclipse解压就可以用了,而MyEclipse是要安装的。在这里提醒一句,Eclipse是可以汉化,至于怎么汉化,大家上网可以下载一个汉化的插件,覆盖就可以了。笔者在这里用的版本是Eclipse。把Eclipse压缩包解压到自己喜欢的目录下,然后再把汉化包覆盖一下,这样可以完全汉化MyEclipse。下面是M
8、yEclipse安装的初始画面,如图2-7:图2-7安装初始界面然后按照向导一路安装下去,在这提醒一句,当出现下面这个画面时,如图2-8:图2-8选择Eclipse的路径这里选择的是刚才Eclipse解压到的路径。这样就完成安装了,再打开Eclipse就可以看到如图2-9的画面。图2-9安装好的Eclipse在圆圈处是配置Tomcat和JDK的图表标示,点击之后会出现如如图2-10的画面,:图2-10 Tomcat配置界面在红色标记的地方点击之后会出现右边界面,在箭头处选择Tomcat安装的路径,在上面界面中要选择Enable,一切完成后,进入JDK配置,还是在红色标记处,选择JDK,会弹出一
9、个下面画面,选择Add,如图2-11:图2-11 JDK配置界面在图2-11中选选择JDK路径就可以了。现在可以测试一下Tomcat有没有配置成功,点击先前的配置图标启动Tomcat,如图2-12所示:图2-12 启动Tomcat这样Tomcat配置成功之后,会在控制台见到这样的画面,如图2-13:图2-13 登陆成功界面红色标记的地方表示Tomcat配置成功,如果有错误,也会在控制台展示哪里出现了错误。2.1.3 Struts2的安装到Struts的官方网站上去下载压缩包,将其解压到适当的文件夹。解压之后的目录下有下面的一些文件夹:l apps 存放的是一些Struts2自带的样例,是可以在
10、Tomca下直接部署的twar包。l docs 里面存放的是一些文档,有各种详细的说明,读者可以仔细看看,很有帮助。不过最新的文档还是上官方网的在线文档l lib 里面存放着要用到的.jar文件,不过不是很全面,许多需要读者自己下载。l src 存放是一些有用资源文件。l j4 存放的是一些Struts2自带的样例,但它们都没有编译,读者要用的话直接部署是没用的。在开发最经常用到的是lib文件夹下面的一些.jar文件。一般Struts2项目必须的.jar文件如下:,。本书中使用Eclipse作为开发工具,下面来看看在Eclipse中怎么添加Struts2项目。首先打开Eclipse,新建一个w
11、eb project项目,在包资源管理器视图下,在这个项目点击右键,选择构建路径下的配置构建路径,如图2-14所示:图2-14 构建路径的选择将会出现如图2-15所示的界面:图2-15 添加外部的jar点击箭头所指的选项,把lib目录下的dafault文件夹中所有的jar文件全部导入。添加jar包后将会出现如图2-16所示的界面:图2-16 包资源管理器视图下的目录最后,还要将刚刚导入的jar文件拷贝到新建的工程的WebRootWEB-INFlib目录下面,拷贝完成后刷新导航器视图将可以看到如图2-17的界面:图2-17 导航器的lib目录后面就可以在Eclipse项目里面通过添加一些文件来配
12、置的项目了。下面将会进入第一个Struts2应用的开发。2.2 创建配置文件配置文件在某种意义上说是Web应用的关键,在开发过程中遇到的很多莫名其妙的错误可能就来源于配置文件的设置。作为一个流行的Web框架,Struts2有很多的配置文件,这里先介绍几个最基本的。web.xml是所有Web应用不可或缺的配置文件,Struts2也不例外。作为一个支持很多高级特性的Web框架Struts2也有其特有的配置文件,例如struts.xml和perties,下面将逐个讲述在第一个Struts2应用里中这些配置文件的详细内容。Struts2项目必须的配置文件:web.xml,strut
13、s.xml。Sperties这个文件是在有些项目才需要配置的。下面来看看具体怎么去配置。2.2.1 配置web.xml文件在编写web.xml中至少要包含以下两部分的内容:定义<filter>的节点,定义<filter>所映射URL模式。还可以定义一个项目默认访问的首页。在下面的例子中,<filter>节点对应的类为;其URL模式为*,即匹配所有的URL模式;默认的首页为index.html。这是可应用于Struts2的web.xml的最基本形式了。当然,也可以在web.xml中增加更多的其它的配置项,比如增加对spring等其它开源项目
14、的支持。web.xml是任何Web应用都不能少的配置文件,它存放的路径是在WebRoot这个目录下的,千万不要存放错位置。web.xml<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_9" version="2.4" xmlns=" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation=" <!-
15、 在Tomcat中对项目的描述部分 -> <display-name>Struts 2 </display-name><!- 在部署之前,先清除环境 -> <filter> <filter-name>struts-cleanup</filter-name> <filter-class> </filter-class> </filter> <filter-mapping> <filter-name>struts-cleanup</filter-name&
16、gt; <url-pattern>/*</url-pattern> </filter-mapping><!- 部署filter的名称以及对应的类 -> <filter> <filter-name>struts2</filter-name> <filter-class> </filter-class> </filter><!- 配置filter对应的url模式 -> <filter-mapping> <filter-name>struts2&
17、lt;/filter-name> <url-pattern>/*</url-pattern> </filter-mapping><!- 配置这个项目对应的默认的首页 -> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list></web-app>第一句代码是为了标识文件的编码风格,形成统一的编码标准,可以避免乱码现象。接下来就是DTD的配置,关于DTD的相关知识不再介绍。文件前
18、面两个节点的配置,在上面没有提到,其实它的配置并不是必须的,只是一种好的风格。作用就是,在部署这个项目之前先清除以前在Tomcat中遗留的一些干扰信息,这样就不会对新的项目部署产生干扰。整个web.xml就是在项目中要先配置一个FilterDispatcher,拦截类似于.jsp、.vm的请求,然后寻求相应的Action去执行。当然还可以使用Struts2提供的标签,其他的框架为了使用标签就是要单独配置一个标签的节点,譬如WebWork,但是Struts2为我们提供了方便,进行了默认的配置。其实大多数web应用的web.xml文件都是按照这样配置。注意:在做上传文件的时候,一定要在web.xm
19、l中增加ActionContextCleanUp这个filter,如果不增加,会发生第一次上传取不到文件的情况。2.2.2 配置Struts2.xml文件作为Struts2最核心的配置文件,Struts2所有高级特性的相关特性都在这里进行定义,包括Action,Interceptor,Velocity视图等等。下面的Struts2.xml所示的是这一章后面实例的所有配置,有<Action>结点是对Struts2的Action的配置,有<Interceptor>结点是对Struts2拦截器的配置,还有Velocity视图模板结点的配置。Struts.xml<?xml
20、 version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-/Apache Software Foundation/DTD Struts Configuration 2.0/EN" "/dtds/struts-2.0.dtd"><struts> <constant name="struts.devMode" value="true" /&
21、gt;<!- 在包中导入Struts自带的配置文件struts-default.xml -> <package name="default" extends="struts-default"> <!- 配置自己定义的拦截器 -> <interceptors><interceptor name="greeting" class="example.GreetingInterceptor"></interceptor> </intercepto
22、rs> <!- 配置系统自带的拦截器栈 -><default-interceptor-ref name="completeStack"></default-interceptor-ref> <!- 配置自己定义的Action -><action name="helloworld" class=" example.helloworld"> <result name="success">hello.jsp</result> <
23、;result name="input">name.jsp</result></action><action name="greeting" class=" example.GreetingAction"> <result name="success" type="velocity">ex01-result.vm</result> <!- 显示使用自己定义的拦截器 -><interceptor-ref name=
24、"greeting"></interceptor-ref></action></package></xwork>第一句代码的功能也是为了统一的字符编码,和web.xml采用一样的编码风格。接下也是对应的DTD的说明。<constant name="struts.devMode" value="true" />这个标签是表示现在采用的是否为struts2开发模式,在开发模式下会报错,如果是在开发阶段值就要设置为“true”,便于开发,如果是最终完成后就设置为“false”
25、。在struts.xml文件中,需要配置拦截器,以及自己添加的Action,是在一个package标签之间配置的,通过extends属性把Struts自带的配置文件struts-default.xml导入。上面关于自己定义的拦截器配置是后面的例子要用到的,以及第二个greeting Action也是的。在helloworld这个例子中,默认的Struts2文件一定要导入,其次就是配置helloworld Action。在页面上会提交数据给Action,然后Struts2就会根据给的Action名字,就到struts.xml文件中查找,找到Action对应的类,最后就给相应的类进行处理。还可以根
26、据执行的不同返回结果,选择不同的返回页面。在这个配置文件里,重点是声明自定义的拦截器,通过interceptor标签的声明告诉系统自定义的拦截器。注意:struts.xml和web.xml处于不同的目录下。struts.xml存放在WebRootWEB-INFclasses下,而web.xml存放在WebRoot目录下,大家切记。2.2.3 配置Sperties文件Sperties是用来定义application范围的设置,以及那些能够改变框架功能的配置参数。虽然它不是必须的,当打算改变其默认情况时,必须修改对应的部分。由于应用很简单所以这个配置文件只有
27、一句代码:pertiesStruts.tag.altSyntax=true这行代码是告诉Struts2将使用新的标签语法。这个文件是存放在WebRootWEB-INFclasses下的,千万不要放错了。所以要用Eclipse来开发,这样可以避免要在不同的目录下切换。这样,基本配置算是完成了。下面具体来看Action了。2.3 第一个Action这个Action就是在浏览器地址栏输入指定的URL之后,将会产生出现一个拥有问候信息”Hello World”的页面。 创建helloworld.action在Struts2里面所有的控制部分都是由Action来完成的,虽然可以把这句
28、问候信息直接加到JSP页面里面,但是为了展示Struts2的魅力,在这里暂且大材小用,用Action来完成这个功能。这段代码要完成的功能很简单,当浏览器向服务端请求这个Action的时候,服务端启动编译并运行这个Action,在这个页面里面设置了一个message字段。而这个字段将被后续的页面使用到。设置完Action的message字段之后,服务端简单的把请求转向hello.jsp页面。这个Action存放的目录是:wwsrcexample下。helloworld.javapackage example;import com.opensymphony.xwork2.ActionSupport
29、;SuppressWarnings("serial")public class helloworld extends ActionSupportpublic String message;public String execute()message = "hello world!n"return SUCCESS;public String getMessage()return message;在这个Action中,有一个成员变量message,并且定义了getter方法,这是一种JavaBean模式,通过这种模式Action中的成员可以从页面获取,在ex
30、ecute()函数中只是简单为message赋值,最后返回一个成功的字符串,作为整个Action的返回类型,通过返回类型就可以在struts.xml文件找到对应的返回页面。execute方法是任何一个Action都必须实现的方法,也是Action中核心的操作。注意:SuppressWarnings("serial")这句代码MyEclipse为了除去警告而添加的,无关紧要的。 在struts.xml中配置Action在有了这段代码之后,为了使用Struts2提供的基础框架,必须向Struts2注册这个Action。于是在struts.xml中添加action子元素。对应的配
31、置代码如下所示:<action name="helloworld" class=" example.helloworld"><result name="success">hello.jsp</result></action>这段XML告知Struts2基础框架,将要使用一个名为helloworld的Action,这个Action对应的类的位置为example.helloworld.java。它有一个名为success 的结果页面hello.jsp与之对应。 创建视图hello.jsp下面
32、要写一个显示页面来输出hello world!的字样,也就是上面Action中定义的message中的内容,至于为什么会联系起来,那将会在后面的章节进行讲解,希望读者继续下去。hello.jsp存放的目录是:wwWebRoot。hello.jsp<% taglib prefix="s" uri="/struts-tags" %> <html><head><title>Hello Page</title></head><body>The message generated
33、by my first action is:<s:property value="message" /></body></html>、第一句代码是表明前缀s和Struts2标签路径URI之间建立映射关系,这个URI就是前面提到的,Struts为我们默认定义的。前缀s就是表明所有用到Struts2标签的地方就要加上前缀s。在这个页面上就是使用了一个property标签,这个标签包含了一个value属性值,通过设置values的值,标签就可以从Action中获得相应表达式的内容,也就是通过上面Action中定义的getMessage()函数来
34、完成的。 测试Action所用文件编辑完成后,最终的文件目录层次结构将如图2-18所示。实际有用的文件都是在WebRoot目录下的。注意:图中的文件目录还包含后面的拦截器例子,大家可以先不管它。有一个细节要告诉读者,在src的文件夹下可以放struts.xml文件,它会自动在相应的目录下复制一个。一般.java的文件都在src目录下,它们会自动编译生成.class文件存在/WEB-INF/classes目录下,这些才是可以执行的。图2-18 Web项目的目录层次结构示意图接下来要看看怎么用Eclipse去部署这个web项目,如图2-19所示,点击红色区域所示的工具按钮来部署。图2-19 部署按
35、钮点击图2-19所示的按钮后将会如图2-20所示的界面。在弹出窗口中选择add按钮,在新弹出的窗口中选择Server为Tomcat5,点击确定按钮,如图2-20所示。图2-20配置界面这样配置就完成了,最后如图2-21所示就表明部署成功了。图2-21 部署成功界面然后就可以直接在Eclipse下打开Tomcat,进行检测。注意:如果在运行Tomcat之前,如果修改了.xml、.java文件或者是增减jar包,都要重新部署这个项目,只要点击图上的红色标记的Redeploy按钮就可以重新部署项目。按上面步骤编辑和部署完之后,如果没有什么特殊情况,那么在浏览器输入:http:/localhsot:8
36、080/ww/helloworld.action将看到一个Web页面,只有一行问候语:The Message Generated by my first Action is: Hello World.这是一个最基本的Struts2应用,如图2-22所示。图2-22 成功的显示页面2.4 体验Struts2更高级功能在体验了解最简单的应用之后是不是有一种意犹未尽的感觉呢?是不是觉得这个程序实在是太简单呢?接下来将在上一小节例子的基础上继续展示Struts2的拦截器技术和Velocity视图技术。 处理输入显然,2.3小节的例子实在是太简单了,它甚至连个标签都没有,而且结果也过于单一,似乎其中的A
37、ction也没发挥其作为控制器根据不同结果转向不同页面的作用,下面就来看看控制器的真面目。本节将深化上一小节的例子,该例子的功能大致如下:在name.jsp页面将提示先输入一个用户名,然后页面转向helloworld.action对输入进行分析和处理,根据情况的不同,如果输入不合法,那么控制器helloworld.action就把页面转向到name.jsp给出出错提示信息,并要求继续输入。如果输入合法,那么控制器就会把页面转向到hello.jsp给出友好的欢迎信息。页面的大致流程如图2-23。图2-23页面流转图name.jsp<% taglib prefix="s"
38、 uri="/struts-tags" %> <html> <head> <title>Enter your name</title> </head> <body> <s:if test="message != null"> <font color="red"> <s:property value="message"/> </font> </s:if> Please enter
39、your name: <s:form action = "helloword.action"> < s:textfield name ="name"/> <s:submit/> </s:form> </body></html>name.jsp的功能很简单,提示用户输入name然后将页面转向helloworld.action。在这个action里面,将处理用户的输入,用户的输入保存在name字段里面。在控制器将结果转向页面的时候,不希望页面输出一个空的名字,所以空的名字是不被允许的,同
40、时出于实验的目的,禁止用户输入“w”这个名字。如果字段合法,那么就把用户转向hello.jsp如果不合法,则设置出错信息同时将页面返回name.jsp重新输入。修改后的helloworld.java如下所示:helloworld.javapackage example;import com.opensymphony.xwork2.ActionSupport;SuppressWarnings("serial")public class helloworld extends ActionSupportpublic String message;public String nam
41、e;public String execute()if ( name = null | "".equals(name)|"w".equals(name)message="Blank names or 'w' not allowed"return INPUT;message = "hello "+name+"!n"return SUCCESS;public String getMessage()return message;public void setName(String na
42、me) = name;public String getName()return name;与前面Action不同之处就在于增加一个成员name,因为要从页面接受输入的消息,就要设置成JavaBean模式,再添加一个setter方法。再看看execute方法中通过一个if语句对输入的name进行判断,如果合法就返回成功SUCCESS字符串,不合法的话就返回INPUT字符串,同时还把出错消息赋给message变量,在页面上显示出来。当然不同的返回类型对应了不同的页面。现在要配置struts.xml,这次增加了一个页面name.jsp,要在Action返回SUCCESS的时候进入
43、hello.jsp,而在返回INPUT的时候重新回到name.jsp,就是在输入姓名时输入w时就返回重新输入。struts.xml配置如下:<action name="helloworld" class=" example.helloworld"><result name="success">hello.jsp</result><result name="input">name.jsp</result></action>具体的为什么会这样配置,
44、在以后章节会一步步揭晓谜底。 执行结果在浏览器中输入http:/localhsot:8080/ww/name.jsp,然后再在弹出的页面的姓名框中输入w,就会出现如图2-24界面:图2-24 输入w之后的界面通过阅读代码,也许读者能猜到这个Action的作用了。它对用户在表单中所输入的name进行校验,校验的规则是:空名字以及名字为w是不允许的。如果用户的输入是这两种情况,那么毫无疑问将会被Struts2的Dispather推回到name页面。同时在输入的上方提示出错信息。可以看到简单的几行代码就完成了很强大复杂的功能,这种高效率的代码正是Web程序员所需要的,也是Struts2的魅力所在。现
45、在不必深究每行代码的具体含义,在后面的章节里面将向读者展示这些神奇的功能是如何实现的。 拦截器现在,再看看Struts2的其它技术,将其与一些Java Web框架比较也许读者会有更多更新的感受。在这里实现一个简单的拦截器GreetingInterceptor。它的功能就是在GreetingAction发生之前将其捕获,然后向其Action上下文的Session里面添加问候信息,供GreetingAction使用。拦截器在GreetingAction发生之前将其捕获,并向其ActionContext加入名为greeting的问候字段信息。然后唤醒Action,使其得以继续执行。GreetingI
46、nterceptor.javapackage example;import java.util.Calendar;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import erceptor.AbstractInterce
47、ptor;SuppressWarnings("serial")public class GreetingInterceptor extends AbstractInterceptor public void init() public void destroy() SuppressWarnings("unchecked")public String intercept(ActionInvocation invocation) throws Exception ActionContext ac = invocation.getInvocationConte
48、xt();/取得Action的执行的上下文HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);/通过上下文获得REQUEST对象Calendar calendar = Calendar.getInstance();int hour = calendar.get(Calendar.HOUR_OF_DAY);String greeting = (hour < 6) ? "Good evening" :(hour < 12) ? &quo
49、t;Good morning":(hour < 18) ? "Good afternoon": "Good evening");String name = request.getParameter("name");/从REQUEST对象获得NAMEgreeting = name + " " +greeting;/初始化greeting对象invocation.getInvocationContext().getSession().put("greeting", greeting)
50、;/将信息放入SESSIONString result = invocation.invoke();return result;在这段代码里面,实现了一个简单的拦截器greeting,这个拦截器完成的功能就是初始化一段欢迎信息供页面使用,首先从控制器上下文里面取出Request对象,从而获得用户的用户名信息,同时从取得当前系统时间,然后使用此信息初始化一段欢迎信息,并将其放入Session供页面使用。GreetingAction.java这个Action的功能很简单,其什么事都不需要做,只要将页面转向其结果集SUCCESS就行了。GreetingAction.javapackage examp
51、le;import com.opensymphony.xwork2.ActionSupport;SuppressWarnings("serial")public class GreetingAction extends ActionSupportpublic String execute() throws Exceptionreturn SUCCESS;跟随着GreetingAction,接着跳转到视图,而这个视图将使用Velocity来实现,比较一下,Velocity和传统的JSP页面有什么异同呢?在html文件的代码中可以看到,它只是简单的输出了一个字段而已。ex01-
52、result.vm<html><head><title>Struts2 Tutorial - Lesson 5 - Example 1</title></head><body>#set ($ses = $request.getSession()<p><b>$ses.getAttribute('greeting')! <!从session中取出欢迎信息-></b></p></body></html>注意:既然用到了Velocity技术,那么项目中导入的包也会有所不同,会增加很多包,具体增加什么包,在第八章有详细说明,读者配置这个项目时,导入包的时候可以参考第八章的图8-1。大家肯定不熟悉这种页面编程技术,这是采用了Velocity技术,这种技术在Struts2中已经集成的很好,在后面的章节会详细介绍。它与代码的交互似乎十分简捷便利,当然,这还不是全部,在后面的例子里面读者将会发现它的使用给页面带来的极大便利。至此,代码已经全部完成,缺的只是配置。要把自己添加的拦截器配置之后才可以使用,修改struts.xml如下:struts.xml<?xml
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陕西省西安市未央区浐灞区2023-2024学年五年级上学期期中英语试卷
- 低温仓储冷链物流优化案例考核试卷
- 医药制造业的精细化生产与质量控制方法考核试卷
- 创业空间的融资与资本运作策略考核试卷
- 新高考历史三轮冲刺过关练习专题07 世界近代史(原卷版)
- DB11T 387.3-2013 水利工程施工质量评定 第3部分:引水管线
- DB11∕T 3016-2018 低温食品储运温控技术要求
- 过家家课件教学课件
- 地理土壤课件教学课件
- 淮阴工学院《结构力学》2023-2024学年第一学期期末试卷
- 江苏开放大学2023年秋《公共关系原理与实务050010》过程性考核作业一参考答案
- 学校消防安全培训课件(ppt37张)
- 广联达BIM土建计量平台GTJ2021使用手册
- 幼儿园班级管理实用技巧智慧树知到课后章节答案2023年下白城职业技术学院
- 说课《景观设计》 课件
- 工业园区科技项目申请书
- 麦尔兹石灰窑介绍及市场前景分析资料
- 2019年新版入团志愿书表格Word版(模板)
- 城市轨道交通概论PPT完整全套教学课件
- 呼吸机相关性肺炎诊断、预防和治疗指南(2023年)
- 《红星照耀中国》PPT只是分享
评论
0/150
提交评论