Struts2的配置流程

Struts2的配置流程

image

  1. 从一个请求开始,首先进入web.xml被核心控制器拦截。必须配置核心控制器,拦截所有请求
  2. 核心控制器拦截请求以后,会读取struts.xml配置文件
  3. 根据struts.xml配置的请求路径和执行方法的关系去调用业务控制器的方法。
  4. Action的方法执行后,返回视图映射为字符串,回到核心控制器
  5. 核心控制器根据struts.xml的视图映射字符串和视图的路径,跳转回视图

目的:通过该流程发现,使用Strut2框架,一个核心控制器就处理所有请求。实现了一个请求对应一个方法!!!!!!!

  • 核心控制器:就是一个拦截所有请求的过滤器,意味着所有的请求都要经过Struts2框架。

  • 业务控制器:就是一个处理逻辑代码的普通类。就是处理代码的跳转和数据的返回

  • Struts配置文件:作用就是配置struts2框架的信息,主要请求跳转的配置,返回视图的配置。

配置步骤

  1. 创建一个index.jsp页面用于写测试的请求
  2. 导入包
    • 导入struts-2.3.32\apps\struts2-blank\WEB-INF\lib包中的所有包
  3. 在web.xml配置核心控制器拦截所有的请求
  4. 创建一个Action,业务控制器。
  5. 创建一个struts.xml配置文件,默认放在classpath跟目录,配置请求路径和执行方法的关系
    • 可以在Preferences中的XML的XML Catalog中添加dtd
    • 需要一个dtd**约束**
    • 可以使用struts2-core-2.3.32.jar中自带的dtdstruts-2.3.dtd约束
  6. 确认请求和方法的跳转成功后,配置返回的映射字符串和视图(页面)路径的关系
    创建一个返回视图

web.xml中的配置

添加filter配置

<!-- 配置一个核心控制器拦截所有的请求 -->
<!-- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter -->
<filter>
 <filter-name>strutsPrepareAndExecuteFilter</filter-name>
 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 拦截的请求 -->
<filter-mapping>
<filter-name>strutsPrepareAndExecuteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

struts.xml配置

  • package标签:作用,主要用于分模块

    • name:使用一个唯一标识符,值只要符合标识符规则就可以。
    • extends:继承其他包的声明的功能,struts-default是struts2框架内置实现的功能的组件的配置。如果不继承将导致所有struts的功能组件不能使用
  • action标签,作用用于指定请求路径和执行方法的关系

    • name:用于指定请求路径
    • class:指定访问的Action类名
    • method:指定Action的执行方法
  • result元素:结果配置

    • name属性:标识结果处理的名称,与action方法的返回值对应
    • type属性:指定调用哪一个result类来处理结果,默认使用转发
    • 标签体:填写页面的相对路径
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "struts-2.3.dtd" >
<struts>
    <!-- 
    package标签:作用,主要用于分模块
    name:使用一个唯一标识符,值只要符合标识符规则就可以。
    extends:继承其他包的声明的功能,struts-default是struts2框架内置实现的功能的组件的配置。如果不继承将导致所有struts的功能组件不能使用
    -->
    <package name="default"  extends="struts-default">
    <!-- 
    action标签,作用用于指定请求路径和执行方法的关系
      name:用于指定请求路径
      class:指定访问的Action类名
      method:指定Action的执行方法
     -->
    <action name="hello" class="com.itheima.action.HelloWorldAction" method="hello">

       <!-- 必须指定返回的映射字符串与视图的关系 -->
       <!-- 
            result元素:结果配置
            name属性:标识结果处理的名称,与action方法的返回值对应
            type属性:指定调用哪一个result类来处理结果,默认使用转发
            标签体:填写页面的相对路径
        -->
       <!-- /表示网站根目录 -->
       <result name="success">/hello.jsp</result>

    </action>
    </package>
</struts>

创建一个Action类

package com.action;

public class HelloAction {

    public String hello(){
        System.out.println("hello");
        return "success";
    }

}

返回的View

Hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>HELLO WORLD!!</h1>
</body>
</html>

测试

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <!-- 测试请求 -->
  <a href="${pageContext.request.contextPath }/hello">say</a>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/kato_op/article/details/80247846