Struts2框架 简单介绍

1.什么是Struts2框架?

          

Struts2框架是用来替代servlet和jsp  他的功能就是访问服务器的请求、

 

2.Struts2框架的优点

1. 接受参数(能自动封装)
2. 参数的校验
3. 可以控制页面的跳转
4. 可以防止表单的数据重复提交
5. 显示等待页面

3. 历史

Struts2,Struts1 在技术层面讲他们没有任何关系。技术使用的webwork这个公司的技术。

 

创建Action类

public class HelloAction {
    public String hello(){

        System.out.println("hellostruts2");
        return "success";
       
    }
}

 

3创建配置文件  struts.xml

(1)文件位置必须在src目录名字也必须是struts.xml

导入约束

约束文件 xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPEstrutsPUBLIC
       
"-//Apache Software Foundation//DTD StrutsConfiguration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
   

</struts>

然后在引入struts标签

(2)去配置 action

(3)创建一个hello.html

(4)web.xml 中去配置过滤器 这是因为struts2是基于过滤器1

配置过滤器的类名比较长  打开编译器全局搜索  输入StrutsP就可以复制这个类的相对路径

<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>
</web-app>

总结 404 错误

1、       struts.xml文件位置放错了

2、       struts.xml文件名字写错了

3、       hello.xml文件位置放错了

4、       Tomcat启动失败

5、       Struts.xml中配置写错了

(1)         package 中的namespace和地址中的不一致

(2)         action中的name和地址中的helloAction不一致

(3)         result里面的name字段和action中的返回值不一致

(4)         result中值不是/hello.html  写错了

 

 

配置文件详解

1.strtus.xml

   Namespace对应的地址。


package

:它跟项目包没有关系 它是用来管理action
name 给这个package起名字 没有特别含义 可以随便命名 一般情况下他的命名是按照当前packgae管理action的分类来命名package 和package的名字不能重复
namespace:访问路径地址前缀 跟name 没有关系跟其他package中的namespace能不能重复 没有要求
extends:继承  继承自struts-default 必须写名字不能改。 固定写法 从struts 核心包中struts-2.2-core下面的 struts-default.xml 这里面配置了很多默认的属性
abstract :抽象的意思 声明的一个标志 当前这个配置文件不能独立运行 等待被继承
action配置
   <action name="helloAction" class="ch.hd.hello.HelloAction" method="hello">
    <result name="success" type="redirect">/hello.html</result>
    <!--result
    name对应的事action类中的method返回值 名字可以随便写 只要和action类中的返回值结果一样就可以
    但是一般情况下使用特定
    type:dispatch 转发
    redirect 重定向
    标签中间 的值:跳转页面的地址
    -->
</action>
 

2.常量配置

默认的常量配置在struts2的核心包下的

默认常量配置的文件名是default.propertites

如何修改这些常量

(1)在struts.xml中去修改

<!--i8n 国际化 相当于我们在servlet中设置的编码 解决了post请求的中文乱码-->

<constant name="struts.i18n.encoding"value="utf-8"></constant>

(2)在src目录下创建struts.properties文件直接在该文件中去修改常量即可

(3)在web.xml文件中去修改 添加一个context-param。 在 param-name

中书写常量名  在param-value中书写 常量值

三个地方同时修改哪个生效

Web.xml>struts.properties>struts.xml

推荐使用第一个

 

常用的常量

(1)设置编码 解决了post 请求的乱码问题

<constant name="struts.i18n.encoding"value="utf-8"></constant>

(2struts.action.extension 设置action的访问扩展名

(3)developerMode  开发者模式 默认关闭
1.热部署 你修改配置文件后 等一段时间会自动加载 
2.提高错误信息的提示(友好的错误提示)
<constant name="struts.devMode" value="true"></constant>

 

3.高级配置

为什么使用动态方法

简化代码量更方便

 

如果配置动态方法

 (1)推荐使用

<action name="userAction*"
       
class="ch.hd.dynamic.UserAction"
       
method="{1}"
>
   
<result name="success">/hello.html</result>
</
action>

Action配置中的name属性 决定着浏览器的访问地址

Struts2 可以采用通配符的方式默认去读取method{1}会自动将路径中userAction….配置到method中。

(2)开启动态方法

首先要开启动态方法的常量

<constant name="struts.enable.DynamicMethodInvocation"value="true"></constant>

将action中的method 属性删除掉

完成了动态方法的开启

测试的时候 在浏览器的路径中 输入action 的name值+!+方法名(Action中的方法名)

注意:

第一种方法 在struts2的高版本中会无效

 首先你也要开启动态方法,

4.默认配置

访问流程

3.struts2过滤器去加载配置文件struts.xml

4.路径中的第一个地址 namespace 遍历你的stuts.xml中package namespace属性如果他找到了和地址中匹配的就进入到该包,如果没有找到就报异常

5.找到了package 再去路径后面的地址 然后去package找action的name属性如果找到匹配的 就进入到action配置的Action类中

6.通过action 的method 属性去执行Action对应的方法

7.根据执行的Action类中的方法获得返回值 然后回到struts.xml里面的result标签 通过读取result中的配置打开对应的页面】

 

Action类的创建

总共有三种方式

1.pojo类

2.实现action类

3.继承ActionSupport类(推荐)

注意:action里面的方法末班是固定的权限 :pulibc 返回值类型:String

方法中不允许有参数

页面的跳转方式

1.转发

2.重定向

3.转发到自己的action 变为chain

4.重定向action type变为redirectAction

5.不跳转接收ajax请求

1使用原生的servlet Api

ActionContextstruts2  我们把它叫做数据中心

Requset   原生对象   

Response原生对象

Session     原生对象  

ServletContext  原生对象

Attr             Map

Requset          Map struts2不建议使用 如果要使用就用ActionContext对象

Session             Map

ServletContext  App lication  域      Map
ActionContext 生命周期
所有的servlet的对象都存了,他的生命周期是随着其中最短的人而创建和销毁 也就是request对象 ActionContext 都会重新创建
所以他解决了 线程安全的问题
 
使用servletApi响应ajax请求
1.获得response对象(2种方法)然后回到原生态servlet响应中
2.action中的方法值必须是NONE (如果设置NONEnamestruts.xml中就不用书写result标签了)

(2 stream)

1.在Action类中创建一个InputStream对象

2.给这个对象增加一个get方法

3.struts.xml中的result标签中设置type=stream

4.Action 最终可以将json字符串转化为InputStream

 

3 使用json插件)

1.导包

 

2.建立一个Action

定义你想返回的json的键名

生成get set方法

然后在Action 访问的方法中为这个json键名的对象进行赋值

3.配置struts.xml文件

重新建package extedns 继承不能写struts-default 要写json-default

(在struts-json-plugin 包的struts-plugin-xml中)

Action 不变

Result name属性不变 type变为json (在struts-json-plugin包的struts-plugin.xml中)

参数的接收

1.属性驱动

原因:struts2是线程安全

在Action类中直接定义属性名然后设置get  set方法

在访问的地方传入对应属性名和值 struts2自动接收

 

 

2.对象驱动

 

定义一个bean类

在Action定义一个对象并且加上get set方法

并且在请求的地方请求参数 键值有规定必须按照规定的对象名.属性名的方式传递

 

3.模板驱动

实现 ModuleDrive<User>接口

重写方法

在Action中创建一个user对象并且要new对象

 

请求的地方还是按照对象属性传递。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值