您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 03-建立你的第一个Struts2应用程序
03-建立你的第一个Struts2应用程序---的应用程序,因为后面还有整合,为了方便,本教程以后的示例都是一次把Struts2.0.6、Hibernate3.2.2、Spring2.0.3的jar文件全部导入/WEB-INF/lib目录下,另外,教程使用的开发工具是Eclipse3.2.2,插件MyEclipse5.1.1,要求JDK1.5、Servlet2.4、JSP2.0版本,应用服务器使用Tomcat6.0。1.打开Eclipse,点击菜单栏中的“文件”---“新建”---“项目...”,我们选择WEB项目(WebProject),如下图所示:______________________________________________________2.单击下一步,我们为项目命名为struts01,如下图所示:______________________________________________________3.其他选项保持默认状态就好,然后单击完成,将Struts2.0.6、Hibernate3.2.2、Spring2.0.3的jar文件复制到struts01项目的lib目录下,然后在项目文件夹夹右键选择“构建配置路径”,建立用户库struts01,将这些jar文件添加到用户库struts01中,这些完成之后,项目结构如下图所示:红色部分是三个框架的所有jar文件______________________________________________________4.在src下建立包net.ilkj,在这个包中建立类App,其实这个类本身没什么用,主要是用它找类的完整类名。______________________________________________________5.打开web.xml文件,因为有Spring,首先配置上下文监听器ContextLoaderListerner,因为在配置文件中的类都需要完整的类名,这个在哪个包下呢?记不住吧?我们这时打开上面新建的类App,在类中输入ContextLoa,然后按下Alt+/,如下图所示:选择我们需要的类,这时会在App的上方生成import的代码,这段代码就是ContextLoaderListener的完整类名,我们将它复制下来,用这个办法,我们找到Struts2的核心FilterDispatcher的完整类名,配置后的web.xml内容如下:还记得上一篇文章说的处理中文乱码的问题吗?这里我们使用Spring的一个类CharacterEncodingFilter完成这个功能,记住Filter是按配置顺序执行的了吗?接受客户请求的时候顺序执行,发送客户响应的时候反序执行,那么CharacterEncoding一定要在FilterDispatcher之前配置,如下图所示:在web.xml中的filter和servlet元素都可以使用init-param子元素为filter-class或servlet-class中的类中的属性传递值,那么我们怎么知道CharacterEncodingFilter中的哪个属性是设置编码的呢?很简单,我们展开用户库struts01,找到spring的jar包,按照web.xml中的完整类名,找到这个类,然后展开这个类的结构,如下图所示:红色线所示的encoding,懂点英语的就应该知道这个单词的意思是“编码”吧?那么很简单,init-param中的子元素param-name自然就是encoding,param-value,value是值的意思,自然是给param-name赋值,我们这里采用UTF-8编码;大家可以看到粉色线所示的方法doFilterInternal(),表示执行过滤方法地方。Filter和Servlet的这一特性非常有用,假设我们要改变编码方式的时候,只需要改动web.xml中的encoding的值就可以了,而不是去打开一个JAVA类,改完值在重新编译,很简单。因为我们知道MyEclipse会自动提示XML的元素,但是元素里面的东东它是不会提示你的(除了JSF、Spring之外),你要是记不住,就用上面这种方法打开类,看看各个属性的意思,就猜到该配哪个属性了!注意:这些属性是区分大小写的,因为它们是通过setXXX()方法被注入!再举个例子,用过Struts1的人知道验证框架吧?Struts1的验证框架要求以注册插件的形式配置验证框架,如下图所示Struts1的配置文件struts-config.xml的部分内容:那么黄色线所示的property的内容怎么知道呢?也就是把value的两个配置文件的位置信息告诉验证框架ValidatorPlugIn的哪个属性呢?用上面的方法,我们找到这个类并展开它,如下图所示:注意到红色线的部分了吗?pathnames,路径的名字,还是复数的形式,那就是说value的值至少是一个,看看人家老外的命名多规范哦!(不过我觉得更规范的命名应该是pathNames,n应该大写!)很显然,自然是把验证配置文件的位置信息配置给这个元素!以后Struts2中的验证框架中的元素中的值大都是采用这种方法找,不在赘述!当然,如果多用几次,你可能就记住了!______________________________________________________6.我们在包net.ilkj下建立子包helloworld,在包helloworld中建包action,在net.ilkj.helloworld.action包中建类HelloWorld,在类中书写方法publicvoidlogin();在net.ilkj.helloworld包下建立包pojo,在net.ilkj.helloworld.pojo建类User,属性为name(String类型)和password(Integer类型),HelloWorld和User类的内容如下图所示:上图为User类上图为HelloWorld类7.我们来配置一下struts.xml,在src(说明:struts.xml要求在类路径,也就是/WEB-INF/classes/目录下,但在MyEclipse的WEB工程结构中,为了方便,隐藏了classes目录,实际上src就相当于classes目录)下新建文件struts.xml,添加DTD文档头(展开用户库struts01,找到struts-core-2.0.6.jar,展开,在包的根目录下我们可以找到struts-2.0.dtd,打开这个DTD文件,找到!DOCTYPE...把它复制出来粘贴到struts.xml的头部就可以了,!以后的验证框架的DTD文档头都是这么配置的,但要注意各个框架的DTD在JAR包中的位置不同,未必都在JAR包的根目录下,要灵活寻找!),在使用include元素配置struts-default.xml,以便我们的action可以使用Struts2提供的默认的配置,如下图所示:______________________________________________________7.你可能注意到红色线所示的部分是什么东东呢?还记得上一篇讲Struts2的基础知识的时候说过,Struts2允许分散配置,因为一个系统有很多部分,我们将HelloWorld相关的东东都放到net.ilkj.helloworld下。下面我们来建struts-HelloWorld.xml,其内容如下图所示:下面看一下项目的结构图:______________________________________________________8.在WebRoot下新建JSP:SayHello.jsp(注意WebRoot和src一样,是MyEclipse为了方便帮我们建立的,实际部署程序运行时是不存在的),其内容如下(请注意看用线标识的部分):______________________________________________________9.Struts2的Action在请求时会生成*.action的样式,这是默认的,那么我们如何修改呢?下面我们在src下新建struts.properties,并将struts-core.2.0.6.jar中的default.properties(在org.apache.struts2包中)的文件中的内容原样复制到struts.properties中,修改struts.action.extension=ok,如下图所示:这样Struts2就会照我们的意思,生成*.ok的样式的Action请求。______________________________________________________下面我们来部署运行程序!你可能注意到程序启动时报错了,打开日志文件说没有找到“/WEB-INF/applicationContext.xml”,你在web.xml使用了ContextLoaderListener监听上下问,怎么不给人家XML文件,我们在/WEB-INF/下建立applicationContext.xml(Spring的DTD文件在sping.jar中的org.springframework.beans.factory.xml包中的sping-2.0.dtd,虽然MyEclipse可以可视化添加它自带的框架版本,譬如用MyEclipse向导添加Struts1.1和Struts1.2支持是很简单的,但我觉得还是要经常自己手动操作,熟悉流程和原理,熟练了再借助开发工具),如下图所示:由于我们并没有使用Spring2.0.3框架,只需要给空内容欺骗一下应用程序就OK了!哈!为了方便,大家最好把log4j.properties放入src目录下,以便观察错误日志。当然,在前一章我提到过出现这个问题的原因,所以你也可以设置struts.objectFactory=com.opensymphony.xwork2.ObjectFactory因为Struts2找到struts2-spring-2.0.9.jar,默认的BEAN工厂已经被Spring的BEAN工厂取代。单独使用Struts2的应用,不必引入Spring,默认的Struts2会自动加载所有的struts-plugin.xml,所以不需要使用的Struts2插件,不要将其jar文件放入lib目录下,否则启动的时候会出现一些问题。当然,这个从另一方面说明了Struts2的强大,它以一种可插拔的模式配置第三方支持(譬如添加JFreeChart支持、JasperReports支持、JSF支持等都是通过一个Struts-***-plugin.jar来实现的,启动程序的时候会自动加载这些jar文件中的struts-plugin.xml文件)。再次启动成功,我们访问:,如下图所示:注意:密码我们定义的是Integer,我们还没有使用转换器或验证框架,请不要填写数字以外的东东哦!单击提交按钮,我们看看Eclipse控制台上的信息,如下图所示:怎么样,相对于Struts1,Struts2是不是很神奇,要知道这里的HelloWorld未继承任何Struts2中的类或实现其接口,User类也是如此,也就是说没有Struts2的API渗入到我们的系统中,但是程序却正常运行,即使删除Struts2的jar包,我们的JAVA文件也不会出现类找到的错误!这在Struts1中是不可能的实现的哦!怎么样,是不是对Struts2开始感兴趣了呢?(如果你没有使用过Struts1框架,可能喜悦感未必会很强烈哦!什么东东都要对比着来看的,反正我学到这的时候,心里真的是很激动,因为这样做在Struts1框架中简直是天方夜谭哦!)这充分证明了Struts2的
本文标题:03-建立你的第一个Struts2应用程序
链接地址:https://www.777doc.com/doc-3090325 .html