Struts2的配置流程
- 从一个请求开始,首先进入web.xml被核心控制器拦截。必须配置核心控制器,拦截所有请求
- 核心控制器拦截请求以后,会读取struts.xml配置文件
- 根据struts.xml配置的请求路径和执行方法的关系去调用业务控制器的方法。
- Action的方法执行后,返回视图映射为字符串,回到核心控制器
- 核心控制器根据struts.xml的视图映射字符串和视图的路径,跳转回视图
目的:通过该流程发现,使用Strut2框架,一个核心控制器就处理所有请求。实现了一个请求对应一个方法!!!!!!!
核心控制器:就是一个拦截所有请求的过滤器,意味着所有的请求都要经过Struts2框架。
业务控制器:就是一个处理逻辑代码的普通类。就是处理代码的跳转和数据的返回
Struts配置文件:作用就是配置struts2框架的信息,主要请求跳转的配置,返回视图的配置。
配置步骤
- 创建一个index.jsp页面用于写测试的请求
- 导入包
- 导入
struts-2.3.32\apps\struts2-blank\WEB-INF\lib
包中的所有包
- 导入
- 在web.xml配置核心控制器拦截所有的请求
- 创建一个Action,业务控制器。
- 创建一个struts.xml配置文件,默认放在classpath跟目录,配置请求路径和执行方法的关系
- 可以在Preferences中的XML的XML Catalog中添加dtd
- 需要一个dtd**约束**
- 可以使用
struts2-core-2.3.32.jar
中自带的dtdstruts-2.3.dtd
约束
- 确认请求和方法的跳转成功后,配置返回的映射字符串和视图(页面)路径的关系
创建一个返回视图
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>