A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-6-29 11:14 编辑

Struts2框架总结

框架的概述
概念:框架就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。
优点:
重用代码大大增加,软件生产效率和质量也得到了提高
使用框架开发,它提供统一的标准,大大降低了我们的后期维护。
常用框架
SSH
SSM
环境搭建
1.导入jar包;
2.配置web.xml,配置一个叫做StrutsPrepareAndExecuteFilter的filter;
3.配置struts.xml;
4.创建action类,在类中编写业务逻辑,通过struts.xml将action与访问uri进行绑定
struts2执行流程
1.前端页面发起请求会被StrutsPrepareAndExecuteFilter拦截
2.会调用strtus2框架默认的拦截器(interceptor)完成部分功能
3.struts.xml---->找到类的具体方法,执行方法中的操作
4.获取方法的返回值--->struts.xml中的具体action--->result(决定页面的跳转)
5.一般管StrutsPrepareAndExecuteFilter 叫做前端控制器(核心控制器)
struts2配置文件加载顺序(面试)
l 第一个加载的是default.properties文件
l 位置:strtus2-core.jar包 org.apache.struts2包下
l 作用:主要是声明了struts2框架的常量
l 第二个加载的是一批配置文件
l Struts-default.xml
l 位置:struts2-corl.jar
l 作用:声明了interceptor result bean
l Struts-plugin.xml
l 位置:在struts2的插件包中
l 作用:主要用于插件的配置声明
l Struts.xml
l 位置:在我们自己的工程中作用:用于我们自己工程使用strtus2框架的配置
l 第三个加载的是自定义的strtus.properties
l 位置:都是在自己工程的src下
l 作用:定制常量
l 自定义配置提供
l 第五加载的是web.xml配置文件
l 主要是加载strtus2框架在web.xml文件中的相关配置.
l 第六 bean相关配置
struts.xml标签配置
package标签
name:定义一个包名称,必须唯一
namespace:与action标签中的name属性联合使用来确定一个action的访问路径
extends:指定继承自哪一个包。一般是"struts-default"
abstract:代表当前包是抽象的,主要是用于被继承
action标签
name:与package标签中的namespace属性联合使用来确定一个action的访问路径
class:用于指示当前的action类
method:于指示当前的action类中的哪个方法执行
result标签
name:作用是与action类的method方法的返回值进行匹配,来确定跳转路径
type:用于指定跳转方式
text位置填写跳转的路径
constant常量标签
name
value
default.properties文件中定义了struts2框架常用常量 .
问题:我们怎样可以定义常量
1.可以在src下创建一个strtus.properties配置文件
2.可以在web.xml文件中配置
3.可以直接在strtus.xml文件中定义常量 (推荐)
扩展:action及result标签的默认值
当一个请求来时,如果查找不到指定的 class 及对应的 method 就会执行ActionSupport 类中的 execute 方法。
在这个类的 execute 方法中默认返回的是”success”。也就是说,result 的 name 属性默认值是 success,默认的跳转方式是请求转发 dispatcher
获取Servlet API
通过ServletActionContext获取
ServletActionContext.getRequest()
ServletActionContext.getResponse()
ServletActionContext.getServletContext()
ServletActionContext.getReqeuset().getSession()
采用注入的方式
Struts2框架在运行时,请求会被StrutsPrepareAndExecuteFilter拦截,会根据请求,去 strtus.xml文件中查找到匹配的action,在action执行前,会走一些interceptor",其中有一个叫做servletConfig的拦截器,可以将Serlvet API注入到Action类中
如果要在Action类中使用Servlet API,可以让Action实现相应的Ware接口
//ServletRequestAware
@Override
public void setServletRequest(HttpServletRequest request) {
    this.request = request;
}
//ServletResponsetAware,ServletContextAware类似
在action中获取请求参数
属性驱动
对象驱动
模型驱动,实现ModelDriven接口
Servlet相关api
ognl表达式
OGNL 三要素: 表达式;OgnlContext上下文;Root 根
ognl在jsp中的使用:
<!--引入标签库-->
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:property value="ongl表达式">
<s:iterator var="遍历出来的每一个对象" value="待遍历对象"></s:iterator>
ValueStack值栈
·
ValueStack是一个容器,目的是将action中产生的数据携带到页面上,ValueStack被存放在request中

接口:com.opensymphony.xwork2.util.ValueStac
实现类:com.opensymphony.xwork2.ognl.OgnlValueStack
ValueStack分为两部分
Root根(CompoundRoot):本质是一个ArrayList,主要存储action的相关数据
Context:本质是一个Map<String,Object>,主要存储了一些引用,这个引用主要是关于 web 开发中相关信息
parameters :请求参数
request:请求对象中所有属性
session:会话对象中所有属性
application:application 对象中的所有发展
以上信息都是通过Map存储的
#:获取Root中的内容不需要加#号,context中的内容需要加#号
%:用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。
在国际化资源文件中,引用OGNL表达式
在Struts 2配置文件中,引用OGNL表达式
request,action,actionContext,valueStack的关系
当客户端向我们发送一个请求,服务器就会创始一个 Action 来处理请求,struts2 中的 action是多例的,每一次请求都会有一个新的 action 对应。所以它不存在线程安全问题。
当客户端向我们发送一个请求,服务器会根据struts-default中配置的路径创建一个action实例,同时会创建一个对应的actionContext和valueStack,并将action实例存入valueStack中,如果action实现了ModelDriven接口,那么也会把model对象存入vs中
存值
手动向根中存储
push(Object)
set(key,value)
自动存储
当前action对象
如果action实现了modeldriven接口,那么也会存储model对象
其他api
如果action继承了ActionSupport,那么可以使用addActionError(),addActionMessage(),addFieldError()向vs中存储信息,相应的使用<s:actionerror>,<s:actionmessage>标签在jsp中取出
拦截器Interceptor
自定义Interceptor
实现com.opensymphony.xwork2.interceptor.Interceptor接口,或者继承MethodFilterInterceptor类
在struts.xml中配置<interceptors>标签,并用<interceptor-ref>引用
过滤执行方法
创建Interceptor时继承MethodFilterInterceptor
在struts.xml的<interceptors>中配置<param name="includeMethods"或者"excludeMethods">方法名</params>
文件上传
条件:<from enctype="multipart/form-data" method="post"></form> ,<input type="file" name="">
package com.example;

import java.io.File;
import com.opensymphony.xwork2.ActionSupport;

public UploadAction extends ActionSupport {
    private File file;
    private String contentType;
    private String filename;

    public void setUpload(File file) {
        this.file = file;
    }

    public void setUploadContentType(String contentType) {
        this.contentType = contentType;
    }

    public void setUploadFileName(String filename) {
        this.filename = filename;
    }

    public String execute() {
        String path = "";
        File destFile = new File(path,filename);
        FileUtils.copyFile(file,destFile);//此处有try catch
        return SUCCESS;
    }
}
注解开发
类上:
@NameSpace("/")
@ParentPackage("struts-default")
方法上
@action(value="",results={@Result(name="",type="",location=""),@Result(...)})



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马