struts2入门01

1、概述

struts2框架应用javaEE三层结构中的web层,用于显示。

struts2框架在struts1和webwork基础之上发展全新的框架

struts2解决的问题:配置过滤器拦截请求(该类有不同的方法,根据不同请求,执行不同的方法),该类称为action

版本:2.3.24-all比较稳定

web层常见框架:springMVC框架,struts2框架

2、入门案例

第一步:创建web项目

第二步:导入struts框架的jar包,直接在实例程序中找jar包

第三步:创建action

(1)、(java web)每次访问servlet的时候,都会执行service方法

(2)、访问action,每次访问action时候,默认执行execute方法,创建execute方法

(3)、配置action类的访问路径:

a、创建struts2核心配置文件(struts.xml);

b、引入dtd约束,根标签<struts></struts>;

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

c、配置action:

<package  name="demo" extends="struts-default" namespace="/">
    <action name="hello" class="全类名">
        //响应的页面
        <result name="ok">/hello.jsp</result>
    </action>
</package>

d、访问路径:http://127.0.0.1/demo/hello.action

e:配置过滤器:在web.xml文件中配置过滤器

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

*404:服务器未启动or过滤器有问题

3、struts底层基本执行过程

浏览器输入地址发送请求>过滤器(在服务器启动时就创建了)>获取到请求的路径URL(得到uri)>在src下面找到struts.xml,使用dom4j解析,得到xml中内容(action标签,匹配那么属性)>匹配name属性值一样,找到name属性所在的classs属性值,得到action全路径,使用反射实现功能>执行反射代码>得到action方法的返回值,在struts.xml文件中,找到action标签中result标签,匹配result标签的name属性,如果一样,跳转到配置页面中。

//反射代码:让action的方法执行
Class clazz = Class.forName("action全路径");
//得到名称是execute方法
Mothod m = clazz.getMethod("execute");
//方法执行
Object obj = m.invoke();

4、源码查看

StrutsPreparAndExecuteFilter是struts的过滤器,init()方法

在启动服务器的时候创建过滤器,创建过滤器的时候加载init()方法,在init方法中加载主要配置文件(自己创建的文件<web.xml,struts.xml>和struts2自带的文件)

5.struts配置

A、核心配置文件:名称和路径是固定的(名称<struts.xml>,路径<项目的src下>);

B、配置文件中主要三个标签package、action、result。

package标签
    1.类似于代码包,区别不同的action,要配置action,必须先写package标签,才能配置。
    2.属性:name属性>与功能无关,在一个配置文件中,多个package的name属性值不能相同
            extens属性>表示继承的关系,属性值固定struts-default,配置后,表示在package里面配置的类才具备action功能
            namespace属性>名称空间,属性值需要与action的name属性值构成访问路径/或者/url/

action标签
    1.用于配置action访问的路径
    2.属性:name属性>属性值需要与package的namespace属性值构成访问路径,可以有多个action,但name不      能相同
            class属性>action全路径
            method属性>action默认执行execute方法,也可以执行其它方法,让action里面多个方法执行,使用该属性进行配置

result标签
    1.根据action里面的方法返回值,配置到不同的路径里面
    2.属性:name属性>和方法的返回值一样
            type属性>配置如何到路径中去(转发,重定向等),默认是做转发操作

*转发请求一次,地址栏不会发生变化,重定向请求两次,地址栏发生改变

6、修改struts2默认常量值

(1)常用方式
    在struts.xml中进行配置
    <constant name = "struts.i18n.encoding" value="UTF-8"></constant>
 (2)其它方式<2种>
    -在src下面创建struts.properties,进行修改
    -在web.xml文件中进行配置

7、介绍常用的常量(待续)

struts.i18n.encoding=UTF-8
(1)表单提交到action里卖弄,在action可以获取表单提交数据
(2)表单提交数据有中文,有乱码问题,解决:post提交直接设置,get提交做编码转换
(3)如果在action获取表单通过post方式提交中文,中文乱码问题不需要自己处理

8、分模块开发

(1)单独写配置文件
(2)核心配置文件中引入其它配置文件
    <include file="cn/itcast/action/other.xml"></include>

9、action编写方式

action编写有3中方式
第一种方式:创建普通类,不继承任何类,也不实现任何接口
第二种方式:创建类,实现接口action(用得不是很多)
第三种方式:创建类,继承actionsupport(主要使用的方式)

10、访问action的方法

一共有三种方式
第一种:使用action标签中的method属性,在这里面写执行的action的方法
    <action name="add" class="com.xx.action" method="add"></action>
第二种:使用通配符方式实现(重点使用)
    表示匹配任意,name属性里面添加‘*’,book_*等进行匹配
    <action name="book_*" class="com.xx.action" method="{1}"></action>method是*的值
第三种:动态访问实现(不用)
    1.开启struts.enable.DynamicMethodInvocation常量,设置值为true
    2.访问:bookAction!add.action

11、域对象操作

1、request
    HttpServletRequest request = ServletActionContext.getRequest();
    request.setAttribute(key,value);
2、session
    HttpServletRequest request = ServletActionContext.getRequest();
    HttpSession session = request.getSession();
    session.setAttribute(key,value);
3、ServletContext
    HttpServletRequest request = ServletActionContext.getRequest();
    ServletContext context = ServletActionContext.getServletContext();
    context.setAttribute(key,value);

猜你喜欢

转载自blog.csdn.net/qq_40790831/article/details/84864187
今日推荐