• 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代表第一个星的内容,即前缀后的*。

          

          

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

          

     

  • 相关阅读:
    转:一道笔试题-将int型数组强制转换为char*,再求strlen,涉及大小端
    转:git windows中文 乱码问题解决汇总
    git教程1
    刘汝佳黑书 pku等oj题目
    C/C++ qsort()快速排序用法
    char s[]字串和char *s字串有什麼区别?
    c语言‘’ ,‘0’, “0” ,0之间的区别
    带符号的char类型取值范围为什么是-128——127
    c语言memset详解
    【线性规划与网络流24题】孤岛营救问题 分层图
  • 原文地址:https://www.cnblogs.com/UalBlog/p/10608716.html
Copyright © 2020-2023  润新知