struts流程框架及简单使用

Struts结构

在这里插入图片描述
一个请求在Struts2框架中的处理大概分为以下几个步骤:

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

2、这个请求经过一系列的过滤器(Filter),这些过滤器中有一个ActionContextCleanUp的可选过滤器,对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin。

3.FilterDispatcher被调用来询ActionMapper(Action映射器)这个请求是否需要调用某个Action;

  1. 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy(Action代理);

  2. ActionProxy通过Configuration Manager(配置管理器)询问框架的配置文件struts.xml,找到需要调用的Action类; 6. ActionProxy创建一个ActionInvocation(Action容器)的实例。

  3. ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器的调用。

7.当action处理请求后,返回相应的结果视图(jsp、FreeMarker)。在这些结果视图中可以使用struts标签显示数据及对数据逻辑方面的控制。

8.HTTP请求回应给浏览器,在回应的过滤中同样经过过滤器链。

环境搭建

第一步:从官网上下载struts2包,下载后解压到本地。
在这里插入图片描述
apps 示例程序,以war格式给出,war可以解压
docs 帮助文档
Lib 支持类库,包括struts2的jar包及依赖jar包文件
src 源码

lib文件包含了上百个库文件,但大多数是可选的,有些库是插件,用于和其他框架的整合。我们开发时不必全部用到这些库文件,我们可根据apps文件下的模板工程查看需要哪些jar包。进入apps文件看到struts2自带了5个工程模板。
在这里插入图片描述
第二步 用解压缩工具解压的struts2-blank-2.war压缩包,展开后是一个非常简单的项目,从WEB-INF/lib目录中可以看到多个个库文件,将这些jar包放到项目的WEB-INF/lib目录下。

第三步 web.xml文件配置
将Struts2所带的过滤器配置到工程的web.xml文件中。打开刚才解压的struts2-blank.war下WEB-INF/web.xml文件,将如下内容复制到项目的web.xml文件中。

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
<!-- 自从Struts 2.1.3以后,下面的FilterDispatcher已经标注为过时
<filterclass>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
-->
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>//设置所有请求都要经过这个过滤器
 </filter-mapping>

第四步 配置action
Action类是最基本的逻辑处理单元,MVC模型中分发器将不同的请求分发给不同的action进行处理,action担任控制器的角色。一个Action类需要继承ActionSupport类。该类放在src目录下。

package com.zx.action;
public class LoginAction extends actionSupport{
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute() {  //默认执行的方法
this.message = "我的第一个struts2应用";
return "success";
}
}

第五步 struts.xml文件配置

将struts2-blank/WEB-INF/src/java下的struts.xml复制到新建项目工程的src中。
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <package name="first" namespace="/test" extends="struts-default">
        <action name="LoginA" class=”com.zx.action.LoginAction”>
            <result name=”success”>/welcome.jsp</result>
<result name=”login”>/index.jsp</result>
        </action>
    </package>
</struts>

<package name="first" namespace="/" extends="struts-default">

package:用于管理一组业务功能相关的action。
name:配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,他不对应java的类包,如果其他包要继承该包,必须通过该属性进行引用。
namespace:该属性用于定义该包的命名空间。命名空间作为访问该包下Action的路径的一部分,如访问上面例子的Action,访问路径为:/test/loginA.action。namespace属性可以不配置,如果不指定该属性,默认的命名空间为“”(空字符串)。
extends: 通常每个包都应该继承struts-default包,这样才能使用
struts2提供的核心功能。Struts2很多核心的功能都是拦截器来实现。如从请求中把请求参数封装到action、文件上传和数据验证等。
struts-default包是在struts2-core-2.x.x.jar文件中的struts-default.xml中定义。 struts-default.xml也是Struts2默认配置文件。Struts2每次都会自动加载struts-default.xml文件。

<action name="LoginA" class=”com.zx.action.LoginAction”>

name:配置该action的名称。自定义,不需要与action类名相同。
class:指定action的完整类名
该action未指定method,默认执行的是execute方法,如在浏览器中输入”http://localhost:8080//LoginA.action”,执行的是该action的execute方法。

<result name=”success”>/welcome.jsp</result>

如果LoginAction的execute()方法返回“success”,则访问welcome.jsp;如果返回”login”,则访问index.jsp

第六步 前台jsp页面

特别注意的是,当需要把表单数据提交给action时,指定表单的action属性值为struts.xml文件中action标签下name属性值即可。

<body> 
  <s:form action="loginA">
  	<s:label value="登录信息"></s:label>
  	<s:textfield name="username" label="用户名"></s:textfield>
  	<s:password name="userpass" label="密码"></s:password>
  	<s:submit value="登录"></s:submit>
  </s:form>
  </body>

action的应用

action中默认执行的是execute()方法,除此之外还可以执行其他方法,这些方法没有参数,并且返回类型是String,可以有throws声明。

package com.zx.action;
public class LoginAction extends actionSupport{
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute() {  //默认执行的方法
this.message = "我的第一个struts2应用";
return "success";
}
public String login(){  //action中其他方法
    return execute();
}
}

在struts.xml中配置action:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <package name="first" namespace="/test" extends="struts-default">
        <action name="LoginA" class=”com.zx.action.LoginAction”>
            <result name=”success”>/welcome.jsp</result>
<result name=”login”>/index.jsp</result>
        </action>
        <action name="LoginB" class=”com.zx.action.LoginAction” method=”login”>
            <result name=”success”>/welcome.jsp</result>
<result name=”login”>/first.jsp</result>
        </action>
    </package>
</struts>

在LoginA中,当通过“//LoginA.action”访问action,默认执行的是execute()方法;如果需要访问login()方法,有两种途径:
(1)//LoginA!login.action
(2)//LoginB.action,前提是LoginB中指定了method属性值。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值