科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道[冷枫]Struts程序设计之HelloWord实战入门篇

[冷枫]Struts程序设计之HelloWord实战入门篇

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Struts程序之HelloWord实战入门篇

作者:冷枫 来源:CSDN 2007年9月23日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

[关键源代码分析]

4.3.1 输入JSP页面文件

输入JSP页面文件名是hello.jsp,主要实现一个带有文本框的表单,文件代码如下:

<%@ page contentType="text/html;charset=GB2312" language="java" %>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>

<html:html>

<head>

<title></title>

<html:base/>

</head>

<body bgcolor="white">

<html:form action="/helloAction.do" method="post">

<html:text property="mybeanvariable1" />

<html:submit value="提交" />

<html:reset value="重写" />

</html:form>

</body>

</html:html>



首先是把本页定义为支持中文显示,中文编码采用GB2312格式,程序语言为Java:

<%@ page contentType="text/html;charset=GB2312" language="java" %>

接着定义支持四种Struts标签bean、html、logic和template,在该文件中没用到的标签可以去掉相应的定义,如果在文件中还需要用到自定义标签,也需要在这里加入相应的定义:

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>

<html:html>就不用说了。<html:base/>标签对应HTML的<BASE>标签,用来设定测览器中文件的绝对路径,然后在文件中只需写下文件的相对位置,在测览器中测览的时候这些位置会自动附在绝对路径后面,成为完整的路径。在文档中所有相对地址形式的URL是相对于这里定义的UTRL而言的。一篇文档中的<BASE>标记不能多于一个,必须放于<head>标签内,并且应该在任何包含URL地址的语句之前定义。<html:form>这里用了黑体字,表示是要重点讲解的地方。

<html:form action="/helloAction.do" method="post">

<html:text property="mybeanvariable1" />

<html:submit value="提交" />

<html:reset value="重写" />

</html:form>

<html:form>标签定义了一个表单,提交时的目标URL是“/helloAction.do”,方法是“post”,Post方法是将用户在表单中填写的数据包含在表单的主体中,一起传送到服务器上的处理程序中,该万法没有字符的限制,它包含了ISO10646的字符集,是一种邮寄的万式,在测览器的地址栏不显示提交的信息,这种万式传送的数据是没有限制。当然也可以选择Get方法,Get方法是将表单内容附加在URL地址后面,所以对提交信息的长度进行了限制,最多不可以超过8192个字符,如果信息大长,将被截去,从而导致意想不到的结果,而且不能传送非ASCII码的字符。表单内包含一个文本输入框<html:text>,它的值与Bean中属性为"mybeanvariable1"的变量相对应,如果结mybeanvariable1付了初值,则在启动这个页面时文本框中就显示默认的mybeanvariable1初值。另外表单内还包含了两个最常见的提交按钮<html:submit value="提交" />和重写按钮<html:reset value="重写" />。



4.3.2 输出JSP页面文件

输出JSP页面文件名是helloOut.jsp,主要实现输入文件提交的文本框的值,文件代码如下:

<%@ page contentType="text/html;charset=GB2312" language="java" %>

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<html:html>

<head>

<title></title>

<html:base/>

</head>

<body bgcolor="white">

<html:html>

<head>

<title></title>

<html:base/>

</head>

<body bgcolor="white">

<bean:write name="helloForm" property="mybeanvariable1" />

</body>

</html:html>

</body>

</html:html>

输出文件与前面输入文件唯一不同的是把<html:form>标签变成了<bean:write>标签:

<bean:write name="helloForm" property="mybeanvariable1" />

<bean:write>标签实现Bean属性值的输出,其中name保存Bean名,这里是“helloForm”,从后面的配置文件可以看出,它对应的类是helloForm类;property保存属性名,这里是“mybeanvariable1”,与输入文件的文本框取的属性名一至。



4.3.3 ActionForm Bean文件

Hello程序的ActionForm Bean文件实现只包含一个变量的Bean,文件名是helloForm.java,文件代码如下:

package emptyprj;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionError;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

public final class HelloWordForm extends ActionForm

{

private String mybeanvariable1;

public String getMybeanvariable1()

{

return (this.mybeanvariable1);

}

public void setMybeanvariable1(String mybeanvariable1)

{

this.mybeanvariable1=mybeanvariable1;

}

}

