首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

小弟我的第一个Struts程序

2012-10-26 
我的第一个Struts程序终于要开始本人的第一个Struts程序了,虽然在这之前或多或少知道一些,但是都没有认真

我的第一个Struts程序
    终于要开始本人的第一个Struts程序了,虽然在这之前或多或少知道一些,但是都没有认真去尝试,这一回我是要彻底弄清楚它了。我是用MyEclipe做的,原因是它集成插件

的能力非常好,这样可以省不少事了。
    (1)在MyEclipse下创建工程,因为Struts框架主要用于开发Web Project,并且它是属于J2EE系列,所以要选择"MyEclipse”-->"J2EE Projects”-->"Web Project"类型,

如果不是这样的话,Struts程序不会运行哦。系统会自动为你的项目加载J2ee基本包 。
   (2)第二步要做的就是为该项目添加Struts包,在"MyEclipe"菜单下选择"add struts capabilities",MyEclipse接着会为你启动一个Struts sSupport for MyEcliplse Web

Project向导,这里可以配置Struts配置文件路径及名字。你所创建类的包并且它会自动把那个国际化文件放在你这个包的根目录下。
  (3)我们要做的这个实例非常简单,就是完成简单的用户身份合法性判断。用户通过我们提供的操作界面输入其姓名及密码(我们这里要求是"lll”和"aaa"),如果合法则输

出欢迎词,否则返回,并提示出错原因。首先我们要创建一个用户请求获取页面,这是一个包含了Struts标签的JSP文件。我们定义了两个JSP,一个是login.jsp用于获取用户登录

请求,一个是登录成功后跳转的success.jsp。login.jsp代码如下:
  


    其中<taglib>的内容为要引用的Struts标签库内容以及该库内容的前缀信息。我们需要在该主页里面显示用户名标签及用户名文本框,密码标签以及密码文本框。注意相应请

求信息包含在<html:form>表单里,这里不能使用传统hmtl的<form>标签,否则用户的相应请求Struts会收不到。一般用户请求都会提交给带后缀.do的action对象去处理,注意这

里的action对象只是一个名称而已,它不是实际的Action对象。
   文本框的定义与传统html文本框定义的也不一样,它不但要用html:text,而且还要定义property属性内容,而这个属性将会与你所定义的JSP页面的ActionForm实例对象中的特

定属性对应。
   在这里我们还会看到<bean:message>标签,它的意思是要从ApplicationResource.properties文件中取出带相应key的信息进行显示。如何正常显示中文提示,我们在后面会提

到。
  (4)下面我们首先要定义我们的struts-config.xml文件,它在web-inf目录下。这是一个非常重要的文件,Struts框架就靠读取它来确定用户请求的转发已经用户请求对应的

ActionForm对象。我们的Struts-Config.xml文件内容如下:
<!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>
  <data-sources />
  <form-beans>
    <form-bean name="userInfoForm" type="com.test.UserInfoForm"/>
  </form-beans>
  <global-exceptions />
  <global-forwards />
  <action-mappings>
     <action input="/login.jsp" name="userInfoForm" path="/loginAction" scope="session"
     type="com.test.LoginAction" validate="false">
     <forward name="success" path="/success.jsp"/>
     </action>
  </action-mappings>
  <message-resources parameter="com.test.ApplicationResources" />
</struts-config>

  这里我们需要在<action-mappings>下面定义<action>标签,以说明相应Action对象处理来自何处的请求,并且将相应用户的请求封装到那个ActionForm对象中,以便以后可以随

时更新ActionForm对象数据并显示,使得显示最新数据。<forward>说明该Action对象在获取跳转名称为success时跳转的位置。注意<action>标签里文件路径的引用,最前面都要

加/,否则会报错。报错信息会后面说明。注意在<action>标签里定义的name属性是一个ActionForm类的实例。我这里定义的是userInforForm,用来在用户管理中重用的,所以起

了这个名,你要一个jsp对应一个FormBean也是可以的,但是FormBean就会多了。
  从上面的配置文件可以看出,用户从login.jsp提交给loginAction请求的组件信息会与相应FormBean的属性对应上,并提交给com.test.LoginAction类的实例完成处理。当处理

完毕进行跳转时,如果提示信息是success,则跳转到success.jsp,否则仍然跳回login.jsp(这是在LoginAction代码中定义的)。这样的好处是将页面流转清晰化、可配置化。
   (5)下面编写userInfoForm类,代码如下:
  
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<HTML>
<HEAD>
  <TITLE><bean:message key="success.jsp.title"/></TITLE></html:base></HEAD>
  <BODY>
   <logic:present name="userInfoForm">
   <H3>
     <bean:message key="success.jsp.welcome"/>
     <bean:write name="userInfoForm" property="username"/>!</H3></logic:present>
  </BODY>
</HTML>

这里要显示从FormBean取出来的信息,因此要用到struts-logic.tld标签库,只要在要显示的地方用<bean:write>标签,并给出要显示的FormBean及属性名称property即可。

<logic:present>用来判断相应FormBean实例对象是否存在。重新配置该项目,重新运行,通过。再用用户名为空,密码为空,或输入错误的用户名和密码,都得到了预期的效果。import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionServlet;public class MyActionServlet extends ActionServlet { protected void process(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { request.setCharacterEncoding("GB2312");// 就加着一行一切都解决了,红色部分改为所需的编码即可. super.process(request,response); }}

   (2)在web.xml修改<servlet-class>标签内容为<servlet-name>action</servlet-name>
    <servlet-class>com.test.MyActionServlet</servlet-class>
   (3)重启Tomcat重新运行即可。
  道理是用户的请求最开始都是提交给ActionServlet类及其子类处理,在这个时候就将用户请求的中文信息正确编码是关键的。

热点排行