【struts1】——基本实现原理
来源:互联网 发布:程序员面试题库 编辑:程序博客网 时间:2024/05/16 16:56
前言
这几天看完了struts视频,现在回来把struts的原理来屡屡,把它转化为能量,以便更好的往下学习。
概述
struts是apache公司的开源子项目,是基于MVC逻辑分层的web层框架实现,应用广泛。struts关注的是控制层,对于view层提供了大量的标签,model层的影响很小。
实现原理
web客户端向服务器(tomcat)发送请求服务,解析http协议。
tomcat进入Comfig文件匹配,匹配成功后进入actionServlet请求dopost(doget),这个时候就会获取到数据。
然后进入RequestProcessor调用process方法,在这个方法里,首先是通过processPath截取URL。
再通过processMapping根据截取的URL取得ActionMapping;然后到了processActionForm,根据ActionMapping的name名称查找ActionForm,如果配置了ActionForm那么就到request或session中查到, 如果request或session中存在已经创建的ActionForm,那么将返回,如果不存在,会根据ActionForm的完成路径采用发射进行创建,再将创建好的ActionForm放到request或session中。
之后进入processPopulate,在这个过程中,首先执行ActionForm中的reset方法进行重置,然后得到表单中所有输入域的name名称,再调用request getParameterValues(),根据name名称得到相应的值,最后将表单中的数据全部放到一个map中,map的key为表单输入域的名称,map的value为表单输入域的值(字符串数组),接下来调用一个第三方组件BeanUtils,将map中的值,根据ActionForm中的类型先转换好,再调用ActionForm中的setter方法设置到ActionForm上。
接下来就到了processActionCreate,根据Action的完成类名称到Map中去查找,如果在就返回Action对象,否则根据Action类的完整名称采用反射去创建,再将创建好的Action放到Map中,所以Struts1的action是单实例,存在线程安全问题。
完成后上一步后,调用processActionPerform,执行用户自定义的action中execute方法,将ActionMapping,ActionForm,request,response传递过去,将ActionForward放回。
然后再进入processForwardConfig,根据返回的ActionForward完成转向,也就是转发或重定向。
最后渲染jsp,显示在客户端中。
栗子
1、引入jar包至/Webroot/WEB-INF/lib下
2、在web.xml文件中配置ActionServlet
<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>
3、建立相关的login.jsp/success.jsp/error.jsp页面
4、建立LoginAction.java和loginActionForm.java
LoginAction.java
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 yang * */public class LoginAction extends Action {@Overridepublic 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); request.setAttribute("username",username); return mapping.findForward("success"); }catch(UserNotFoundException e){ e.printStackTrace(); request.setAttribute("msg","用户不能找到,用户名称=【" + username + "】"); }catch(PasswordErrorException e){ e.printStackTrace(); request.setAttribute("msg","密码错误!"); } return mapping.findForward("error"); }}
loginActionForm.java
package com.bjpowernode.struts;import org.apache.struts.action.ActionForm;/** * 登录ActionForm,负责表单收集数据 * 表单的属性必须和ActionForm中的get和Set的属性一致 * @author yang * */@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;}}
5、将LoginAction、LoginActionFrom和相关的jsp配置到struts-config.xml文件中
<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>
总结
至此,算是把struts1消化了,可以安心往下走了。
- 【struts1】——基本实现原理
- struts1的基本知识点—原理以及配置
- struts1.x原理—自述
- struts1的基本知识点—DispachAction
- struts1的基本知识点—国际化
- Struts1——从BeanUtils看struts的实现原理1
- Struts1——从BeanUtils看struts的实现原理2
- Struts1—从BeanUtils看struts的实现原理3(自定义BeanUtils的转换器)
- hibernate4实战6—基本实现原理
- struts1的基本知识点—简单构建第一个Action
- Struts1.3.10学习笔记——工作原理
- Struts1总结——MVC框架的工作原理
- struts1 原理
- struts1,原理
- Struts1原理
- struts1 原理
- struts1原理
- struts1的工作原理及基本配置详解
- 多线程
- php大型网站如何提高性能和并发访问
- 浅谈Thrift内部实现原理
- 华为开源数据格式CarbonData项目,实现大数据即席查询秒级响应
- C++ Primer第四版笔记
- 【struts1】——基本实现原理
- 局域网内的简单linux DHCP server搭建
- 前端开发面试知识点大纲
- 【BootStrap】--具有增删改查功能的表格Demo
- 串口通信设置
- 比特币白皮书:一种点对点的电子现金系统
- session 入mysql
- 如何生存二维码图片保存到本地
- 常见英文单词