首先是定义package名:

package emptyprj;

这是选用了JSPStudio默认的package名emptyprj,需注意的是package名要与目录名对应。接着引入了ActionForm Bean设计中常用的五个类HttpServletRequest、ActionError、ActionErrors、ActionForm和ActionMapping,这是JSPStudio自动加入的,实际上helloForm类只用于ActionForm类,其它部分可以删除,但这里保留它以方便以后扩展程序时用。

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionError;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

接下来就是定义了helloForm、一个参数mybeanvariable1和它对应的get()、set()函数,这与普通Bean定义的方法一模一样。



4.3.4 Action文件

Hello程序的Action文件实现对输入文件提交的表单的处理,文件名是helloAction.java,文件代码如下:

package emptyprj;

import java.lang.reflect.InvocationTargetException;

import java.util.Locale;

import javax.servlet.ServletException;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.PropertyUtils;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionError;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.ActionServlet;

import org.apache.struts.util.ModuleException;

import org.apache.struts.util.MessageResources;



public final class HelloWordAction extends Action

{

// 变量定义:

private Log log = LogFactory.getLog("org.apache.struts.webapp.Example");

//函数定义:

public ActionForward execute(ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws Exception

{

// Extract attributes and parameters we will need

Locale locale = getLocale(request);

MessageResources messages = getResources(request);

HttpSession session = request.getSession();

HelloWordForm myform = (HelloWordForm) form;

String variable1= myform.getMybeanvariable1();

try

{

if(variable1.trim().equals(""))

{

return new ActionForward(mapping.getInput());

}

//其它代码

return (mapping.findForward("success"));

}

catch (Exception e)

{

//log.error("出错", e);

//log.trace("出错");

throw new RuntimeException(e.getMessage());

}

}

}

首先定义处理函数execute(),可以理解为当Hello输入文件表单提交到服务器的ActionServlet,由ActionServlet调用Action的execute()函数实现商业逻辑处理,处理完成后把结果转发到输出文件中。execute()函数定义一个helloForm实例“myform”,并从提交的输入ActionForm对象实例form中读取数据,把mybeanvariable1变量的值赋给新的字符串变量variable1:

helloForm myform = (helloForm) form;

String variable1= myform.getMybeanvariable1();

接下来是出错处理,try语句用于组合一个引起异常的代码块,它使我们告诉Java要注意有可能出现异常的代码段;catch:一旦掷出一个异常,需要捕获住这个异常,catch语句使程序员定义一个捕获;finally:在try/catch块结尾,程序可能需要确保一个代码块不管是否掷出了异常,总是被执行,例如不管发生什么,我们可能都需要确保关闭特定的文件; Exceptlon:一种用于存放在代码中发现的关于一个"exception"或"error"的信息的类;throws:当某些事需要关注时,我们"掷出"一个异常。这个异常被我们创建的一段处理异常的特殊代码"抓住"。涣句话说,通过掷出一个异常,我们告诉代码:出错啦,需要调用一些特殊的逻辑去处理问题。下面完它的完整结束:

try

{

//正常代码

}

catch (Exception e)

{

//出错处理代码

throw new RuntimeException(e.getMessage());

}

finally

{

//最后都必需进行的处理代码

}



在try块中我们进行的变量variable1是否为空的判断,如果为空就转发到输入页,否则转发到定义为success的输出页:

if(variable1.trim().equals(""))

{

return new ActionForward(mapping.getInput());

}

//其它代码

return (mapping.findForward("success"));

mapping.getInput()函数用于获取输入页的URL值,这个值与配置文件struts-config.xml中<action>项的input属性值相对应。



4.3.5 Struts程序配置

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"

"http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">

<struts-config>

<form-beans>

<form-bean name="HelloWordForm"

type="emptyprj.HelloWordForm" />

</form-beans>

<action-mappings>

<action path="/HelloWordAction"

type="emptyprj.HelloWordAction"
name="HelloWordForm"

scope="session"

input="/HelloWord.jsp">

<forward name="success" path="/HelloWordOut.jsp" />

</action>

</action-mappings>

</struts-config>
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=953079

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章