java

位置:IT落伍者 >> java >> 浏览文章

从实例看struts2运行原理


发布日期:2022年06月01日
 
从实例看struts2运行原理

简单例子

先做一个最简单的struts的例子在浏览器中请求一个action然后返回一个字符串到jsp页面上显示出来

第一步把struts最低配置的jar包加入的项目中

commonsloggingjar

freemarkerjar

ognljar

strutscorejar

xworkjar

第二步在webxml中加入拦截器配置

<filter>

<filtername>struts</filtername>

<filterclass>orgapachestrutsdispatcherFilterDispatcher</filterclass>

</filter>

<filtermapping>

<filtername>struts</filtername>

<urlpattern>/*</urlpattern>

</filtermapping>

第三步把空的strutsxml配置文件放到项目src下面

<struts>

</struts>

第四部编写自定义的action类

package test;

import comopensymphonyxworkActionSupport;

public class HelloAction extends ActionSupport {

private String str;

public String hello() {

thisstr = hello!!!;

return success;

}

public String getStr() {

return str;

}

public void setStr(String str) {

thisstr = str;

}

}

第五步编写strutsxml配置文件

<struts>

<package name=test namespace=/np extends=strutsdefault>

<action name=hello class=testHelloAction method=hello>

<result name=success>/hellojsp</result>

</action>

</package>

</struts>

第六步编写hellojsp文件

<%@ page language=java contentType=text/html; charset=UTF pageEncoding=UTF%>

<%@ taglib prefix=s uri=/strutstags%>

<!DOCTYPE html PUBLIC //WC//DTD HTML Transitional//EN>

<html>

<head>

<meta httpequiv=ContentType content=text/html; charset=UTF>

<title>Test</title>

</head>

<body>

<h><s:property value=str/></h>

</body>

</html>

第七步启动tomcat在浏览器中访问

hello 是项目名字

np 命名空间对应namespace里面的字符串

helloaction 其中hello对应action里面的字符串action表示请求的是一个action

运行机制

)客户端在浏览器中输入一个url地址

)这个url请求通过http协议发送给tomcat

)tomcat根据url找到对应项目里面的webxml文件

)在webxml里面会发现有struts的配置

)然后会找到struts对应的strutsxml配置文件

)根据url解析strutsxml配置文件就会找到对应的class

)调用完class返回一个字String根据strutsxml返回到对应的jsp

struts流程

上图来源于Struts官方站点是Struts 的整体结构

一个请求在Struts框架中的处理大概分为以下几个步骤

) 客户端初始化一个指向Servlet容器(例如Tomcat)的请求

) 这个请求经过一系列的过滤器(Filter)

) 接着FilterDispatcher被调用FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action

) 如果ActionMapper决定需要调用某个ActionFilterDispatcher把请求的处理交给ActionProxy

) ActionProxy通过Configuration Manager询问框架的配置文件找到需要调用的Action类

) ActionProxy创建一个ActionInvocation的实例

) ActionInvocation实例使用命名模式来调用在调用Action的过程前后涉及到相关拦截器(Intercepter)的调用

) 一旦Action执行完毕ActionInvocation负责根据strutsxml中的配置找到对应的返回结果

Struts的核心就是拦截器Strutsxml中所有的package都要extends=strutsdefault同理与所有的Java类都要extends自Object一样strutsdefaultxml里面就是要做以上事情

上一篇:Hibernate 使用外部 Connection 的问题

下一篇:Eclipse中perspective的两种使用方法详解