热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

struts2的流程和一系列相关知识代码解析

这篇文章主要介绍了struts2的流程和一系列相关知识代码解析,具有一定借鉴价值,需要的朋友可以参考下。

1.客户端初始化一个指向servlet容器(Tomcat)的请求;

2.这个请求经过一系列的过滤器,接着FilterDispatcher被调用;

3.FilterDispatcher询问ActionMapper来决定这个请求是否要调用某个action;

4.如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,ActionPro根据ConfigurationManager询问框架的配置文件,找到需要调用的Action类,一般都是读取struts.xml;

5.ActionProxy创建一个ActionInvocation的实例,ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器的调用;

6.一旦Action执行完毕,ActionInvocation根据struts.xml中的配置找到对应的返回结果

比如代码:

struts2获得了.action请求后,将根据部分决定调用哪个业务逻辑组件;

struts2应用中的Action都被定义在struts.xml中;

struts2用于处理用户请求的Action实例并不是用户实现的业务控制器,而是Action代理,因为用户实现的业务控制器并没有与ServletAPI耦合,显然无法处理用户的请求。


 
  
 
 
  
    USERNAME:
PASSWORD:

比如上面表单的hello.action,这个action属性不是一个普通的servlet,也不是一个动态JSP页面,当表单提交给hello.action时,Struts2的FilterDispatcher将会起作用,将用户请求转发到对应的Action.

注意的是:Struts2 Action默认拦截所有后缀为.action的请求,如果我们需要将表单提交给Action处理,则应将表单action属性设置为.action的格式。

控制器类

public class HelloAction {
	private String name;
	private String pass;
	public void setName(String name){
		this.name=name;
	}
	public void setPass(String pass){
		this.pass=pass;
	}
	public String execute(){
		if("yang".equals(name) && "1234".equals(pass)){
			return "success";
		} else{
			return "error";
		}
	}
}

前面执行完成后仅仅是执行了页面的转发,没有跟踪用户的状态,当用户登录完成后,我们需要将用户的用户名添加为HTTPSession的状态信息。

为了访问Httpsession实例,struts2提供了一个ActionContext类,该类提供了一个getSession()得方法,但是这个方法的返回值不是HttpSession()而是Map(),但是Struts2的拦截器会负责该Session()和HttpSession()之间的切换。

为了检查我们设置的session属性是否成功,可以给成功后的界面这么设置


 
  
  
 
 
  欢迎,${sessionScope.user},您已经登录。
 

利用JSP2.0表达式语法输出HTTP Session中的user属性。

Action 工具类集成ActionSupport

ActionSupport类是一个工具类,而且已经实现了Action接口,除此之外,还实现了Validateablez接口,提供了数据校验功能。

为了增加输入数据的校验功能,在Action中增加重写validate方法。

public void validate() {
	if(getName()==null || getName().trim().equals("")){
		addFieldError("name",getText("name.required"));
	}
	if(getPass()==null || getPass().trim().equals("")){
		addFieldError("pass", getText("pass.required"));
	}
}

上面添加的重写的validate方法会在系统的execute()方法之前执行,如果执行该方法后Action类的fieldError中已经包含了数据校验错误,请求将被转发到input逻辑视图处,所以还要在struts.xml中添加input逻辑视图名,让其跳转到登录页面。

这个validate方法的缺点就是需要大量重写validate方法,所以可以用struts2的校验框架进行校验。

<&#63;xml version="1.0" encoding="UTF-8"&#63;>



  
    
      
    
  
  
  
    
      
    
  

总结

以上就是本文关于struts2的流程和一系列相关知识代码解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
author-avatar
李雪萱849
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有