SSH框架之Struts(1)——Struts的运行流程

  

  对于采用Struts框架的Web应用,我们通过实例来介绍一下其基本流程.

一、实例

   Login.jsp,进行系统登录的页面

  

  

		<form action="login.do" method="post">
			用户:<input type="text" name="username"><br>
			密码:<input type="password" name="password"></br>
			<input type="submit" value="登录">
		</form>

   Web.xml,初始化的配置文件

		  <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-config2.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>
		</web-app>

  Struts-config.xml,strurs的配置文件

		<struts-config>
			<form-beans>
				<form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/>
			</form-beans>

			<action-mappings>
				<action path="/login"
						type="com.bjpowernode.struts.LoginAction"
						name="loginForm"
						scope="request"
						>
					<forward name="success" path="/login_success.jsp" />
					<forward name="error" path="/login_error.jsp"/>
				</action>
			</action-mappings>
		</struts-config>

  LoginAction:

		public class LoginAction extends Action {  

		    @Override
		    public ActionForward execute(ActionMapping mapping, ActionForm form,
		            HttpServletRequest request, HttpServletResponse response)
		            throws Exception {
		         UserActionForm  userForm=(UserActionForm)form;
		         String userName=userForm.getName();
		         int password=userForm.getPassword();
		         UserManage userManage=new UserManage();
		         User user=new User();
		          user.setName(userName);
		          user.setPassword(password);  

		        try {
		             userManage.ValidateUser(user);
		             return mapping.findForward("success");
		          } catch (UserNotFoundException e) {
		             e.printStackTrace();
		             request.setAttribute("message", e.getMessage());
		          }catch(PasswordErrorException e){
		             e.printStackTrace();
		             request.setAttribute("message", e.getMessage());
		          }  

		          return mapping.findForward("fail"); }

  LoginActionForm:

 

				public class UserActionForm extends ActionForm {
				    private String name;
				    private int password;
				    public String getName() {
				        return name;
				    }
				    public void setName(String name) {
				        this.name = name;
				    }
				    public int getPassword() {
				        return password;
				    }
				    public void setPassword(int password) {
				        this.password = password;
				    }  

				}

  UserManager

				public class UserManage {  

				     public void ValidateUser(User user) {
				      // 判断用户名密码是否正确
				      if (!"admin".equals(user.getName())) {
				          throw new UserNotFoundException("用户不存在!用户名为:" + user.getName());
				      } else if (user.getPassword() != 123456) {
				         throw new PasswordErrorException("密码错误");
				      }
				 }}

二、执行流程

 A、初始化设置

  Struts1的核心ActionServlet是继承于Servlet的,它在Web.xml配置成自动启动;

 B、发送和接收请求

  (1)当客户端提交请求时,所有以.do结尾的请求被提交到ActionServlet这个中央分发器上。

  (2)根据客户端提交请求的方式Get/Post选择执行到ActionServelet的doGet()还是doPost方法

 C、处理和分发请求

  (3)不论执行doGet()/doPost()方法,都会执行到process()方法。这是ActionServlet的一个核心方法,在这个方法中,实现了截取请求路径(processPath),根据截取的请求路径到Struts.cofing.xml配置文件中找对应的ActionMapping(processMapping)

  (4)当ActionServlet匹配到用户请求的Action后,会将response请求的表单参数打包成一个ActionForm(调用processActionForm实现)对象,这个ActionFrom对象实质是一个JavaBean,里面包含了表单的数据信息。

  (5)这时候,系统会转入到具体的Action,并传递过来ActionForm对象,执行具体Action中的Execute()方法。

  (6)execute()执行结束,会生成一个ActionForward类型的对象并返回给ActionServlet,结合在Struts.cofing.xml配置文件中的处理结果项,从而进行转发或者重定向,最后将界面返还给用户!

  

  这里只是一个初步的了解和阐述,至于更详细的结合源码和流程图会在下篇博客中进行分析

时间: 2024-12-20 04:16:57

SSH框架之Struts(1)——Struts的运行流程的相关文章

spring+springMvc+struts的SSH框架整合

1.建立一个web项目 2.导入SSH框架所需jar包 3.配置web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation=&

SSH框架--struts深入详解(一)

学习了struts,但是对于它的由来,以及为什么使用action和struts.xml的方式而不采用以前的servlet方式,有些疑问,到底之前的方式有什么弊端,struts又给我们带来了什么便利? 下面一一为大家解答! struts的由来: 随着JSP与Servlet 技术大量应用于以Web为基础的应用程序,为了提升Web 应用程序可维护性与重复使用性,Java开发人员提出了一些较佳的开发模式.比较常见的两种JSP应用架构分别为Model1 与Model 2.详情参见(JAVA学习篇--JAV

Eclipse下面的Maven管理的SSH框架整合(Struts,Spring,Hibernate)

搭建的环境:eclispe下面的maven web项目 Struts:    2.5.10 Spring:    4.3.8 Hibernate:   5.1.7 .Final MySQL:   5.1.30 先来详细的讲解一下SSH框架的整合,在这里是将struts2.0的Action的创建工作由Spring进行统一管理,主要是利用了Spring 控制反转和依赖注入的功能. 而将hibernate.cfg.xml整合Spring的配置文件中.而且利用Spring的面向切向功能对Hibernat

SSH框架之Struts(3)——Struts的执行流程之核心方法

上篇讲了Tomcat实例化一个单例的ActionServlet.依据web.xml配置文件做好对应的初始化工作. 这时client产生一个.do结尾的request请求,採用get/post方式提交之后.不论哪种方式提交,都会进入到process核心方法中. ActionServelt doGet()和doPost()方法 public void <strong>doGet</strong>(HttpServletRequest request, HttpServletRespon

【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)

Long Long ago,就听说过SSH,起初还以为是一个东东,具体内容更是不详,总觉得高端大气上档次,经过学习之后才发现,不仅仅是高大上,更是低调奢华有内涵,经过一段时间的研究和学习SSH框架的基本原理与思想,总算接地气了.作为初学者,有点小小收获,想通过以博文的形式和大家一起分享,共同进步,在更新博文的过程中难免有认识不足的地方,还请各位大牛提出宝贵的建议,对于好的建议一定虚心接受,认真学习. 这篇博文仅仅是SSH的开端简介,简单介绍一下SSH以及三种框架的整体概览,后面的博文会对各部分的

osgi与流行的框架(spring,struts,hibernate等)的集成

1.与流行的 JAVA B/S体系架构的集成 了解了基于osgi系统设计的基本思想,进一步来研究osgi与流行的框架(spring,struts,hibernate等)的集成,这里首先讲解一下集成原理. l        解决和spring的集成 由于spring的应用占据了大部分的java应用领域,所以解决与spring的集成是osgi必须解决的,spring-dm的推出大大促进了两者的结合,有助于osgi进军企业领域. Spring所带来得好处主要有这么两点: 1.       不需要对外的

【SSH进阶之路】Struts基本原理 + 实现简单登录(二)

上面博文,主要简单的介绍了一下SSH的基本概念,比較宏观.作为刚開始学习的人可以有一个总体上的认识,个人觉得对学习有非常好的辅助功能,它不不过一个"瞭望塔".更是检验是否真正掌握全部内容的一个前提. Struts是基于MVC的框架,它进一步的对MVC进行了封装,它是怎么封装的,我们从先回想一下MVC再到Struts.再用Struts给大家实现一个简单登录的实例.我们開始吧. MVC 概念 MVC全名是Model View Controller,是模型(model)-视图(view)-控

Struts运行流程分析与声明式验证

strust2运行流程分析 1.发送一个HttpServletRequest给StrutsPrepareAndExecuteFilter 2.StrutsPrepareAndExecuteFilter询问ActionMapper:该请求是否是一个Struts2请求(即是否返回一个非空的ActionMapping对象) 3.若ActionMapper认为该请求是一个Struts2请求,则StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy 4.Actio

S2SH框架集成详解(Struts 2.3.16 + Spring 3.2.6 + Hibernate 3.6.10)

近期集成了一次较新版本的s2sh,出现了不少问题,网上资料也是良莠不齐,有的甚至就是扯淡,简单的把jar包扔进去就以为是集成成功了,在这里整理一下详细的步骤,若哪位有什么不同看法,可以留言,欢迎批评改正. 首先说下集成的环境,Eclipse 4.4,Tomcat 7.0.54,Struts2.3.16,Hibernate3.6.10,Spring3.2.6 相关JAR包已上传至百度云:http://pan.baidu.com/s/1pJluA5l 搭建Struts2框架 1. 创建Java We

Struts 2的架构和运行流程

之前看书,笔记都是记录在云笔记上(因为实在太水,不好意思写blog).现在感觉还是应该写在blog上,写得比较水,而且有一些不懂的地方也希望大家可以帮忙看看.之后再慢慢把以前的笔记整理上来.里面有什么不对的,希望大家可以帮忙指正. 最近在看<研磨Struts 2>,看完了架构和运行流程,下面写一写自己的理解. Struts 2的架构 Struts 2的架构如下图(图从官网找的): 1. 橙色是Servlet Filters,过滤链,所有的请求都要经过Filter链的处理. 2. 浅蓝色是Str