zoukankan      html  css  js  c++  java
  • Struts2(一)——基本使用

    Struts2 简介

    首先明确,Struts2 是一个基于 MVC 设计模式的 WEB 层框架。它本质上相当于一个servlet,在 MVC 设计模式中,Struts2 作为控制器(Controller)来建立模型与视图的数据交互。

    Struts2是 Struts1 的下一代产品。是在 struts1 和 WebWork 的技术基础上进行了合并的以 WebWork 为核心全新的框架。采用拦截器的机制来处理用户的请求。

    常见 WEB 层框架:Struts2, Struts1, Webwork, SpringMVC。WEB 层框架的特点是基于前端控制器模型来设计。

    快速入门

    下载strusts框架

    https://struts.apache.org/

    目录结构

    • apps: Struts2提供的应用,里面就是一个最简单的一个项目
    • docs: Struts2的开发文档和API
    • lib: Strtus2框架的开发的jar包
    • src: Struts2的源码

    创建一个web工程

    点击 file -> new -> project,找到 Java Enterprise,一般就在 Java 的下一个,选择 Web Application,其他的全部默认,点击 next

    引入jar包

    所需 jar 包全部在 lib 目录下,准备工作做完,下面开始写代码

    执行流程

    配置前端控制器

    我们说,Struts2 是 WEB 层框架,而 WEB 层框架都是基于前端控制器来实现的。好,那我们先来配置一下前端控制器

    我们知道,一个 WEB 工程,最先加载的是 web.xml,我们就在这里面配置,将下面这段代码添加进去

        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
    
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

    这段代码的意思就是,我们配置了一个 strust2 类型的过滤器叫 struts2,过滤所有请求,也就是 <url-pattern>/*</url-pattern>

    配置 strust.xml

    我们刚配置好了一个 strust2 类型的过滤器,那现在来配置一下strust2

    在src当中创建一个配置文件 strust.xml,将下面这段代码添加进去

    <?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.mju.cn.HelloAction">
                <result name="success">./my.jsp</result>
            </action>
        </package>
    </struts>
    

    这段代码的意思就是,我们配置了一个 action 叫 hello 指向 com.mju.cn.HelloAction 类,如果访问 hello.action 的话,这个类就响应,结果是 success 的话,就跳转到 my.jsp

    创建 action 类

    在源码目录下,创建一个类,复制下面代码:

    package com.mju.cn;
    
    public class HelloAction {
        public String execute(){
            System.out.println("接受到一个请求");
            return "success";;
        }
    }
    

    execute 方法是固定写法,类相应就默认执行这个方法,return 是返回信息,回到 action 里面,看看 result 里面有没有一个叫 success 的

    创建 jsp

    刚才还有一个 my.jsp 没创建是吧,在 web 目录下新建:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>I'm here~</h1>
    </body>
    </html>
    

    配置网页入口,在 index.jsp 里写一个链接,指向 hello.action

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
        <a href="hello.action">Hello Struts</a>
      </body>
    </html>
    

    运行项目

    执行流程:

    注:配置文件可以在 blank 项目的 classes 目录下找到

    相关配置

    配置文件加载顺序

    • default.properties
    • struts-default.xml
    • struts-plugin.xml
    • struts.xml
    • struts.properties
    • web.xml

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

    Package 和 action

    Package

    包,这个包与Java中的包的概念不一致。包为了更好管理action的配置。属性:

    • name 包的名称,只有在一个项目中不重名即可。
    • extends 继承哪个包,通常值为struts-default。默认我们继承的是Struts-default。在这个包当中,定义了很多结果类型和很多的拦截器,继承了这些东西之后,action才有了这些功能。
    • namespace namespace+name共同决定了访问路径。名称空间有三种写法,带名称的名称空间 namespace=”/aaa” 根名称空间 namespance=”/” 默认名称空间 namespace=” ”
    • abstract 抽象的,用于其他包的继承,现在这个包想被别人继承,设置abstract值为true,设置成abstract后就不能用自己运行了

    action

    配置Action类。属性:

    • name 与namespace共同决定访问路径
    • class Action类的全路径
    • method 执行Action中的哪个方法的方法名,默认值execute
    • converter 用来自定义类型转换器,一般不设置,内部提供的转换器已经够用

    常量配置

    在Struts2的框架中,提供了非常多的常量

    在default.properties struts.i18n.encoding=UTF-8 Struts2中所有的post请求的中文乱码不用处理。

    struts.action.extension=action,, Struts2请求的默认的扩展名。默认扩展名是.action或者什么都不写。

    在Struts2中修改一些常量的值

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

    • struts.xml中进行修改,通过标签
    • struts.properties中进行修改,自己新建的,只能修改常量,基本不使用
    • web.xml中进行修改,通过过滤器的初始化参数来修改常量

    后面的会覆盖前面的内容

    include

    在一个配置文件当中引入其它的配置文件,以后做团队开发时,很多人都需要去修改配置文件,防止被改乱,可以单独的创建一个配置文件,在主配置文件当中引入创建的配置文件

    Action类的三种写法

    Action类是POJO的类

    自己手动实现execute方法

    Action类实现一个Action的接口

    实现接口时,会让你覆盖execute方法
    在此接口当中定义了5个常量(逻辑视图)

    • String SUCCESS = "success"; 成功
    • String NONE = "none"; 没有跳转
    • String ERROR = "error"; 失败
    • String INPUT = "input"; 表单校验时出错
    • String LOGIN = "login"; 登录出错页面跳转

    Action类继承ActionSupport类

    推荐使用此方式。Actionsupport当中提供了很多功能,数据校验,国际化等一系列操作方法

    资源包

    我们通常在根目录下新建一个 resource 文件夹,标记为资源包,将所有配置文件放在这



  • 相关阅读:
    python--DenyHttp项目(1)--调用cmd控制台命令os.system()
    python--DenyHttp项目(1)--GUI:tkinter☞ module 'tkinter' has no attribute 'messagebox'
    python--DenyHttp项目(1)--socket编程:服务器端进阶版socketServer
    python--DenyHttp项目(1)--socket编程:客户端与服务器端
    平台后台编辑功能实现
    java中的map
    java 重写(override)与 重载(overload)
    java继承 extends
    java泛型
    java中Map和List的使用
  • 原文地址:https://www.cnblogs.com/mdz3201/p/struts2_01.html
Copyright © 2011-2022 走看看