层层递进Struts1(二)之Struts1简介及登录实例
2013-07-26 09:47
375 查看
上篇博客由Servlet的几个版本的例子,引出在页面跳转控制方面要解决的问题,在文章最后提到了Struts1,这篇文章目的是解释一下什么是Struts1,及如何使用的问题。
Struts1各个部件的相互作用如下:
![](https://img-blog.csdn.net/20130725113027140?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlkYWFza3k=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
它是一个开源项目,我们可以深入到框架的源码中,进一步理解Struts1并学习其开发、封装的思想,非常利于编程能力的提升。
![](https://img-blog.csdn.net/20130723112113765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlkYWFza3k=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20130723113704000?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlkYWFza3k=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20130723114025921?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlkYWFza3k=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20130723180423984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlkYWFza3k=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我来解释一下这个流程:
用户输入用户名、密码后提交请求
Tomcat得到请求,根据读取的web.xml,判断是否为struts指定的类型(*.do)
如果是struts指定类型,则将请求转到指定的类文件(ActionServlet.java)
ActionServlet截取请求的url,匹配struts-config文件中的form和action类(LoginActionForm.java和LoginAction.java)
将提交的表单数据放入form中(LoginActionForm)
执行指定的Action(LoginAction),获取跳转信息(login_success.jsp)
ActionServlet执行跳转
渲染页面,展现给用户
这仅仅是从宏观上struts的执行流程,这仅仅是外在的表现,其内在如何执行?下篇博客带你走进struts1框架代码中,请看《预加载ActinoServlet》。
更多相关博客,请至《层层递进Struts1(八)之总结》。
什么是Struts1
说一下我的理解:它符合MVC思想,使用Java二次开发封装的一个框架,主要简化、解决页面请求分发、跳转的问题。Stuts1的优点是使用了丰富的配置文件使得灵活性大大提高;因为已经封装成框架,使得缩短了开发时间、提高了开发效率,同时适量使用抽象,使得代码冗余减低、文件冗余减少,维护更加简单。Struts1各个部件的相互作用如下:
它是一个开源项目,我们可以深入到框架的源码中,进一步理解Struts1并学习其开发、封装的思想,非常利于编程能力的提升。
登录实例
首先来看一下一个完整的struts1的登录实例,通过这个实例中涉及到的Struts1组成,来解释这些组成,并说明Struts1执行的流程。文件树
login.jsp
简单的登录验证界面,仅验证用户名和密码。<form action="login.do" method="post"> 用户:<input type="text" name="username" /><br/> 密码:<input type="text" name="password" /><br/> <input type="submit" value="提交"/> </form>
LoginActionForm
封装使用到的用户名和密码信息,和三层中的实体作用了类似,这个在以后的文章中会详细说明。package com.tgb.struts1; import org.apache.struts.action.ActionForm; /***** * 收集表单数据 * 表单属性值必须和get/set相对应 * @author Administrator * */ @SuppressWarnings("serial") public class LoginActionForm extends ActionForm { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
LoginAction
用于跳转请求的逻辑处理和跳转指向,此处一直跳转到success标签中,从下面的配置文件中,可以看到success代表的是login_success.jsp。package com.tgb.struts1; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.swing.ActionMap; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /**** * 调用业务逻辑,返回转向信息 * @author Administrator * */ public class LoginAction extends Action { @Override public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception { LoginActionForm laf=(LoginActionForm)form; String username=laf.getUsername(); String password=laf.getPassword(); UserManager userManager=new UserManager(); try { userManager.login(username, password); } catch (UserNotFoundException e) { e.printStackTrace(); request.setAttribute("msg", "用户名未找到"+username); } catch(PasswordWrongException e) { e.printStackTrace(); request.setAttribute("msg", "密码错误"); } return mapping.findForward("success"); } }
UserManager
模拟model和controller的功能。package com.tgb.struts1; /***** * 逻辑处理,此处以简答的admin验证为例 * @author lidab_000 * */ public class UserManager { public void login(String username,String password) { if (!"admin".equals(username)) { throw new UserNotFoundException(); } if (!"admin".equals(password)) { throw new PasswordWrongException(); } } }
配置文件
web.xml
这个是Tomcat读取的配置文件,在这里需要指定进入struts的请求类型和处理此请求的类。<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <!-- Standard Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
struts-config.xml
这个是struts读取的配置文件,在此配置文件中,需要设置通过截取url指定的处理类、转向信息、表单封装的类及其它信息,例如作用域等。<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="loginForm" type="com.tgb.struts1.LoginActionForm" /> </form-beans> <action-mappings> <action path="/login" type="com.tgb.struts1.LoginAction" name="loginForm" scope="request"> <forward name="success" path="/login_success.jsp"/> <forward name="error" path="/login_error.jsp" /> </action> </action-mappings> </struts-config>
运行结果
如果输入的都是admin,则显示登录成功:流程分析
使用时序图分析流程如下:我来解释一下这个流程:
用户输入用户名、密码后提交请求
Tomcat得到请求,根据读取的web.xml,判断是否为struts指定的类型(*.do)
如果是struts指定类型,则将请求转到指定的类文件(ActionServlet.java)
ActionServlet截取请求的url,匹配struts-config文件中的form和action类(LoginActionForm.java和LoginAction.java)
将提交的表单数据放入form中(LoginActionForm)
执行指定的Action(LoginAction),获取跳转信息(login_success.jsp)
ActionServlet执行跳转
渲染页面,展现给用户
这仅仅是从宏观上struts的执行流程,这仅仅是外在的表现,其内在如何执行?下篇博客带你走进struts1框架代码中,请看《预加载ActinoServlet》。
更多相关博客,请至《层层递进Struts1(八)之总结》。
相关文章推荐
- struts 1.x 登录实例
- 层层递进Struts1(七)详解DispatchAction
- 【Struts】Struts2简介及实现用户登录代码示例
- Struts1入门实例(简单登录)
- 以登录实例简介Servlet使用
- 层层递进Struts1(六)自定义转换器
- 层层递进Struts1(八)之总结
- Struts从0开始1:普通的登录验证实例
- 层层递进Struts1(三)之Struts组成
- 使用Struts1.x实现用户登录实例
- Struts 2.1.6 精简实例系列教程(6):重写用户登录模块(整合Jquery+JSON)
- Struts实例详解1--登录验证
- 层层递进Struts1(五)之处理流程
- 层层递进Struts1(六)自定义转换器
- 层层递进Struts1(一)之由Servlet引入Struts
- 【struts】使用struts完成登录实例
- 层层递进Struts1(七)详解DispatchAction
- Struts中的拦截器——登录验证实例
- SSH-struts1登录实例
- struts国际化实例---登录例子(中英文切换)