欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Struts2的第一个入门实例(一) 博客分类: Struts2 SpringStrutsF#IOCJSP 

程序员文章站 2024-02-19 20:58:34
...

 

Struts2有自己的圈子了,我也写一个Struts2的入门实例吧。<o:p></o:p>

本人是从Struts1Spring MVC过来的,发现Struts2与前面两种MVC有很大区别,不过总的来说Struts2代码量更少一些,但配置文件都没有多大变化,还是换汤不换药,这个例子并未采用Annotation方式,所以还是以XML配置文件为主。<o:p></o:p>

首先我们先来搭建环境:<o:p></o:p>

我用的是WinXP2+MyEclipse6.0 Struts2的包是2.09的。先在MyEclipse建立一个Web项目,叫struts2_base如图:

   

系统会自动生成一些常用的文件夹和配置文件。把下面几个包复制到lib里:<o:p></o:p>

1.       ognl-<st1:chsdate month="12" islunardate="False" day="30" year="1899" w:st="on" isrocdate="False">2.6.11</st1:chsdate>.jar<o:p></o:p>

2.       struts2-core-<st1:chsdate month="12" islunardate="False" day="30" year="1899" w:st="on" isrocdate="False">2.0.9</st1:chsdate>.jar<o:p></o:p>

3.       xwork-<st1:chsdate month="12" islunardate="False" day="30" year="1899" w:st="on" isrocdate="False">2.0.4</st1:chsdate>.jar<o:p></o:p>

4.       freemakerker-2.38.jar<o:p></o:p>

打开web.xml,修改成以下配置:

xml 代码
  1. <!----><!----> version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  6.   
  7.     <filter>  
  8.         <filter-name>struts2filter-name>  
  9.         <filter-class>  
  10.             org.apache.struts2.dispatcher.FilterDispatcher   
  11.         filter-class>  
  12.     filter>  
  13.   
  14.   
  15.     <filter-mapping>  
  16.         <filter-name>struts2filter-name>  
  17.         <url-pattern>/*url-pattern>  
  18.     filter-mapping>  
  19.   
  20.   
  21.     <welcome-file-list>  
  22.         <welcome-file>index.jspwelcome-file>  
  23.         <welcome-file>index.htmlwelcome-file>  
  24.         <welcome-file>index.htmwelcome-file>  
  25.     welcome-file-list>  
  26.   
  27. web-app>  

到现在为止,剩下的工作就是如何使用Struts2了。上面的步骤永远是相同的,就是一个复制粘贴的过程,同你自己写的Servlet,Filter的配置没有什么区别。

<o:p> </o:p>

既然是MVC,那这三层是缺一不可。<o:p></o:p>

1.先来Model层:<o:p></o:p>

HelloWorld.java<o:p></o:p>

 

  1. /*************************************************  
  2.   @Copyright (C), 2007, Zheren Huinen   
  3.   @File name:      HelloWorld.java  
  4.   @Author:         Superleo  
  5.   @CreateDate:     2007-9-29   
  6.   @Description:    HelloWorld实体类      
  7.   @Extends:          
  8.   @Implement:        
  9.   @Function List:   
  10.     1. public String getWords()  
  11.             返回设定的字符串  
  12.     2. public void setWords(String words)  
  13.             设置字符串  
  14.       
  15.   @History:  
  16.     <author></author>      <time></time>          
  17.     Superleo    2007/9/29     1.0       建立HelloWorld实体   
  18.       
  19.  *************************************************/  
  20. package com.superleo.po;   
  21.   
  22. public class HelloWorld {   
  23.     private String words;   
  24.   
  25.     public String getWords() {   
  26.         return words;   
  27.     }   
  28.   
  29.     public void setWords(String words) {   
  30.         this.words = words;   
  31.     }   
  32.   
  33. }   

 

 

java 代码

建立一个简单的对象,应该对象只有一个属性words。这样,Model层就算是完成了。

<o:p> </o:p>

2.再来实现Controller层。

HelloAction.java

java 代码
  1. /*************************************************  
  2.   @Copyright (C), 2007, Zheren Huinen   
  3.   @File name:      HelloAction.java  
  4.   @Author:         Superleo  
  5.   @CreateDate:     2007-9-29   
  6.   @Description:    HelloAction控制类      
  7.   @Extends:          
  8.   @Implement:        
  9.   @Function List:   
  10.     1. public HelloWorld getHelloWorld()  
  11.             返回一个HelloWorld实体  
  12.     2. public void setHelloWorld(HelloWorld helloWorld)   
  13.             设置一个HelloWorld实体  
  14.     3. public String execute()  
  15.             执行Action的方法  
  16.       
  17.   @History:  
  18.     <author></author>      <time></time>          
  19.     Superleo    2007/9/29     1.0       建立HelloWorld实体   
  20.       
  21.  *************************************************/  
  22. package com.superleo.controller;   
  23.   
  24. import com.opensymphony.xwork2.ActionSupport;   
  25. import com.superleo.po.HelloWorld;   
  26.   
  27. /**  
  28.  * @author Administrator  
  29.  *   
  30.  */  
  31. public class HelloAction extends ActionSupport {   
  32.   
  33.     private static final long serialVersionUID = 1L;   
  34.   
  35.     private HelloWorld helloWorld;   
  36.   
  37.     public HelloWorld getHelloWorld() {   
  38.         return helloWorld;   
  39.     }   
  40.   
  41.     public void setHelloWorld(HelloWorld helloWorld) {   
  42.         this.helloWorld = helloWorld;   
  43.     }   
  44.   
  45.     @Override  
  46.     public String execute() {   
  47.         return SUCCESS;   
  48.     }   
  49.   
  50. }   

 

 

