struts2流程二 | 学习笔记

简介: 快速学习 struts2流程二,介绍了 struts2流程二系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门struts2流程二】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/537/detail/7290


struts2流程二

 

一、流程

设置 browser tomcatbrowser tomcet 发起一个请求(request),然后打开源码,当找不到源码时,点击 Attach Source,有两种办法,如果是文件夹就选择External Folder,如果是一个压缩文件就选择 Eternal File

打开 Action.class

public interface Action{

the action eecution was successful.show result

view to the end suer

public static final String SUCCESS = "success";

The action execution was successful but do not

show a view. This is useful for actions that are

* handling the view in another fashion like redirect.

public static final String NONE = "none" ;

/**

The action execution was a failure.

关联完之后找到 StrutsPrepareAndExecuteFilter.class

以断点启动,进入浏览器,

网址输入http://localhost:8080/03struts2_login/login.jsp,程序设置

if ( excludedPatterns != null && prepare .

isUrlExcluded(request

chain. doFilter( request, response);

}else {

request = prepare . wrapRequest(request);

ActionMapping mapping = prepare. findActi onMapping(request , 

if (mapping == null) {

boolean handled = execute. executeStaticResourceRequest

( !handled){

chain.dofilter(request,respose;

}

}else{

这时候 mapping null,是空的,表明请求的 action 找不到了,返回 json 界面就直接请求对应资源。

返回浏览器发送登录请求的时候,就进来了。

进来的过程是只要 browser 发送请求就给 tomcattomcat 创建 request()对象,创建 HttpServletRequest

tomcat 创建 request 对象()给 HttpServletResponsetomcat doFilter StrutsPrepareAndExecuteFilter,

public void doFilter( ServletRequest req, ServletResponse res, FilterCh

HttpServletRequest request = (HttpServletRequest) req ;

HttpServletResponse response = (HttpServletResponse) res;

try

prepare . setEncodingAndLocale(request, response);

prepare . createActionContext(request, response)

prepare. assignDispatcherToThread();

if ( excludedPatterns :!= null && prepare.

isUrlExcluded(requestchain. doF ilter(request, response);

else

request = prepare . wrapRequest (request);

ActionMapping mapping = prepare.

findActionMapping( request, .

if (mapping ==null)

boolean handled = execute. executeStatic ResourceRequest

if (!handled)

Expression 中增加 name request.getParameter(“pwd”),value 1111

过程中 StrutsPrepareAndExecuteFilte pepareOperations 进行 findActionMapping()prepareOperations 返回 ActionMapper()。

mapping 不等于 null 的时候,使用 executeAction 方法,下一步使用serviceAction()方法作用于 Disoatcher

String name = mapping. getName();

String method = mapping. getMethod();

Configuration config = configurationManager .

getConfiguration( )ActionProxy proxy = config.

getContainer() . getInstance( ActionPr

namespace,name, method, extraContext, true, false);

request . setAttribute( ServletActionContext . STRUTS_ VALUESTACK_ KE'

Dispather 通过 getconfiguration 作用于 configurationmanager

configurationmanager 通过 getinstance 作用于

defaultActionProxyFactory

public ActionProxy createActionProxy( ActionInvocation inv,

String name:

DefaultActionProxyproxy= new DefaultActionProxy(inv,

namespace ,

container . inject(proxy);proxy . prepare();

return proxy

defaultActionProxyFactory 通过 createActionProxy()作用于 DefaultActionProxy,根据 protected Configuration confi gurat ion;

protected ActionConfig config;

protected ActionInvocation invocation;

protected UnknownHandlerManager unknownHandlerManager;protected String actionName ;

protected String namespace;

protected String method;

DefaultActionProxyFactory 调用 ActionInvocation,由他来完成一系列处理。调用Result....

public DefaultActionInvocation(final Map<String, Object> extraContext, final boolean

pushActiDefaultActionInvocation. this. extraContext = extraContext;

DefaultActionInvocation. this . pushAction = pushAction;

@Inject

public void setUnknownHandl erManager

(UnknownHandlerManager unknownHandlerManager) fthis . unknownHandlerManager = unknownHandlerManager ;

@Inject

public void setValueStackFactory(ValueStackFactory fac) fthis. valueStackFactory = fac

结束这个程序之后,挨个进行返回

相关文章
|
3天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1090 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1754 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
697 152
|
11天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
661 13
|
6天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
447 5