博客生活 - 一缕阳光 - Struts起步之Helloword

J2EE

从今天开始,将进入神秘的Struts之旅,因为以前没有Jsp开发经验,猛一看Jsp、Struts、taglib真是乱七八糟的。还好今天几天的Struts研究,总算是有些新的,希望写出来与大家共享,也算是抛砖引玉吧,废话少说,下面开始吧:

在没有Struts经验之前,最好的办法是先建立一个Struts开发平台,先做出一个Hello world的小程序,然后再来研究它实现的原理。

功能说明
在一个jsp页面(HelloWorld.jsp)中,输入你的名字,通过struts 将你的名字加上Helloword字样,然后在另外一个jsp页面(ShowHelloWorld.jsp)显示出来。

试验过程

整个过程大致可以分为下面七个步骤:
1、建立struts开发环境。
2、写Helloword jsp页面
3、写struts 中hello word Action实现
4、写struts 中hello word ActionForm实现
5、写显示Helloword jsp页面
6、配置web.xml文件
7、配置struts_config.xml文件

建立struts开发环境

我使用的开发环境是Lomboz  现在已经支持Eclipse3.1,现在lomboz已经将Eclipse3.1集成在一起提供下载,可以直接下载lomboz-eclipse-emf-gef-jem-3.1RC1.zip,进行Jsp的web开发,当然我这里还使用了tomcat,版本是5.5.9 ,在安装Lomboz之前,请先安装tomcat.如何使用lomboz进行配置和web开发,或许你可以看看这篇文章,写的很详细:Building and Running a Web Application 

配置好了Lomboz之后,下一步添加Lomboz对Struts的支持,先从Apache下载Struts  我下载的版本是1.2.7。打开下载所得到的zip文件,可以看到里面有三个目录:contriblibwebapps。对我们重要的是libwebappswebapps目录下的war文件拷贝到tomcatwebapps目录下,假设你的tomcat安装在c:/tomcat下,你将war文件拷贝到c:/tomcat/webapps/目录下即可。重启tomcat打开浏览器,在地址栏输入:http://localhost:8080/Struts-example/index.jsp,若能看到“powered by Struts”的深蓝图标,即说明安装成功。

下面用Lomboz创建一个HelloWorldStruts工程。在New project ->选择J2EE web project,在New Dynamic Web Project对话框中,输入工程名HelloWorldStruts,注意Target server的名称一定要选:Apache Tomcat v5.5


s1.jpg

在lomboz Package Explore中,右击HelloWorldStruts 项目->Properties,在弹出的对话框中,选择右边的Java Build Path ->Libraries->Add External Jars 将\struts-1.2.7\lib目录下的所有Jar文件添加进来。然后将\struts-1.2.7\lib目录下的除了Jar文件的*.dtd/*.tld/*.xml文件全都拷贝到HelloworldStruts项目的WebContent/WEB-INF目录下。这样这个项目已经可以支持struts开发了。
 配置了半天,终于可以编码了:

写Helloword jsp页面

右击Hellowordstruts工程中的WebContent目录上->new ->other->jsp添加一个HelloWorld.jsp文件,在这个文件中,用户输入自己的用户名,然后提交,源代码清单如下:
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix=SPAN>"html"%>
<%@ page contentType="text/html; charset=gb2312"%>
<!--  
             * This page shows Struts Hello world Demo jsp page 
             * Title: Struts Hello world Demo 
             * Description: Struts Hello world Demo Page 
             * Copyright: Copyright (c) 2005 
             * Company: http://www.cnweblog.com/sundy 
             * @author Sundy(一缕阳光) <[email protected]
             * @version 1.0 
             
-->
<html>
<head>
<title>Struts Hello world Demo</title>
</head>
<body>
输入你的用户名,提交显示结果:
<html:form action="/HelloWorld" focus="username"> 
用户名称:
<html:text property="username" size="25" /> 

    
<html:submit property="submit" />
</html:form>
</body>
</html>

注意到第一行的:
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

这里到我们添加了struts的taglib的引用,struts标签库的使用,在后续的文章中将陆续介绍。

写struts 中hello word Action实现

在HelloWorldStruts/JavaSource目录下,添加HelloWorldAction类,它继承自org.apache.struts.action.Action,并实现其execute方法,其代码清单如下:

package com.sundy.struts;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.
*;
import org.apache.struts.action.
*;

/**//**
 * This page shows HelloWorldAction
 * Copyright: Copyright (c) 2005 
 * Company: 
http://www.cnweblog.com/sundy 
 * @author Sundy(一缕阳光) <[email protected]
 * @version 1.0 
 
*/

