`
lcfyolanda2007
  • 浏览: 2596 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

我的第一个Struts程序

    博客分类:
  • J2EE
阅读更多
    终于要开始本人的第一个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代码如下:
  
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<HTML>
  <HEAD>
     <TITLE><bean:message key="login.jsp.title"/></TITLE>
     <html:base/>
  </HEAD>
  <BODY>
  <h3><bean:message key="login.jsp.page.heading"/></h3><html:errors/>
  <html:form action="loginAction.do" focus="username">
  <TABLE border="0" width="100%">
    <TR><TH align="right"><bean:message key="login.jsp.prompt.username"/></TH>
      <TD align="left"><html:text property="username"/></TD></TR>
    <TR><TH align="right"><bean:message key="login.jsp.prompt.password"/></TH>
    <TD align="left"><html:password property="password"/></TD></TR>
    <TR><TD align="right"><html:submit><bean:message key="login.jsp.prompt.submit"/></html:submit></TD>
        <TD align="left"><html:reset><bean:message key="login.jsp.prompt.reset"/></html:reset></TD></TR>
  </TABLE>
  </html:form>
  </BODY>
  </HTML>

    其中<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文件内容如下:
引用
<?xml version="1.0" encoding="UTF-8"?>
<!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类,代码如下:
  
package com.test;
import org.apache.struts.action.*;
import javax.servlet.http.HttpServletRequest;
public class UserInfoForm extends ActionForm{
	private String username;
	private String password;
	public String getUsername(){return this.username;}
	public void setUsername(String username){this.username = username;}
	public String getPassword(){return (this.password);}
	public void setPassword(String password) {this.password = password;}
	}

   Struts的Form Bean都必须继承ActionForm类,其它的就是一个标准的JavaBean。
  (6)LoginAction.java代码如下:
  
package com.test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
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;
public final class LoginAction extends Action
{
	public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,
			HttpServletResponse response) throws IOException,ServletException
	{
		UserInfoForm loginInfoForm=(UserInfoForm)form;
		String username = loginInfoForm.getUsername().trim();
		String password=loginInfoForm.getPassword().trim();
		ActionErrors errors = new ActionErrors();
        if(username.equals("")){
        	ActionError error=new ActionError("error.missing.username");
        	errors.add(ActionErrors.GLOBAL_ERROR,error);
        	}
	    if(password.equals("")){
	    	ActionError error=new ActionError("error.missing.password");
	    	errors.add(ActionErrors.GLOBAL_ERROR,error);
	    }
	    if (errors.size()==0)
	    	{
	    	try{
                if (username.equals("lll") && password.equals("aaa"))
	    			return mapping.findForward("success");
                else
                {
                	ActionError error=new ActionError("error.wrong.userinfo");
                	errors.add(ActionErrors.GLOBAL_ERROR,error);
                }
	    	}catch(Throwable e){
	          e.printStackTrace();
	          ActionError error=new ActionError(e.getMessage());
	          errors.add(ActionErrors.GLOBAL_ERROR,error);
	          }
	}
	  saveErrors(request, errors);
	  return new ActionForward(mapping.getInput());
	}
	}

      所有的Action对象都要继承Action类,并重载其execute方法。该方法带了四个参数,分别为ActionMapping,ActionForm,HttpServletRequest,HttpServletResponse类型,

并且返回类型为ActionForward对象。在这里补充了出错提示,首先需要将特定情况下的错误信息存。放到ActionErrors对象里(当然是先生成ActionError对象,然后再放进去)

。login.jsp中<html:errors/>完成相应错误信息的提示。注意生成ActionError对象的字符串只是一个Key信息,需要到ApplicationResource.properties中去找其value信息,这

样你就可以任意发挥了啊。而且一定要将错误对象存储到HttpServletRequest对象中去,否则不会显示哦~~~
  (7)最后我们还要补充ApplicationResource.properties文件的内容,内容如下:
引用
# Resources for parameter 'com.yourcompany.struts.ApplicationResources'
# Project testStruts
#Application Resource for the login.jsp
  login.jsp.title=The login page
  login.jsp.page.heading=Welcome World!
  login.jsp.prompt.username=Username:
  login.jsp.prompt.password=Password:
  login.jsp.prompt.submit=Submit
  login.jsp.prompt.reset=Reset

#Application Resource for the success.jsp
   success.jsp.title=The main page
   success.jsp.welcome=Welcome:

#Application Resource for the LoginAction.java
   error.missing.username=<li><font color="red">missing username</font></li>
   error.missing.password=<li><font color="red">missing password</font></li>

error.wrong.userinfo=<li><font color="red">username or password is wrong</font></li>
  这些都是相应文件所需要的国际化信息,这里暂时不允许输入中文(后面会说明如何处理)。
  (8)现在先来调试一下,看有什么问题没有。启动Web服务器,并将该项目配置到服务器中。用户登录主页进入正常。用户信息输入“lll”,密码输入“aaa”,结果返回”The

requested resource (/success.jsp) is not available“的错误提示。首先说明LoginAction处理正常,再一看是success.jsp内容忘记定义了,其内容如下:
引用
<%@ page contentType="text/html; charset=GB2312" %>
<%@ 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实例对象是否存在。重新配置该项目,重新运行,通过。再用用户名为空,密码为空,或输入错误的用户名和密码,都得到了预期的效果。
1
0
分享到:
评论
3 楼 lcfyolanda2007 2009-01-10  
如果把上面LoginAction的
if (username.equals("lll") && password.equals("aaa"))   
改为
if (username.equals("张三") && password.equals("aaa"))
,则输入正确的用户名和密码,系统会提示用户名或密码错,并在用户名框内显示乱码,由此需要解决Struts的乱码问题。具体解决步骤如下:
  (1)定义一个继承于ActionServlet类,如MyActionServlet,代码如下:
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类及其子类处理,在这个时候就将用户请求的中文信息正确编码是关键的。
2 楼 lcfyolanda2007 2009-01-10  
下面就说一下中文提示的处理方法:
  (1)在MyEclipse菜单下的Windows菜单中的Preference选项中,找到General下面的content Types-->Text-->Java Properties File,将其Default encoding设为GB2312.
  (2)首先在ApplicationResources.properties文件同一目录下创建ApplicationResources_zh_CN.properties文件(这是Local自动识别的中文文件名)。在Value部分输入实际要提示的中文信息。重新配置运行即可。
1 楼 lcfyolanda2007 2009-01-10  
我这里进行的用户合法性判断非常简单,但是它足以说明Struts基本运行原理,如果你想定义更复杂的业务处理逻辑,可以定义一个专门用于处理相应逻辑的类,如把它定义UserDo.java,代码如下:
import java.sql.*;
public class UserDo {
 
	public Boolean validateUser(String name,String password){
 	  Conndb conn=new Conndb();
 	  try{
 	    Connection con=conn.getConnection();
 	    String sql="select * from user where name=? and password=?";
 	    PreparedStatement ps=con.prepareStatement(sql);
 	    ps.setString(1,name);
 	    ps.setString(2,password);
 	   System.out.println(ps);
 	    ResultSet rs=ps.executeQuery();
 	    if(rs.next())
 	    {
 	    	return true;
 	    }
 	    return false;
 	  }catch(Exception e){e.printStackTrace();return false;}
	 }
}

辅助性的用于连接数据库的Conndb.java代码如下:
import java.sql.*;
public class Conndb{
  private Connection con;
  private ResultSet rs;
  public static Connection getConnection() throws SQLException{
	 Connection conn;
	 try
     {
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       conn=DriverManager.getConnection("jdbc:odbc:user1");
     }
     catch(ClassNotFoundException e)
     {
       e.printStackTrace();
       return null;
     }
     return conn; 
 }
}

相关推荐

    第一个struts程序

    这个问题搞了一个晚上。(希望对初学的朋友有帮助) 发现不能运行的原因 1、login.jsp的form表格里的action是在struts.xml中的name的属性的名字后面加上.action 例如: 2、web.xml中 org.apache.struts2.dispatcher...

    第一个struts2 程序

    本教程将深入探讨如何创建并运行你的第一个Struts2程序。 首先,我们需要了解Struts2的核心概念。Struts2框架提供了一种分层架构,它通过Action类处理用户请求,Action类与业务逻辑交互,并通过Result返回视图。...

    我的第一个struts程序(有详细注释)

    在这个“我的第一个Struts程序”中,我们将深入探讨Struts的基本组成部分和工作原理。 1. **JSP页面**: - `Login.jsp` 是用户界面,负责显示登录表单。它包含HTML元素和JSP动作,如`&lt;form&gt;`标签,它的`action`...

    建立你的第一个Struts2应用程序

    ### 建立第一个Struts2应用程序:深入解析与实践 #### Struts2入门与环境搭建 在构建第一个Struts2应用程序的过程中,我们不仅需要掌握基本的开发流程,还应了解其与Java、Hibernate和Spring等框架的整合方法。...

    第一个Struts程序和仿Struts(登入问题)

    在这个“第一个Struts程序和仿Struts(登入问题)”的主题中,我们将深入探讨如何创建一个基于Struts的登录系统,并了解如何防止常见的Struts安全问题。 首先,让我们来理解MVC模式。在MVC架构中,模型(Model)负责...

    配置第一个Struts2的简单登陆程序

    本教程将指导新手配置第一个基于Struts2的简单登录程序。 首先,你需要从Apache Struts的官方网站下载Struts2的软件包。在编写此教程时,最新版本为Struts 2.0.11.2,但请注意,随着时间推移,可能会有新的版本发布...

    Struts程序设计实例教程

    通过本书,读者可以学习如何设置Struts项目环境,创建第一个Struts应用,理解Struts的工作流程,编写Action类,以及使用Struts的标签库简化JSP页面的编写。同时,书中提供的实例将帮助读者巩固理论知识,提高实际...

    第一个Struts2程序中遇到的若干问题及解决方法

    在初学者尝试创建第一个Struts2程序时,可能会遇到一些常见问题。这篇博客将探讨这些问题并提供解决方案。 首先,配置问题是新手经常遇到的挑战。在搭建Struts2环境时,确保正确地在`web.xml`文件中配置了Struts2的...

    第一个struts2程序

    这个"第一个struts2程序"是初学者入门Struts2框架的一个基础练习,它将帮助你理解如何配置和运行一个基本的Struts2应用。 首先,了解Struts2的核心概念至关重要。Struts2框架通过提供控制器Servlet...

    struts2入门 struts2简介-第一个程序

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它在Web开发领域中被广泛使用,特别是在企业级应用中。Struts2是Apache软件基金会的开源项目,它继承了Struts1的优点并解决了其存在...

    开发第一个struts程序(运用MyEclipse5.5开发)

    本人录制的一个简单的struts程序。(使用MyEclipse5.5开发工具)

    MyEclipse下搭建第一个Struts2程序

    本教程将指导您如何在MyEclipse集成开发环境中搭建第一个Struts2程序。 首先,我们需要了解MyEclipse。MyEclipse是基于Eclipse的Java EE集成开发环境,它包含了大量用于开发Java Web应用的工具和插件,如Tomcat...

    第一个struts应用

    在这个"第一个Struts应用"中,我们将会探讨如何使用Struts进行基本的Web开发。 首先,我们要了解Struts框架的核心组件和工作原理。Struts框架主要由以下部分组成: 1. **Action类**:这是业务逻辑的核心,接收并...

    第一个struts2

    这个“第一个struts2”项目是初学者理解Struts2工作原理的一个基础示例,它展示了如何使用Struts2的核心标签库,特别是`s`标签,以及如何通过`com.opensymphony.xwork2.util.ValueStack`来处理和访问标签中的值。...

    struts入门[文字版][中文].

    第二章 HelloWorld你的第一个Struts程序 第三章 MVC概述 第四章 Model模型 第五章 View页面视图 第六章 Controller控制器 第七章 使用Struts连接池 第八章 Struts的异常处理 第九章 Struts的国际化 第十章 Plug-in ...

    IntelliJ IDEA 2017.3创建第一个Struts2项目

    在本文中,我们将深入探讨如何使用IntelliJ IDEA 2017.3版本来创建一个基于Struts2框架的第一个Web应用程序。Struts2是一个强大的、开源的MVC(Model-View-Controller)框架,它简化了Java Web开发,提高了代码的可...

    一个Struts登陆实例

    Struts 是一个经典的Java web开发框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在本实例中,我们将深入理解如何创建一个基本的Struts 1.2登录应用。 首先,我们需要在项目中引入Struts支持。通过右键点击...

    搭建第一个struts2框架,实现简单那登录功能

    在这个“搭建第一个Struts2框架,实现简单登录功能”的教程中,我们将探讨如何从零开始创建一个基础的Struts2应用。 首先,我们需要在本地环境中安装Java Development Kit (JDK) 和 Apache Tomcat 服务器,这是运行...

Global site tag (gtag.js) - Google Analytics