Struts2基础

一、简介

  struts2是一个基于MVC设计模式的web应用框架

  它的本质相当于一个servlet,在MVC设计模式中,struts2作为控制器(Controller)来建立模型与视图的数据交互。

  struts2以Web Work为核心,采用拦截器的机制来处理用户请求,这样的设计也使得业务逻辑控制器能够与servletAPI完全脱离开。

  

  web框架特点:

    基于前端控制器模型来设计:浏览器发送的所有请求,都需要经过前端控制器。前端控制器再根据具体的请求所要实现的功能,分发到不同的action来处理,所有的分发操作都是框架自动帮你完成的,我们只需要关心数据怎么处理,封装接收这些都不用管。其余操作都是前端控制器帮你完成。

   

前端控制器:所有的请求都要处理,是通过过滤器来实现的,过滤器当中会有接收数据,封装数据,把所有东西都帮你处理好,最后到action中就可以直接使用了。

  

二、目录结构

  

 1.apps :struts2提供的应用,war文件(发布时文件),web项目打包成war包,直接放入tomcat可以运行。

    里面就是一个最简单的项目,有structs所需要的jar包。

2.docs:struts2的开发文档和API

3.lib:struts2开发需要的jar包

4.src:struts2源码 

三、基本使用

  1.创建一个java web工程

  2.在WEB-INF创建lib文件夹,把struts2核心jar包拷入

  3.在工程中创建jsp,在jsp中写一个连接,发送一个请求。

  

<%--
  Created by IntelliJ IDEA.
  User: uareloser
  Date: 2019/3/27
  Time: 15:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
 <a href="hello.action">hello struts2</a><%--必须要是.action--%>
  </body>
</html>

  4.编写Action类:在src中创建一个普通的类,在类中提供一个方法,方法名是固定的public String execute(),底层会使用反射执行方法。

package com.ual.struts2;

public class HelloAction {
    public String execute(){
        System.out.println("我已经接收到了请求");
        return null;
    }
}

  5.创建struts配置文件: 

    在src下创建一个struts.xml。此文件可以在blank项目的classes目录下找到。

<?xml version="1.0" encoding="UTF-8" ?>

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

    <package name="struts" extends="struts-default">
    <action name="hello" class="com.ual.struts2.HelloAction"/><!--name中写.action之前的内容,class中写与之对应的Action类的全路径-->
    </package>
</struts>

  6.配置前端控制器

    没有前端控制器就没法执行action,因为struts这些功能都是前端控制器所提供的,它是由一个过滤器来实现的,所以要到web.xml中配置核心过滤器。

    

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <filter>
        <filter-name>action2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>action2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

   执行流程:先进入要访问的jsp,通过点击要访问的jsp的标签对应的.action找到对应的映射文件struts.xml,在struts.xml的action标签中找到name值与之前jsp同名的action,从其后的class值中反射创建出相应Action类的对象,自动执行对象中的excute方法,从excute方法返回的字符串匹配struts.xml中action标签下result标签里name值相同的resulet标签,跳转到其后的jsp页面。

  7)在工程下创建一个文件夹,取名叫:resource,作为资源文件夹,右击文件夹,Make Directory as----Resource Root。把src下的配置文件拖入。

四、Struts2配置

  1)Struts2加载顺序:

       

    

后配置的常量的值会覆盖先配置的常量的值

  2)jsp 中Struts标签含义

      

             1.package:包,与java中的包概念不一样,包为了更好的管理action的配置,包中可以包含多个action,多个struts下可以有多个package,

      相关属性:

        name:包的名称,只要在一个项目中不重名即可。

        extends:继承哪个包,通常值为struts-default,默认继承该包,在这个包中定义了很多结果类型与很多拦截器,继承了这些东西之后,action才有了这些功能。

        namespace:名称空间,namespace+name(action中的name)共同决定了访问路径,加了名称空间后,需要在地址栏action前加上名称空间的值才可以访问到相应action。

        abstract:抽象的,用于提供给其他包的继承,值为true/false,为true则只能给别的package继承,自己里面的资源就访问不到了。

    2.action:配置Action类

        属性:

          name:与namespace(package中)共同绝对访问路径

          class:为指定Action类的全路径

          method:执行Action中的哪个方法的方法名,默认值为excute。

          converter:用来自定义类型转换器,一般不设置,内部的转换器已经够用。

  3)常量配置:

    在struts2中提供了 非常多的常量配置。

    default.properties中:

        struts.i18n.encoding=UTF-8:struts2中所有post请求的中文乱码不用处理

        struts.action.extension=action,, :struts2中请求的扩展名,默认扩展名是.action或者什么多不写。

    default.properties中的值是不允许直接修改的,可以有三个位置进行修改

      1.struts.xml中进行修改:通过<constant name="" value="">标签

      2.struts.properties中进行修改(基本不使用)

      3.web.xml中进行修改,通过标签<init-param>(更新了web.xml要重新启动服务器)

    

    后面的内容会覆盖前面的内容。

  4)include

    在一个配置文件当中引入其他的配置文件。

    可以自己创建一个xml文件,复制struts.xml中的格式,在自己创建的xml文件中,可以配置自己的东西,最后在struts.xml中调用

    

五、Action执行访问

    1)Action类的写法

      1.定义一个普通的类,提供excute()方法。

      2.创建一个类,实现Action接口(import com.opensymphony.xwork2.Action),实现接口时,会让你覆盖excute方法,在此接口中定义了5个常量,可以直接返回。

      

    3.Action类继承ActionSupport类:推荐使用此方式,ActionSupport中提供了很多功能,数据校验,国际化等一系列操作方法。

   2)流程代码

      使用通配符:访问路径当中包含要执行的方法,使用统配符调用方法时,内部会验证是否允许该方法

        ual_方法名.action(链接标签写上前缀_方法名.action), 配置文件action 中调用时,name中写ual_*(前缀_*),method={1},其中1代表第一个星的内容,即前缀后的*。

      

      

     也可以在包中允许全局访问的方法

      

 

原文地址:https://www.cnblogs.com/UalBlog/p/10608716.html