📄
字号:
class=f14> <B>实例学习Struts</B><BR><BR> 简单看过了Struts的组成及组装,现在来实现一个简单的应用,它实现与本文开头例子中相同的功能,即用户登陆并显示欢迎信息。<BR><BR> 应用中的view由2个简单JSP构成,第一个为登陆页,如下:<BR></P><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"
%><BR><BR><html:html><BR><head></head><BR><BR><body
bgcolor="white"><BR><BR><html:errors/><BR><BR><html:form
action="/ProcessLogin"><BR><table border="0"
width="100%"><BR><tr><BR><td><BR>Username:<BR></td><BR><td><BR><html:text
property="username"/><BR></td><BR></tr><BR><tr><BR><td><BR>Password:<BR></td><BR><td><BR><html:password
property="password"/><BR></td><BR></tr><BR><tr><BR><td><BR><html:submit/><BR></td><BR><td><BR>&amp;nbsp;<BR></td><BR></tr><BR></table><BR><BR></html:form><BR></body><BR></html:html></TD></TR></TBODY></TABLE><BR>
<P> 这个与不用Struts的例子中的页面非常类似,不同之处仅仅是用Struts <html>
tags定义了表单和调用的Action是配置中定义的"/ProcessLogin"。表单提交后相应的ActionForm将被创建,同时相应的action被调用处理该输入。我们还可以看到<html:errors>
tag被用到,这个是为了自动显示表单中定义的校验错误信息(下面将提到)。<BR><BR> 第二个JSP如下:<BR></P><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"
%><BR><%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"
%><BR><BR><html:html><BR><BR><h1>Welcome <bean:write
name="loginForm" property="username" /></h1><BR><BR></html:html>
</TD></TR></TBODY></TABLE><BR>
<P> 本页简单地显示了一个命名为"loginForm"的ActionForm
bean的一个属性(username).<BR><BR> 接着是controller层。controller层由ActionForm、Action两个类实现。ActionForm类很简单,主要是对应model(本例中是一个简单的JavaBean对象)。<BR></P><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>package com.samjdalton.struts;<BR><BR>import
org.apache.struts.action.ActionForm;<BR><BR>public class LoginForm
extends ActionForm {<BR> private LoginBean bean;<BR><BR> public
LoginForm() {<BR> this.bean=new LoginBean();<BR> }<BR> public
LoginForm(LoginBean bean) {<BR> this.bean =
bean;<BR> }<BR><BR> public void setUsername(String username)
{<BR> bean.setUsername(username);<BR> }<BR><BR> public String
getUsername() {<BR> return bean.getUsername();<BR> }<BR><BR> public
void setPassword(String password)
{<BR> bean.setPassword(password);<BR> }<BR><BR> public String
getPassword() {<BR> return
bean.getPassword();<BR> }<BR>}</TD></TR></TBODY></TABLE><BR>
<P> Action类用上面的ActionForm从view获得信息,并且修改model状态。<BR><BR> Action类代码如下:<BR></P><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>package com.samjdalton.struts;<BR><BR>import
org.apache.struts.action.Action;<BR>import
org.apache.struts.action.ActionForward;<BR>import
org.apache.struts.action.ActionMapping;<BR>import
org.apache.struts.action.ActionForm;<BR><BR>public class LoginAction
extends Action {<BR> public ActionForward execute(ActionMapping
actionMapping, ActionForm actionForm,
javax.servlet.http.HttpServletRequest httpServletRequest,
javax.servlet.http.HttpServletResponse httpServletResponse) throws
Exception {<BR><BR>// check the username<BR> LoginForm form =
(LoginForm) actionForm;<BR> if
(form.getUsername().equalsIgnoreCase("sam") &amp;&amp;
form.getPassword().equals("password")) {<BR> // we are
in<BR> return actionMapping.findForward("success");<BR> } else
{<BR> // not allowed<BR> return
actionMapping.findForward("failure");<BR> }<BR>}<BR>public
ActionErrors validate(ActionMapping
actionMapping<BR>HttpServletRequest httpServletRequest)
{<BR> ActionErrors errors = new ActionErrors();<BR><BR> if (
getUsername() == null || getUsername().length() < 1 )
{<BR> errors.add("name",new
ActionError("error.name.required"));<BR> }<BR><BR> if (
getPassword() == null || getPassword().length() < 1 )
{<BR> errors.add("pw",new
ActionError("error.pw.required"));<BR> }<BR> return
errors;<BR>}</TD></TR></TBODY></TABLE><BR>
<P> 可以看到,action检查用户在username、password是否输入了"sam"、"password"。如果输入正确,action指明要调用的下一个view。<BR><SPAN
class=f14> action类还包含一个方法:validate。本例中,validate方法检查username
和password的输入,如果输入有误,返回错误信息。这些错误信息包含在一个资源文件(为了支持国际化)中,该文件信息在配置文件中被配置。<BR><BR> 应用的model是一个不包含持续逻辑的标准JavaBean对象,如下所示:<BR></P><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>package com.samjdalton.struts;<BR><BR>public class LoginBean
{<BR> private String username;<BR> private String
password;<BR><BR>public void setUsername(String username)
{<BR> this.username=username;<BR>}<BR><BR>public String
getUsername() {<BR> return username;<BR>}<BR><BR>public void
setPassword(String password) {<BR> this.password =
password;<BR>}<BR><BR>public String getPassword() {<BR> return
password;<BR>}<BR>} </TD></TR></TBODY></TABLE><BR>
<P> 应用的struts-config.xml配置文件:<BR></P><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD><?xml version="1.0" encoding="ISO-8859-1" ?><BR><!DOCTYPE
struts-config PUBLIC<BR>"-//Apache Software Foundation//DTD Struts
Configuration
1.2//EN"<BR>"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"><BR> <struts-config><BR> <form-beans><BR> <form-bean
name="loginForm"
type="com.samjdalton.struts.LoginForm"/><BR> </form-beans><BR><BR> <action-mappings><BR><BR> <action
path="/Login" forward="/login.jsp"/><BR> <action path="/Welcome"
forward="/welcome.jsp" name="loginForm"
scope="request"/><BR><BR> <action path="/ProcessLogin"
type="com.samjdalton.struts.LoginAction"<BR>name="loginForm"
scope="request" validate="true" input="/Login.do"><BR> <forward
name="success" path="/Welcome.do"/><BR> <forward name="failure"
path="/Login.do"/><BR> </action><BR> </action-mappings><BR> <message-resources
parameter="ApplicationResources" null="false"
/><BR> </struts-config> </TD></TR></TBODY></TABLE><BR>
<P> 大多数文件与上例所示相同,仅有的区别是<message-resources>
tag。此tag允许我们具体化应用代码中的string类型,好处是容易国际化。上例中,资源包含在名字为"ApplicationResources.properties"的文件中,它必须存在于应用的classpath(万无一失的方法是将它配置到你的WEB-INF/classes路径下)。<BR><BR> 配置成功后,IE中输入如下URL(Tomcat):<BR><BR>http://localhost:8080/<war-file-name>/Login.do<BR><BR> 应用运行的显示结果如下:</P>
<P><IMG src=""></P>
<P>The login page</P>
<P><IMG src=""></P>
<P>The error
page<BR><BR> <STRONG>小结<BR></STRONG><BR> 本文中,我们先介绍了MVC模式,用两种技术完成可一个MVC模式的简单实现,包括Struts,这项可以开发更灵活、扩展性更强的基于MVC模式的Web应用。显然这已经远远超出了Struts所覆盖的。<BR></P>
<P>The welcome page<BR><IMG
src=""></P></SPAN></SPAN></SPAN></SPAN></DIV></TD></TR>
<TR>
<TD align=middle colSpan=2 height=25>
<DIV align=right>【<A href="javascript:fontZoom(16)">大</A> <A
href="javascript:fontZoom(14)">中</A> <A
href="javascript:fontZoom(12)">小</A>】【<A href="javascript:print()">打
印</A>】【<A href="javascript:window.close()">关
闭</A>】</DIV></TD></TR></TBODY></TABLE>
<P align=center>联系人:李艳生 联系方式:Tel(13886477862) QQ(43871852)
Email(lys650@sohu.com)</P>
<P align=center>Powered By : <A
href="http://www.phy.hbnu.edu.cn:8080/dsp">双狮新闻发布系统 Version 1.0</A> </P>
<P align=center>CopyRight© 2003-2004 双狮资源网 版权所有</P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -