通过简单示例来了解Struts流程
2012-10-22 14:58
323 查看
通过初识SSH我们已经从宏观的角度对SSH有一个了解,接下来将会逐步的对立面的内容进行深入学习.首先是需要学习的是Struts框架.
在上篇文章中我们提到:Struts就是一个MVC的架构,在控制器,视图和模型方面都有其特定的组件,更多的是利用了Controller这个组件。
接下来将通过一个简单的登录例子来学习Struts框架,并了解它这个框架的主要流程.由于是第一个例子会详细的将里面的一些内容都描述出来.
配置struts环境(只能应用于WEB项目)
下载struts资源包
struts-1.2.9
拷贝struts相关的jar包拷贝到项目中的WEB-INF/lib目录下
配置ActionServlet在web.xml文件中.因为这次初次配置,所以很多的配置信息需要参考struts资源包中的例子struts-1.2.9-bin\webapps\struts-examples.war.
参照例子项目,<<struts-examples.war>>
将以后的xml中的关于servlet的配置拷贝到自己的项目中具体内容如下代码:
配置struts-config.xml,将例子中的此文件拷贝到WEB-INF文件目录下
创建登录页面
创建一个登录(login.jsp)
b.一个登录成功页面(login_success.jsp)
一个登录失败页面(login_failure.jsp)
创立LoginActionForm,处理登录页面(需要继承struts 的ActionForm),注意set中的后面的名字要跟表单的名称一摸一样.
创建LoginAction(需要继承struts1的Action)
需要覆盖exectute方法
配置到struts-config配置文件中
至此整个Struts登录的例子完成,可以进行相关的页面测试.接下来将对整个流程做一个解释,而在Struts中,流程的理解是非常重要的一个部分,需要深入的去学习.真个例子的流程如下.
Web客户端请求Tomcat通过request(username,password);/login.do
从Tomcat中找到ActionServlet,此Servlet在Tomcat启动的时候已经实例化完成.
调用ActionServlet的doGet/doPost方法.
ActionServlet调用RequestProcesser(核心类)
RequestProcesser调用processPath方法,用于截取URL.
RequestProcesser调用processMapping,作用是根据截取的URL取得ActionMapping.
RequestProcesser调用processActionForm
根据ActionMapping中的name查找ActionForm
如果配置了ActionFrom,那么就到request或者session查找
如果在request或者session中 存在已经创建的ActionForm,那么将会返回.
如果不存在那么根据ActionFrom完整路径采用反射进行创建.
再将创建好的ActionFrom放到request或者session中.
RequestProcesser调用processPopulate方法
首先执行ActionForm中的reset方法进行重置.
随后得到表单中所有输入域的name名称.
之后在调用request.getParameterValues(),根据name名称得到相应的值.
最后把表单中的数据全部放到一个map中.
map的key为表单输入域的名称,map的value为表单的输入域的值(字符串数组).
接下来调用一个第三方组件,BeanUtils,将Map中的值根据ActionForm中类型先转换好再设置到ActionFrom上.再调用ActionFrom中的setter方法设置到ActionFrom上.
processActionCreate
先根据Action的完整类名称到Map中查找,如果存在就返回Action对象,否则根据Action类的完整名称采用反射机制去创建,再将创建好的Action放入Map中,所以Struts1的Action是单实例的,存在线程安全问题.
processActionForm
执行用户自定义Action中的execute方法,将ActionMapping,ActionFrom,request,response传递过去,将ActionForward传递过去.
processForwardConfig
根据返回的ActionForward完成转向或转发.
通过整个流程我们发现,在Struts中RequestProcesser是一个比较核心的方法.同时也涉及到很多的对象,例如ActionFrom,ActionMapping.等等
小结:通过以上的流程,希望读者能够对Struts流程有一个基本的了解.它是一个基于Sun J2EE平台的MVC框架,从代码中可以看出它主要是采用Servlet和JSP技术来实现的。Struts能充分满足应用开发的需求,简单易用,敏捷迅速,把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,我们利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。它的官方地址是http://struts.apache.org
"闲来无事"可以多浏览一下.
在上篇文章中我们提到:Struts就是一个MVC的架构,在控制器,视图和模型方面都有其特定的组件,更多的是利用了Controller这个组件。
接下来将通过一个简单的登录例子来学习Struts框架,并了解它这个框架的主要流程.由于是第一个例子会详细的将里面的一些内容都描述出来.
配置struts环境(只能应用于WEB项目)
下载struts资源包
struts-1.2.9
拷贝struts相关的jar包拷贝到项目中的WEB-INF/lib目录下
配置ActionServlet在web.xml文件中.因为这次初次配置,所以很多的配置信息需要参考struts资源包中的例子struts-1.2.9-bin\webapps\struts-examples.war.
参照例子项目,<<struts-examples.war>>
将以后的xml中的关于servlet的配置拷贝到自己的项目中具体内容如下代码:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- Standard Action Servlet Configuration (with debugging) --> <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> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
配置struts-config.xml,将例子中的此文件拷贝到WEB-INF文件目录下
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> </struts-config>
创建登录页面
创建一个登录(login.jsp)
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Insert title here</title> </head> <body> <from action="" method="post"> 用户名:<input type="text" name="username"><br/> 密码: <input type="text" name="password"/> <input type ="submit" name="login"/> </from> </body> </html>
b.一个登录成功页面(login_success.jsp)
一个登录失败页面(login_failure.jsp)
创立LoginActionForm,处理登录页面(需要继承struts 的ActionForm),注意set中的后面的名字要跟表单的名称一摸一样.
package com.bjpowernode.struts; import org.apache.struts.action.ActionForm; /** * 登录ActionFrom ,负责表单数据的搜集 * @author jnqqls * @group TGB * @version 1.0 * @comments */ @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(需要继承struts1的Action)
需要覆盖exectute方法
package com.bjpowernode.struts; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * 登录Action * 负责获取表单数据,调用业务逻辑,返回转向信息 * @author jnqqls * @group TGB * @version 1.0 * @comments */ public class LoginAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //转换为LoginActionForm类型 LoginActionForm laf=(LoginActionForm)form; //获取form中的数据 String username=laf.getUsername(); String password=laf.getPassword(); //这里仅仅是测试,不进行数据库判断. if("admin".equals(username) && "admin".equals(password)){ //登录成功 //mapping 代表配置信息 return mapping.findForward("success"); }else{ //登录失败 return mapping.findForward("failure"); } }
配置到struts-config配置文件中
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <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="failure" path="/login_failure.jsp"></forward> </action> </action-mappings> </struts-config>
至此整个Struts登录的例子完成,可以进行相关的页面测试.接下来将对整个流程做一个解释,而在Struts中,流程的理解是非常重要的一个部分,需要深入的去学习.真个例子的流程如下.
Web客户端请求Tomcat通过request(username,password);/login.do
从Tomcat中找到ActionServlet,此Servlet在Tomcat启动的时候已经实例化完成.
调用ActionServlet的doGet/doPost方法.
ActionServlet调用RequestProcesser(核心类)
RequestProcesser调用processPath方法,用于截取URL.
RequestProcesser调用processMapping,作用是根据截取的URL取得ActionMapping.
RequestProcesser调用processActionForm
根据ActionMapping中的name查找ActionForm
如果配置了ActionFrom,那么就到request或者session查找
如果在request或者session中 存在已经创建的ActionForm,那么将会返回.
如果不存在那么根据ActionFrom完整路径采用反射进行创建.
再将创建好的ActionFrom放到request或者session中.
RequestProcesser调用processPopulate方法
首先执行ActionForm中的reset方法进行重置.
随后得到表单中所有输入域的name名称.
之后在调用request.getParameterValues(),根据name名称得到相应的值.
最后把表单中的数据全部放到一个map中.
map的key为表单输入域的名称,map的value为表单的输入域的值(字符串数组).
接下来调用一个第三方组件,BeanUtils,将Map中的值根据ActionForm中类型先转换好再设置到ActionFrom上.再调用ActionFrom中的setter方法设置到ActionFrom上.
processActionCreate
先根据Action的完整类名称到Map中查找,如果存在就返回Action对象,否则根据Action类的完整名称采用反射机制去创建,再将创建好的Action放入Map中,所以Struts1的Action是单实例的,存在线程安全问题.
processActionForm
执行用户自定义Action中的execute方法,将ActionMapping,ActionFrom,request,response传递过去,将ActionForward传递过去.
processForwardConfig
根据返回的ActionForward完成转向或转发.
通过整个流程我们发现,在Struts中RequestProcesser是一个比较核心的方法.同时也涉及到很多的对象,例如ActionFrom,ActionMapping.等等
小结:通过以上的流程,希望读者能够对Struts流程有一个基本的了解.它是一个基于Sun J2EE平台的MVC框架,从代码中可以看出它主要是采用Servlet和JSP技术来实现的。Struts能充分满足应用开发的需求,简单易用,敏捷迅速,把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,我们利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。它的官方地址是http://struts.apache.org
"闲来无事"可以多浏览一下.
相关文章推荐
- 详解Data Binding - 通过几个简单示例深入了解WinForm数据绑定特性
- 【译文】详解Data Binding - 通过几个简单示例深入了解WinForm数据绑定特性
- 【转】详解Data Binding 通过几个简单示例深入了解WinForm数据绑定特性
- 通过小示例了解SSH整合概念
- Spring+Struts+Hibernate(一个实现用户注册的简单示例)
- .net流程混淆简单示例
- Java远程调用BPS流程实现流程运行简单示例
- Struts2学习日志(3)编写Struts简单流程
- 最简单的视音频播放示例4:Direct3D播放RGB(通过Texture)
- 简单的了解下项目开发的流程
- 最简单的基于librtmp的示例:发布(FLV通过RTMP发布)
- Struts的MVC和简单流程
- 深入了解ibatis源码----简单ibatis示例代码
- 一个简单的例子说明Struts的工作流程
- PJSIP学习笔记——从simple_pjsua.c示例程序了解PJSUA-LIB的基本使用流程
- 基本struts结构解读【通过登陆实现整体流程】
- 最简单的基于librtmp的示例:发布(FLV通过RTMP发布)
- MVC框架之—Struts原理简介与简单开发流程部署
- PJSIP学习笔记——从simple_pjsua.c示例程序了解PJSUA-LIB的基本使用流程
- MD2410开发板通过仿真器烧Bootloader简单流程