Sturts2--入门

Sturts2概述

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

  优势:自动封装参数,参数校验,结果的处理(转发|重定向),国际化,显示等待页面,表单的防止重复提交。

  执行流程:用户请求访问,先经过核心过滤器,在过滤器里面执行一组拦截器(拦截器实现部分功能),再找struts.xml里面package表对应的action,执行controller层是业务,返回一个action,响应给客户

 

 

IDEA MAVEN项目搭建

    https://www.cnblogs.com/zhangyongheng/p/11647600.html

简单工程结构图

pom文件

 <groupId>com.ruikang</groupId>
  <artifactId>sturts2demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>sturts2demo Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency> <!--需要手动添加该依赖-->
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>2.5.18</version>
    </dependency>
  </dependencies>

 

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
    <a href="success.jsp">跳转</a></br>
    <a href="${ pageContext.request.contextPath }/success.jsp">跳转</a></br>
    <a href="/hello.action">helloAction跳转</a>
</body>
</html>

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h2>Success</h2>
</body>
</html>

struts.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>
    <!--Struts2为了管理action的配置-->
    <package name="demo01" extends="struts-default" namespace="/">
        <!--配置action:name-访问路径去掉action,class全路径-->
        <action name="hello" class="com.controller.HelloController" method="execute">
            <!--配置页面跳转-->
            <result>success.jsp</result>
        </action>
    </package>
    <package name="demo02" extends="struts-default">
        <action name="success">
            <result>success.jsp</result>
        </action>
    </package>
</struts>

web.xml

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <!--进行struts过滤器的配置(核心,也称前端控制器)-->
    <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>
</web-app>

controller层

package com.controller;

public class HelloController {

    public String execute(){
        System.out.println("Mycontroller--执行了");
        return "success";
    }
}

 

Sturts加载顺序

  1.default.properties

  2.sturts-default.xml

  3.struts-plugin.xml

  4.struts.xml

  5.sturts.properties

  6.web.xml    

    后配置的常量会覆盖前配置的常量

Sturts文件的标签

1.package

  可以有多个,很重要

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

  属性:

    name:包的名称,名字随意,不重复即可

    extends:继承哪个包,一般struts-default

    namespace:访问路径前缀,跟<action>中的name属性组成路径,    

          取值:"/" ; “” ; “/aaa”.

    abstract:用于其它包抽象,加了true属性其它包可以继承

1-1.action

  <action name="hello" class="com.controller.HelloController" method="execute">

  配置Action的类

  属性:

    name:与namespace共同觉得访问路径

    calss:Action类全路径

    method:对应的方法,默认execute

    converter:用于设置类型转换器,

1-1-1.result

  用于接受Action类的结果

  属性:

    name:对应Action方法返回的值

    value:响应的路径

2.Struts2常量两配置--constant标签

  位置:org.apache.Struts2.config.default.perproties

  struts.i18n.encoding=UTF-8      post请求乱码处理

  struts.action.extension=action,,   请求默认的扩展名,后缀是action/空,开发习惯的会加上.action

  修改常量有三个位置:

    struts.xml: <constant name="struts.action.extension" value="do,,"/>

      web.xml:

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
        <!--web配置初始化参数-->
        <init-param>
            <param-name>struts.action.extension</param-name>
            <param-value>do</param-value>
        </init-param>
    </filter>

    sturts.properties: key,value进行配置-----struts.i18n.encoding=UTF-8

 

3.Struts2分模块开发--include标签

  <!--模块开发时引入其它模块-->

  <include file="struts/struts_user.xml"/>

 

实现Action接口

/**
 * 实现Action接口这种方式:提供了五个常量(五个逻辑视图的名称)
 * SUCDESS 成功
 * REEOR   失败
 * LOGIN   登录失败跳转的页面
 * INPUT   表单校验的时候出错
 * NONE    不跳转
 */
public class UserController implements Action {

    public String getUser(){
        System.out.println("UserController---getUser---执行了");
        return "success";
    }

    @Override
    public String execute() throws Exception {
        System.out.println("UserController---execute---执行了");
        return "bbb";
    }

}

 

继承ActionSupport类

/**
 * ActionSupport实现了Action接口
 * ActionSupport类强大的功能
 */
public class Demo02Controller extends ActionSupport {

    @Override
    public String execute() throws Exception {
        System.out.println("DemoController---execute---执行了");
        return NONE;
    }

}

 

Action的访问方式

1.method

2.通配符

主页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
    <a href="user_find.action">查询用户</a>
    <a href="user_save.action">保存用户</a>
    <a href="user_delete.action">删除用户</a>
    <a href="user_update.action">修改用户</a>
</body>
</html>

struts_user.xml配置文件

struts2 2.4之后需要加入<allowed-methods>方法1,方法2...</allowed-methods>

<?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="demo04" extends="struts-default" namespace="/">
<!--通配符配置的方式-->
<action name="user_*" class="com.controller.UserAction" method="{1}">
<allowed-methods>delete,update,save,find</allowed-methods>
</action>
</package>
</struts>

UserAction

package com.controller;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

    public String find(){
        System.out.println("查用用户");
        return  NONE;
    }
    public String save(){
        System.out.println("保存用户");
        return  NONE;
    }
    public String update(){
        System.out.println("修改用户");
        return  NONE;
    }
    public String delete(){
        System.out.println("删除用户");
        return  NONE;
    }

}

 3.动态访问

主页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
    <H3>动态访问</H3>
    <a href="/product!find">查询用户</a></br>
    <a href="/product!save">保存用户</a></br>
    <a href="/product!delete">删除用户</a></br>
    <a href="/product!update">修改用户</a></br>
</body>
</html>

struts_product.xml配置文件

struts2 2.4之后需要加入<allowed-methods>方法1,方法2...</allowed-methods>

<?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>
    <!--开启动态访问action-->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
    <package name="demo05" extends="struts-default" namespace="/">
        <!--通过动态访问的方式-->
        <action name="product" class="com.controller.ProductAction">
            <allowed-methods>delete,update,save,find</allowed-methods>
        </action>
    </package>
</struts>

ProductAction.class

package com.controller;

import com.opensymphony.xwork2.ActionSupport;

public class ProductAction extends ActionSupport {
    public String find(){
        System.out.println("查找商品");
        return  NONE;
    }
    public String save(){
        System.out.println("保存商品");
        return  NONE;
    }

    public String delete(){
        System.out.println("删除商品");
        return  NONE;
    }

    public String update(){
        System.out.println("修改商品");
        return  NONE;
    }

}

 

posted @ 2020-03-10 20:46  Jason–json  阅读(245)  评论(0编辑  收藏  举报