public class HelloWorldAction extends Action {
    
public ActionForward execute(ActionMapping actionMapping,
            ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws Exception 
{
        
        HelloWorldForm form 
= (HelloWorldForm) actionForm;
        ActionErrors errors 
= new ActionErrors();
        String username 
= form.getUsername();
        
        username 
+= ",Hello world!";
        request.setAttribute(
"hello", username);
        
        
return actionMapping.findForward("success");
        
    }

}



写struts 中hello word ActionForm实现

在HelloWorldStruts/JavaSource目录下,添加HelloWorldForm类,它继承自org.apache.struts.action.ActionForm,在里面只有一个username属性,其代码清单如下:

package com.sundy.struts;

import javax.servlet.http.
*;
import org.apache.struts.action.
*;

/**//**
 * This page shows Hello world Demo Helloword Form page
 * Copyright: Copyright (c) 2005 
 * Company: 
http://www.cnweblog.com/sundy 
 * @author Sundy(一缕阳光) <[email protected]
 * @version 1.0 
 
*/

public class HelloWorldForm extends ActionForm {
    
private static final long serialVersionUID = 3256445798169261619L;
    
private String username;
    
public HelloWorldForm() {
        username 
= null;
    }

    
public void setUsername(String username) {
        
this.username = username;
    }

    
public String getUsername() {
        
return this.username;
    }

    
public void reset(ActionMapping mapping, HttpServletRequest request) {
        username 
= null;
    }

}

写显示Helloword jsp页面

右击Hellowordstruts工程中的WebContent目录上->new ->other->jsp添加一个ShowHelloWorld.jsp文件,在这个文件中,显示输出结果,代码清单如下:

<html>
<head>
<title>Show Hellow world</title>
</head>
<body>
    
<h2><%= request.getAttribute("hello")%></h2>
</body>
</html>

配置web.xml文件

需要在WebContent/WEB-INF目录下修改web.xml文件,添加对struts的支持,代码清单如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app 
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"
>
<web-app>
    
<display-name>Struts Logon Application</display-name>
    
<!-- Standard Action Servlet Configuration (with debugging) -->
    
<servlet>
        
<servlet-name>action</servlet-name>
        
<servlet-class>
        org.apache.struts.action.ActionServlet
        
</servlet-class>
        
<init-param>
            
<param-name>config</param-name>
            
<param-value>/WEB-INF/struts-config.xml</param-value>
        
</init-param>
        
<init-param>
            
<param-name>debug</param-name>
            
<param-value>2</param-value>
        
</init-param>
        
<init-param>
            
<param-name>detail</param-name>
            
<param-value>2</param-value>
        
</init-param>
        
<load-on-startup>2</load-on-startup>
    
</servlet>
    
<!-- Standard Action Servlet Mapping -->
    
<servlet-mapping>
        
<servlet-name>action</servlet-name>
        
<url-pattern>*.do</url-pattern>
    
</servlet-mapping>
    
<!-- The Welcome File List -->
    
<welcome-file-list>
        
<welcome-file>HelloWorld.jsp</welcome-file>
    
</welcome-file-list>
    
<!-- Struts Tag Library Descriptors -->
    
<taglib>
        
<taglib-uri>/tags/struts-bean</taglib-uri>
        
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
    
</taglib>
    
<taglib>
        
<taglib-uri>/tags/struts-html</taglib-uri>
        
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
    
</taglib>
    
<taglib>
        
<taglib-uri>/tags/struts-logic</taglib-uri>
        
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
    
</taglib>
    
<taglib>
        
<taglib-uri>/tags/struts-nested</taglib-uri>
        
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
    
</taglib>
    
<taglib>
        
<taglib-uri>/tags/struts-tiles</taglib-uri>
        
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
    
</taglib>
</web-app>

配置struts_config.xml文件

在WebContent/WEB-INF目录下修改struts-config.xml文件,添加HelloWorldAction和HelloWorldForm的映射,代码清单如下:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" 
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"
>
<struts-config>
    
<form-beans>
        
<form-bean name="HelloWorldForm" type="com.sundy.struts.HelloWorldForm"/>
    
</form-beans>
    
<action-mappings>
        
<action path="/HelloWorld" type="com.sundy.struts.HelloWorldAction"
            name
="HelloWorldForm" scope="request" input="">
            
<forward name="success" path="/ShowHelloWorld.jsp"/>
        
</action>
    
</action-mappings>
        
<message-resources parameter="resources.application"/>
</struts-config>

运行:

好了,所有的代码都已经编好了,虽然脑子里还有无数的疑问,它又怎么工作的呢,Action和ActionForm又有什么联系呢?不要紧,先来看看运行结果吧,姑且让这些疑问,放到后面来解答。
在HelloWorld.jsp文件上->右键->run as -> run on server