上一篇我们简单了解了struts原理,学习SSH,第一部是傻瓜式学习法,人家怎么做就跟着怎么做就ok。我们以登录为例,Struts配置步骤总结如下(如图2.1):

图2.2

1、          jar包拷贝

首先是建立java web项目,之后打开我们我们下载好strtus框架,Struts-1.2.9-bin文件夹和struts-1.2.9.src源文件文件夹。在bin文件夹中的lib文件中拷贝struts的jar包,拷贝到我们自己项目struts_login
–>lib文件夹下(如图2.2)。

图2.2

2、          web.xml文件配置

找到Struts-1.2.9-bin中Struts-1.2.9-bin-->webapps下的struts实例struts-blank中的struts-1.2.9-bin\webapps\struts-blank\WEB-INF下的web.xml文件,复制配置对ActionServlet的配置,粘贴到我们的项目struts_login的WEB-INF下的web.xml中,代码如下所示。主要是对struts自带的ActionServlet进行配置。

  1. <servlet>
  2. <servlet-name>action</servlet-name>
  3. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  4. <init-param>
  5. <param-name>config</param-name>
  6. <param-value>/WEB-INF/struts-config.xml</param-value>
  7. </init-param>
  8. <init-param>
  9. <param-name>debug</param-name>
  10. <param-value>2</param-value>
  11. </init-param>
  12. <init-param>
  13. <param-name>detail</param-name>
  14. <param-value>2</param-value>
  15. </init-param>
  16. <load-on-startup>2</load-on-startup>
  17. </servlet>
  18. <!--Standard Action Servlet Mapping -->
  19. <servlet-mapping>
  20. <servlet-name>action</servlet-name>
  21. <url-pattern>*.do</url-pattern>
  22. </servlet-mapping>

3、          在项目中建立自己的ActionForm

在项目中建立自己的ActionForm,继承struts框架中已经写好的ActionForm,在ActionForm设置用到的数据,并且要和我们界面上设置的名称一致。因为我们在提交表单的时候,所有的请求都会放到ActionForm中。建立登录的ActionForm,LoginActionForm.java代码如下所示。

  1. package com.bjpowernode.struts;
  2. import org.apache.struts.action.ActionForm;
  3. /**
  4. * 登录ActionForm,负责表单收集数据.
  5. * 表单的属性必须和ActionForm中的get和set的属性一致.
  6. * @author summer
  7. *
  8. */
  9. public classLoginActionForm extends ActionForm {
  10. //用户名。
  11. private Stringusername;
  12. //密码。
  13. private String password;
  14. //设置密码。
  15. public voidsetPassword(Stringpassword) {
  16. this.password = password;
  17. }
  18. //得到用户名。
  19. public StringgetUsername() {
  20. return username;
  21. }
  22. //设置用户名。
  23. public voidsetUsername(Stringusername) {
  24. this.username = username;
  25. }
  26. //得到密码。
  27. public StringgetPassword() {
  28. return password;
  29. }
  30. }

4、          建立自己的Action

建立自己的Action,同时继承struts框架中的org.apache.struts.action.Action,重载父类的execute方法。在这里完成取出表单中的数据。通过CalActionFormcalForm=
(CalActionForm)(CalActionForm)form;(struts框架中已经帮我们封装好了,我们去使用就可以了)来取得表单中的值。经过判断后,进行相应的操作,跳转到相应的页面。Action的功能是负责拿到表单数据和调用业务逻辑后进行页面跳转。建立登陆的Action类,LoginAction.java类,调用业务逻辑类UserManager的login方法。代码如下所示。

  1. packagecom.bjpowernode.struts;
  2. importjavax.servlet.http.HttpServletRequest;
  3. importjavax.servlet.http.HttpServletResponse;
  4. importorg.apache.struts.action.Action;
  5. importorg.apache.struts.action.ActionForm;
  6. importorg.apache.struts.action.ActionForward;
  7. importorg.apache.struts.action.ActionMapping;
  8. /**
  9. *登录Action
  10. *负责取得表单数据,调用业务逻辑,返回转向信息.
  11. *
  12. * @author summer
  13. *
  14. */
  15. public classLoginAction extendsAction {
  16. @Override
  17. public ActionForward execute(ActionMappingmapping,ActionForm form,
  18. HttpServletRequest request, HttpServletResponseresponse)
  19. throws Exception {
  20. LoginActionForm laf = (LoginActionForm)form;
  21. Stringusername = laf.getUsername();
  22. Stringpassword = laf.getPassword();
  23. UserManager userManager = newUserManager();
  24. //传递用户名和密码
  25. try
  26. {
  27. userManager.login(username, password);
  28. request.setAttribute("username", username);
  29. return mapping.findForward("success");
  30. }catch(UserNotFoundException e)
  31. {
  32. e.printStackTrace();
  33. request.setAttribute("msg","用户不能找到,用户名称=[" +username +"+]");
  34. }catch(PasswordErrorException e)
  35. {
  36. e.printStackTrace();
  37. request.setAttribute("msg","密码错误");
  38. }
  39. return mapping.findForward("error");
  40. }
  41. }

