上一篇我们简单了解了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. 利用JavaScript计算引擎进行字符串公式运算

    1.通过js计算引擎计算(java自带) 2.计算公式除了支持基本的方法之外还支持简单js脚本分支计算 3.通过设定map传入参数 4.默认返回最后一个计算结果,如果需返回特定值,将变量补写在公式最后 ...

  2. Linux 克隆虚拟机引起的“Device eth0 does not seem to be present, delaying initialization”

    Linux 克隆虚拟机引起的“Device eth0 does not seem to be present, delaying initialization” 虚拟机Vmware上克隆了一个Red ...

  3. Windows与Linux下进程间通信技术比较

    一般我们写的程序都是以单个进程的方式来运行的,比较少涉及到多进程.特别是在windows下,因为Windows是按照线程来分配CPU时间片的,线程是最小的调度单位,所以在Windows下更多的用到多线 ...

  4. 01 Developing Successful Oracle Application

    本章提要-------------------------------本章是概述性章节1. 介绍了了解数据库内部结构对于开发的重要性2. 介绍了如何才能开发好的数据库应用程序------------- ...

  5. mysql查看表结构

    SELECT COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT from information_schema.COLUMNS where TABLE_SCHEMA='ceco ...

  6. js学习笔记11----表单操作

    1.复选框选中 var aInput = document.getElementsByTagname('input'); aInput[0].checked=true;

  7. C++构造函数后面的冒号

    构造函数后加冒号是初始化表达式:有四种情况下应该使用初始化表达式来初始化成员:1:初始化const成员2:初始化引用成员3:当调用基类的构造函数,而它拥有一组参数时 4:当调用成员类的构造函数,而它拥 ...

  8. TensorFlow基础笔记(9) Tensorboard可视化显示以及查看pb meta模型文件的方法

    参考: http://blog.csdn.net/l18930738887/article/details/55000008 http://www.jianshu.com/p/19bb60b52dad ...

  9. linux ad7606 驱动解读

    本文记录阅读linux ad7606驱动的笔记. 主要文件 drivers/staging/iio/adc/ad7606_spi.c drivers/staging/iio/adc/ad7606_co ...

  10. strcpy、strncpy、memcpy的区别

    一.strcpy.strncpy区别 struct gpInfo { char gpcode[9]; char gpName[50]; }; string gpstr = "SZ000001 ...