也没有什么好说的,和实体其实感觉上还是一样的。这就是Struts2的高明之处――你的Action不会到外都是request, response, session这些耳熟能详的对象了,一切变的简单了,这个转变估计也是需要时间来体会它的巧妙(当然request, response, session还能正常使用,这个例子太简单了,就没用上。)

在这里,要注意这个“return SUCCESS;

这个SUCCESS是事先定义好的常量,意思是如果执行没有问题,则跳转到SUCCESS指定的页面。于是在SRC下建立下面的配置文件:

<o:p> </o:p>

<o:p> </o:p>

struts.xml

Java语法一样,第一看挺吓人的,这么多,一大堆。其实熟悉以后就发现只有那么几个东西配置来配置去的,而且常用的也只有那几个。<o:p></o:p>

xml 代码
  1. <!---->
  2.         "http://struts.apache.org/dtds/struts-2.0.dtd">  
  3. <struts>  
  4.     <!---->  
  5.     <include file="struts-default.xml" />  
  6.   
  7.     <!---->  
  8.     <package name="default" extends="struts-default">  
  9.         <action name="hello"  
  10.             class="com.superleo.controller.HelloAction">  
  11.             <result name="success">success.jspresult>  
  12.             <result name="input">index.jspresult>  
  13.         action>  
  14.   
  15.     package>  
  16. struts>  

配置文件这东西和

在这个配置文件里,我们把自己定义好的HelloAction类配置好,并给它起了个别名叫“hello,View层页面调用.<o:p></o:p>

xml 代码
  1. <result name="success">success.jspresult> 执行成功跳转的页面   
  2. <result name="input">index.jspresult>  执行失败跳转的页面(这里还涉及到一个验证的问题,具体请看下次第二个版本。)   

 

 

最后就是View层了,这里只有两个很简单的页面:

View1 index.jsp

<o:p>

<o:p></o:p>

xml 代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2.   
  3. >  
  4. <html>  
  5.   <head>  
  6.     <title>你好,世界title>  
  7.     <meta http-equiv="pragma" content="no-cache">  
  8.     <meta http-equiv="cache-control" content="no-cache">  
  9.     <meta http-equiv="expires" content="0">       
  10.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  11.     <meta http-equiv="description" content="This is my page">  
  12.   head>  
  13.      
  14.   <body>  
  15.        
  16.     <form action="hello.action" method="post">  
  17.         <fieldset>  
  18.             <legend>Struts2入门实例legend>  
  19.             <p>  
  20.                    
  21.                 <label id="helloWorld.words">请输入你想说的话:label>  
  22.                                 <input type="text" name="helloWorld.words" value="试试看!" />  
  23.             p>  
  24.             <p>  
  25.                 <input type="submit" value="提交" />  
  26.             p>  
  27.         fieldset>  
  28.     form>  
  29.        
  30.        
  31.   body>  
  32. html>  
OK一切装备完成,最后,你的目录结构是这个样子:<o:p></o:p>

<o:p>   </o:p>

<v:shapetype id="_x0000_t75" o:spt="75" coordsize="21600,21600" stroked="f" filled="f" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"></v:shapetype><v:stroke joinstyle="miter"></v:stroke><v:formulas></v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f><v:path gradientshapeok="t" o:extrusionok="f" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock><v:shape id="_x0000_i1025" style="WIDTH: 210.75pt; HEIGHT: 267pt" type="#_x0000_t75"></v:shape><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\22\clip_image001.png" o:title=""></v:imagedata><o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

发布你的系统,开始运行吧! 好运<o:p></o:p>

 

 

View2 success.jsp

<o:p>
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2.   
  3. <!---->>  
  4. <html>  
  5.   <head>  
  6.     <title>成功啦title>  
  7.     <meta http-equiv="pragma" content="no-cache">  
  8.     <meta http-equiv="cache-control" content="no-cache">  
  9.     <meta http-equiv="expires" content="0">       
  10.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  11.     <meta http-equiv="description" content="This is my page">  
  12.   head>  
  13.      
  14.   <body>  
  15.     <!---->  
  16.     您所输入的文字是:${helloWorld.words} <br>  
  17.        
  18.   
  19.        
  20.   body>  
  21. html>  
xml 代码
</o:p>
</o:p>