5、          建立struts-config.xml

作为Struts框架的核心描述,struts-config.xml可以说“一切尽在掌握”。它不但描述了MVC模型,定义所有视图层和控制层之间的接口(ActionForm),与控制层和模型层的接口(Action)进行结合,而且可以定义一些附加组件,如国际化信息资源排至文件,标签库信息等。

仍然是站在巨人的肩膀上,将我们下载的struts  bin文件夹中的struts-config.xml文件复制到我们的项目的WEB-INF中,删除struts-config.xml中的注释部分。把Action和ActionForm配置起来。ActionForm放到<form-beans></form-beans>中,Action配置放到<action-mappings></action-mappings>中,struts-config.xml配置代码如下所示。

  1. <?xml version="1.0" encoding="ISO-8859-1" ?>
  2. <!DOCTYPE struts-config PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration1.2//EN"
  4. "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
  5. <struts-config>
  6. <form-beans>
  7. <form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/>
  8. </form-beans>
  9. <action-mappings>
  10. <action path="/login"
  11. type="com.bjpowernode.struts.LoginAction"
  12. name="loginForm"
  13. scope="request"
  14. >
  15. <forward name="success" path="/login_success.jsp"/>
  16. <forward name="error" path="/login_error.jsp"/>
  17. </action>
  18. </action-mappings>
  19. </struts-config>

其中form-beans元素中可以定义0个或1个以上的form-bean元素,每个form-bean被认为是一个ActionForm对象,name属性表示form-bean元素的名称,type属性指定其类名和路径。

Action-mappings元素用来包含零到多个action,其子元素action负责具体映射的详细信息。在action-mapping元素中可以定义0个或1个以上的action元素。每个action元素接受path属性定义的请求,并映射到type属性所定义的具体action对象。在映射过程中,将name属性定义的actionform一并传过去,它有如下属性:

Parameter,scope两个属性指定了传送方式和范围,scope常用的值有两个“session”和“request”。

Validate属性指定了是否需要actionform的验证。

Forward元素,将请求success转发到”/login_success.jsp页面。

 

6、          业务逻辑类UserManager和自定义异常类

代码如下所示:

  1. packagecom.bjpowernode.struts;
  2. publicclassUserManager {
  3. publicvoid login(Stringusername,Stringpassword)
  4. {
  5. if(!"admin".equals(username))
  6. {
  7. thrownewUserNotFoundException();
  8. }
  9. if(!"admin".equals(password))
  10. {
  11. thrownewPasswordErrorException();
  12. }
  13. }
  14. }

自定义异常类UserNotFoundException和PasswordErrorException代码如下所示。

  1. packagecom.bjpowernode.struts;
  2. public class UserNotFoundExceptionextends RuntimeException {
  3. public UserNotFoundException() {
  4. }
  5. public UserNotFoundException(Stringmessage) {
  6. super(message);
  7. }
  8. public UserNotFoundException(Throwable cause) {
  9. super(cause);
  10. }
  11. public UserNotFoundException(Stringmessage,Throwable cause) {
  12. super(message, cause);
  13. }
  14. }
  15. packagecom.bjpowernode.struts;
  16. public class PasswordErrorExceptionextends RuntimeException {
  17. public PasswordErrorException() {
  18. }
  19. public PasswordErrorException(Stringmessage) {
  20. super(message);
  21. }
  22. public PasswordErrorException(Throwable cause) {
  23. super(cause);
  24. }
  25. public PasswordErrorException(Stringmessage,Throwable cause) {
  26. super(message, cause);
  27. }
  28. }

7、          视图jsp页面调用。

登录界面login.jsp,错误显示界面login_error.jsp,登录成功界面login_success.jsp。代码如下所示。

  1. <%@pagelanguage="java" contentType="text/html; charset=GB18030"
  2. pageEncoding="GB18030"%>
  3. <!DOCTYPEhtml PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
  7. <title>Inserttitle here</title>
  8. </head>
  9. <body>
  10. <form action="login.do" method="post">
  11. 用户:<inputtypeinputtype="text" name="username"><Br>
  12. 密码:<inputtypeinputtype="password" name="password"></br>
  13. <input type="submit" value="登录">
  14. </form>
  15. </body>
  16. </html>

Login_success.jsp.

  1. <%@page language="java"contentType="text/html;charset=GB18030"
  2. pageEncoding="GB18030"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. ${username},登录成功!
  11. </body>
  12. </html>

Login_error.jsp界面。

  1. <%@page  language="java" contentType="text/html; charset=GB18030"
  2. pageEncoding="GB18030"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <%--
  11. <%=request.getAttribute("msg") %>
  12. --%>
  13. ${msg }
  14. </body>
  15. </html>

