zoukankan      html  css  js  c++  java
  • Struts2框架

    1、struts2概述

    1. struts2框架应用javaEE三层结构中web层框架

    2. struts2框架在struts1和webwork基础之上发展的一个全新的框架,此处注意struts2struts1用法是完全不一样的

    3. struts2解决的问题:在以前执行一个管理系统中的增删改查操作的时候,需要为每一个增删改查操作创建一个Servlet,如果功能很多,需要创建很多的Servlet,这会造成维护的不方便,而在struts2中可以很好的解决。struts2执行过程如下:

     

     

     

     

     

     

     

     

    4. struts2版本:struts2里面有很多的小版本

    5. web层常见框架

    (1)struts2

    (2)SpringMVC

    2、struts2框架入门

    第一步:导入jar

    (1)struts包中,在lib中有jar包,不能把这些jar都导入到项目中,因为有一些暂时用不到,导入进去会出错

    (2)apps目录里面,这里面放的都是示例程序,找到示例程序,从示例程序里面复制jar包到工程里面

       第二步:创建action

    (1)Servlet中,每次访问Servlet的时候,都会执行service方法

    (2)现在在struts2中,访问action,每次访问action的时候,都默认执行execute方法-------------配置action类的访问路径

    第三步:配置action访问路径

    (1)创建struts2核心配置文件,配置文件名称和位置是固定的,位置必须在src下面,名称是struts.xml

    (2)引入dtd约束

    struts2apps示例程序中src目录下Struts.xml中可以直接把约束复制下来

    <!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

    "http://struts.apache.org/dtds/struts-2.3.dtd">

     

     

    (3)action的配置

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

    <!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

    "http://struts.apache.org/dtds/struts-2.3.dtd">

    <struts>

    <package name="hellodemo" extends="struts-default" namespace="/">

    <!--name:访问名称url  -->

    <action name="hello" class="com.test.action.HelloAction">

    <!-- 配置execute方法的返回值到不同的页面中去,/hello.jsp结果返回到hello.jsp页面中 -->

    <result name="ok">/hello.jsp</result>

    </action>

    </package>

    </struts>

     

    访问路径:http://localhost:8080/struts2_day01/hello.action

    这个时候访问,会报404错误,因为没有配置过滤器

    (4)配置struts2过滤器的配置

    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>

     

    使用struts2可以节省许多代码,但是需要写配置文件

     

     

    3、struts2基本执行过程

    执行图示:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    执行过程中,注意反射部分的代码。

     

    4、查看源代码

    过滤器:

     

     

    1. 过滤器在服务器启动的时候创建,创建过滤器时候执行init()方法

    (1)init方法中主要加载配置文件

    -----包含自己创建的配置文件和struts2自带的配置文件

    **struts.xml

    **web.xml

     

     

     

     

    5、struts2相关配置(1)Struts2的核心配置文件

    1. 名称和位置都是固定的,名称是struts.xml  位置在src下面

     

     

    2. 在配置文件中主要三个标签 packageactionresult、标签里面的属性

    Package标签

    1. 类似于代码包,区别不同的action,要配置action,必须首先写package标签,写了package标签,在package里面才能配置action

    2. Package标签属性

    (1)name属性

         name属性值跟功能本身没有关系的

         在一个配置文件中可以写多个package标签,name属性值不能相同的

     

    (2)extends属性

    <package name="hellodemo" extends="struts-default" namespace="/">

       属性值是固定的,structs-default

       写了这个属性值之后,在package里面配置的类具有action功能

     

    (3)namespace属性

      ---  namespace属性值和action标签里面的name属性值构成访问路径

     

     

     

     

     

    Action标签

    1. action标签配置action访问路径

     

    2. Action标签属性

    (1)name属性

       --namespace属性值和action标签里面的name属性值构成访问路径

       --可以在package标签里面写多个action标签,但是actionname属性值不能相同的

     

    (2)class属性

      --action全路径

    (3)method属性

    action里面默认执行execute()方法,但是在action里面也写了其他的方法,如果让action里面的多个方法执行,使用method进行配置

     

    Result标签

    1. 根据action的方法返回值,配置到不同的路径里面

     

    2. Result标签属性

    (1)name属性

    --和方法返回值一样

     

     

    (2)type属性

       --配置如何到路径中(转发或者重定向)

       --type属性值默认是做转发操作

     

     

     

     

    2Struts常量配置

    1. struts框架,帮我们实现一部分功能,struts里面有常量,在常量里面封装一部分功能。Stmts2的这些常量大多在默认的配置文件中已经配置好,但根据用户需求的不同,开发的要求 也不同,可能需要修改这些常量值,修改的方法就是在配置文件对常量进行重新配置。

     

    2.struts默认的常量位置(记住)

     

     

     

     

    3. 修改structs2默认常量值

    (1)常用的方式

       struts.xml中进行配置

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

    (2)还有两种方式(了解)

     

    <1>src下面创建struts.properties,进行修改。struts.properties文件是一个标准的properties文件,其格式是key-value对,即每个key对应一个 value, keyStruts2框架中的常量,而value则是其常量值。

     

    <2>web.xml进行配置,在web.xml文件中通过< imt-param>元素配置常量

     

     

    4.介绍几种最常用的常量

    Struts.i18n.encoding=UTF-8

    (1)表单提交数据到action里面,在action里面可以获取表单提交数据

    (2)表单提交数据有中文,有乱码问题,解决方式:

       Post 提交直接设置编码

       Get 提交做编码转换

    3)如果在action获取表单通过post方式提交中文,中文乱码问题帮我们解决了,不需要自己处理问题

     

     

    6、分模块开发

    在实际开发中,我们通常很多人都需要修改同一个配置文件就是struts.xml。因为这个文件是 Stmts2的核心配置文件。而且这个文件一旦改错了一点,那么会导致整个项目都会出现问题,所以 Struts2提供了<include>标签解决这个问题。Stmts2允许将一个配置文件分解成多个配置文件,从而提高配置文件的可读性。Struts2默认只加载src下的struts.xml文件,但一旦通过多个xml文件来配置 Action,就必须通过struts.xml文件来包含其他配置文件。

    解决方式:

    1. 单独写配置文件,把配置文件引入到核心配置文件中

     

     

    <!--不指定路径默认在src下时的方式-->

    include file=nstruts-shop.xml/>

    <include file="nstruts-user.xml"/>

    <include file="nstruts-shoppingcart.xml"/>

    <!-- 配置文件在具体包中时的方式 -->

    <include file="com/test/action/struts-product.xml">

    </struts>

     

     

     

     

    7Action编写方式

    1. action 编写有三种方式

    第一种,创建普通类,这个不继承任何类,不实现任何接口

     

    第二种:创建类,实现接口action

     

    Action接口位于xwork2包中。这个接口里只定义了 一个execute()方法,该接口的规范规定了 Action处理类应该包含一个execute()方法,该方法返回一 个字符串。除此之外,该接口还定义了 5个字符串常量,它们的作用是统一 execute方法的返回值。接口中提供了 5个己经定义的常量如下

     

    success,代表成功

    none,代表页面不跳转

    error,代表跳转到错误页面

    input,数据校验的时候跳转的路径

    login,用来跳转到登录页面

     

    第三种:创建类,继承类ActionSupport(一般使用)

     

     

     

     

     

    ActionSupport类本身实现了Action接口,是Struts2中默认的Action接口的实现类,所以继承ActionSupport 就相当于实现Action 接口。ActionSupport 类还实现了ValidateableValidationAwareTextProviderLocaleProviderSerializable等接口,来为用户提供更多的功能。ActionSupport类中提供了许多默认方法,这些默认方法包括获取国际化信息的方法、数据校验的方法、默认的处理用户请求的方法等。实际上,ActionSupport类是Struts2默认的Action处理类, 如果让开发者的Action类继承该ActionSupport类,则会大大简化Action的开发。

     

     

     

     

    8、访问action的方法

    1. 有三种方式实现

    第一种:使用action标签的method属性,在这个属性里面写执行的action的方法

    第二种:使用通配符方式实现

    第三种:动态访问实现(一般不用)

    2. 错误演示

    (1)如果action方法有返回值,在配置文件中没有配置,出现错误

     

     

    (2)action里面的方法有返回值,如果有返回值时候,返回值类型必须是String

    (3)Action里面的方法可以没有返回值,没有返回值的时候,在result标签中不需要配置

       --把方法写成void

       --让返回值,返回“none

     

     

     

     

    * 使用action标签method属性

    其实我们学过在〈action〉的标签中有一个属性method,通过method的配置来指定Action中的某个方法执行

    1.action方法中编写几个方法

     

    3. 使用method进行配置

     

    但是这种方式我们会发现,同一个Action类就被配置了很多次,只是修改了后面的method的值。那么能不能配置简单化呢?也就是一个Action类,只配置一次就好了?这个时候我们就需要使 用通配符的配置方式了

     

    * 使用通配符实现(重点掌握)

    1. action标签里面name属性,name属性值里面写符号 * 星号

    (1)*号理解:

           比如访问hello*可以匹配到

           比如访问add *可以匹配到

    name属性值里面写符号*

    1)执行action里面的add方法,访问book_add,使用book_*可以匹配到,*相当于变成add

     

    2)执行action里面的update方法,访问book_update,使用book_*可以匹配到,*相当于变成update

    上面两个路径使用book_* 可以匹配到

    method属性写*


     

    图解:

     

     

     

     

     

     

     

  • 相关阅读:
    [HNOI2008]玩具装箱toy(dp+斜率优化)
    hdu 4597 Play Game(记忆化搜索)
    下载文件,ie文件名称乱码问题
    HDU 2138 How many prime numbers
    Codeforces Round #277 (Div. 2)---A. Calculating Function (规律)
    MapReduce-MulitipleOutputs实现自己定义输出到多个文件夹
    EFM8单片机与I2C外设通信
    linux杂谈(十一):LDAPserver的搭建
    Redis命令学习-string类型操作
    Java 实现单链表反序
  • 原文地址:https://www.cnblogs.com/leo1014/p/9929563.html
Copyright © 2011-2022 走看看