上一篇我们简单了解了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进行配置。

[html] view plain copy print?
  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代码如下所示。

[java] view plain copy print?
  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方法。代码如下所示。

[java] view plain copy print?
  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配置代码如下所示。

[html] view plain copy print?
  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和自定义异常类

代码如下所示:

[java] view plain copy print?
  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代码如下所示。

[java] view plain copy print?
  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。代码如下所示。

[html] view plain copy print?
  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.

[html] view plain copy print?
  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界面。

[html] view plain copy print?
  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+hibernate遇到的错误总结

    原文地址:struts+hibernate遇到的错误总结作者:畫上句號 经过对struts+hibernate几天的学习,大体上还算比较的了解机制,以前学习的时候都是 单个框架训练,没有结合2个框架做 ...

  2. [转载]Struts Web开发框架WebPage3

    Struts Web开发框架WebPage3 WebPage3是基于组件的.可视化的.轻量级的Web层开发 框架.WebPage3开放组件设计接口,可以 自由开发能在WebPage3中使用的组件,而且 ...

  3. skewness z 分数_z分数用于异常检测

    skewness z 分数 重点 (Top highlight) Most of the time I write longer articles on data science topics but ...

  4. 【转载】struts应用在断网情况下启动报错解决办法(java/net/AbstractPlainSocketImpl.java:178:-1)...

    无意间struts应用在有网络的情况下启动正常,在断网的情况下启动报错,报错代码如下图所示: SEVERE: Exception starting filter struts2 Class: java ...

  5. struts2 struts.xml 配置(转载)

    he URL extension to use to determine if the request is meant for a Struts action             用URL扩展名 ...

  6. [转载]用JBuilder9 开发Struts实例

    用JBuilder9 开发Struts实例 一.JBuilder 对于 Struts 之支持 JBuilder 提供图形使用者接口以简化组件文件 struts-config.xml 之编辑与设定,此外 ...

  7. 转载:《Struts内部流程模拟实现》作者:何杨

    [color=darkred]原文链接[/color]:[b]作者:何杨[/b]http://www.blogjava.net/heyang/archive/2009/02/12/254398.htm ...

  8. GitHub上整理的一些工具【转载】

    技术站点Hacker News:非常棒的针对编程的链接聚合网站Programming reddit:同上MSDN:微软相关的官方技术集中地,主要是文档类infoq:企业级应用,关注软件开发领域OSCh ...

  9. Struts 2(八):文件上传

    第一节 基于Struts 2完成文件上传 Struts 2框架中没有提供文件上传,而是通过Common-FileUpload框架或COS框架来实现的,Struts 2在原有上传框架的基础上进行了进一步 ...

最新文章

  1. 树上启发式合并问题 ---- D. Tree and Queries[树上启发式合并+树状数组]
  2. 码农们不得不重视的问题
  3. 2017中国大学生程序设计竞赛 - 网络选拔赛 [1005 - CaoHaha's staff] 贪心
  4. qfile 计算文件有多少行_肉牛不喂精料行吗?如何计算肉牛一天喂多少精料?
  5. “小众”之美——Ruby在QA自动化中的应用
  6. 给年终总结报告加分的技巧:手机上就能看的可视化长什么样?
  7. mysql update多条件批量更新_Mybatis中进行批量更新(updateBatch)
  8. 剑指offer——跳台阶变态跳台阶矩形覆盖
  9. 《JavaScript 高级程序设计》第三章:基本概念
  10. pom中子模块project报红,插件运行Process terminated
  11. linux下rfkill命令管理蓝牙和wifi
  12. miui v5 android版本,miuiv5主题下载-miuiv5主题(MiroEX) 安卓版v3.4.1-PC6安卓网
  13. spring 定时任务表达式正确性校验
  14. ATMEGA128芯片标识
  15. 用javascript实现节假日自动切换风格
  16. 关于win10中将中文用户名更改为英文名的解决方法
  17. C++ primer (5th) 随想与学习笔记 6 优先级晦涩难通 新标准更清晰
  18. 打印Service运行时间与Aspect相关注解使用
  19. 计算机手工操作管理方式是处于什么时代,2管理系统中计算机应用.ppt
  20. 基于PIC16F876A的摇摇棒

热门文章

  1. datagridview 绑定list 不能刷新界面_人人都可写代码-H5零基础编程-发布活动界面实操07...
  2. 利用维纳滤波编码实现给定的运动模糊图像恢复
  3. webview取java的参数值_Android 显示 WebView ,加载URL 时,向webview的 header 里面传递参数...
  4. MyBatis源码分析(三):MyBatis初始化(配置文件读取和解析)
  5. 线性筛及其扩展-积性函数
  6. JavaEE error整理(不断更新)
  7. Python学习 Week2 part1
  8. DM8168 TILER(2)
  9. Fabric学习笔记(一)- Centos 7下的Fabric 2.3.2环境搭建
  10. jdk/jre/jvm联系