就这样我们实现了运用struts框架完成用户登录。就这样从初步学习到简单应用,随着应用的次数增多,我们会对struts理解越来越深刻,并且感受struts框架给我们带来的便捷。

《转载》struts旅程《2》的更多相关文章

  1. 《转载》struts旅程《1》

    struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过采用JavaServlet/ ...

  2. 转载-struts中logic标签使用

    Struts中Logic逻辑标签的作用及用法 Struts中Logic逻辑标签的作用及用法 2006年10月18日 星期三 21:34 Terry原创,转载请说明作者及出处 Logic标签大部分的功能 ...

  3. Struts旅程(六)Struts页面转发控制ActionForward和ActionMapping

    转自:https://blog.csdn.net/lovesummerforever/article/details/19125933

  4. Struts framework

    Struts功能详解——ActionMapping对象 Struts旅程(一)Struts简介和原理 实例讲解DispatchAction和LookupDispatchAction DispatchA ...

  5. [转载]深入了解 Struts 1.1

    转载自:http://www.ibm.com/developerworks/cn/java/l-struts1-1/ 摘要:作为基于 MVC 模式的 Web 应用最经典框架,Struts 已经正式推出 ...

  6. 转载:struts标签<s:date>的使用

    转载网址:http://blog.sina.com.cn/s/blog_510fdc8b01010vjx.html s truts 标签 :<s:date/>作用:用来格式化显示日期的格式 ...

  7. 转载关于struts命名空间的一则报警

    今天花了点时间把struts2警告事件彻底的测试了一边,终于有点眉目了.希望能给其他人带来一点帮助.文章属于原创.并不需要转载的时候注明出处,而是希望转载的朋友一定要看明白本文内容再转载,因为我你都清 ...

  8. Struts 笔记 内部资料 请勿转载 谢谢合作

    Struts 概述 随着MVC 模式的广泛使用,催生了MVC 框架的产生.在所有的MVC 框架中,出现最早,应用最广的就是Struts 框架. Struts 的起源 Struts 是Apache 软件 ...

  9. struts.xml配置详解 内部资料 请勿转载 谢谢合作

    1.<include> 利用include标签,可以将一个struts.xml配置文件分割成多个配置文件,然后在struts.xml中使用<include>标签引入其他配置文件 ...

随机推荐

  1. java资料——线性表(转)

    线性表 线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表的逻辑结构简单, ...

  2. C#操作word类文件

    最近频繁操作Word文档,写了很多word的操作代码及方法,虽然已经有很多关于word的操作类了,自己还是进行了一下整合: 1.通过模板创建新文件 2.在书签处插入值 3.插入表格 4.合并单元格 5 ...

  3. Hive Tuning(一) 连接策略

    群里共享了一本hive调优的书记,名叫<Hive Tunning>,就忍不住开始看了,也顺便记录一下自己学到的东西,备忘! 首先,这是hive的数据摘要,别问我什么意思,我也没看懂. 好, ...

  4. OC基础--常用类的初步介绍与简单实用之集合类

    集合类的异同点 一.NSArray\NSMutableArray *有序 *快速创建(只有不可变数组可以):@[obj1, obj2, obj3]; *快速访问元素:数组名[i] *只能存放对象 二. ...

  5. 如果你不知道这11款常见的Web应用程序框架 就说明你out了

    本文推荐了11款常见的Web应用程序框架,并列出了相关的学习资料和下载文档.如果对这些项目还不熟悉,就赶紧学起来吧~ Rails Rails是Ruby on Rails的简称,是一款开源的Web应用框 ...

  6. android 监听Home键

    /** * Home 键监听,当按下Home键时,系统会发出action为Intent.ACTION_CLOSE_SYSTEM_DIALOGS的BroadcastReceiver * 在程序里动态注册 ...

  7. Spring in Action 4th 学习笔记 之 AOP

    前提:本文中的AOP仅限于Spring AOP. 先说说为什么需要AOP 最简单的一个例子就是日志记录,如果想记录一些方法的执行情况,最笨的办法就是修改每一个需要记录的方法.但这,真的很笨... 好的 ...

  8. SyntaxError: inconsistent dedent

    错误原因: 一般是拷贝别人的代码过来编辑,由于编辑器不同,出现 tab和 space 的差别. 解决方法: Window->Preferences->PyDev->Editor-&g ...

  9. Wellner 自适应阈值二值化算法

    参考文档: Adaptive Thresholding for the DigitalDesk.pdf       Adaptive Thresholding Using the Integral I ...

  10. Kernel.org 被黑,获取 Android 源码方法一则

    8 月底 9 月初,作为 Linux 的老窝,Kernel.org 被黑客攻击了,其攻击原因众说纷纭.一直以来 Linux 对于我来说不是很感兴趣,所以从来不会关注类似事件,可是这次这个攻击,却影响到 ...