struts2框架(一)——概述及简单案例入门

第一讲

01 model1->model2->mvc>框架的演进

  • 我之前详细写过这个话题,参见 mvc深入理解
  • 框架之所以出现,就是因为model2开发模型存在的缺陷,举个最简单的案例,每次表单传递过来的参数都是字符串类型,而且在controller中每次都要进行类型转换,是灰常麻烦的,重复的代码很多。回顾我们学习编程的路径:基础语法->方法->类->jar包->框架。最开始对简单的语法进行封装形成方法,方便我们重用。而面向对象的编程继承、封装、多态,也会大大提高代码重用性,也是为了优化这一过程。而对类的封装又形成了jar包,对一组jar包的封装便形成了框架。
  • 框架就是模板,模型,如简历模板,框架由两部分组成,可变的部分不可变的部分,如下图
    在这里插入图片描述
    橙黄色(Servlet Filters):struts2的过滤器。
    蓝色(Struts core):表示struts2核心部分的知识。
    绿色(Interceptors):表示拦截器。
    黄色(User Created):用于说明这部分是开发人员自己定义的部分。即是所为的开发代码。
    struts2是一个框架,位于 web层(web框架), 接管了controller ,dao层也有很多不爽的地方,所以用hibernate来代替。框架将程序员以前重复性的工作,流程化,自动化,这样就可以大大的提高开发的速度,即一些重复性的代码和工作,由框架帮助我们完成 。框架不变的部分是指事先已经给程序员规划好组件(action,拦截器,配置文件),程序员必须遵守相应的规范。

02 什么是轻量级

  • 轻量级:如果一个框架没有侵入性,就称该框架是轻量级
  • 侵入性:如果使用一个框架,必须实现框架的接口或继承框架的类
  • struts是一个轻量级框架

第二讲

01 流程图(上图或者超链接)

  • 看图
  • 步骤(当请求到达Servlet容器的时候,这个容器可以是Jetty、可以是Tomcat)
  1. 首先要经过struts的核心过滤器StrutsPreparedAndExecuteFilter(action和jsp都会过滤
  2. 然后核心控制器依次查找ActionMapper来决定这个请求是否调用action,如果actionMapper决定调用action,StrutsPreparedAndExecuteFilter就把请求的处理控制权委托给ActionProxy。
  3. ActionProxy通过配置管理器查询Struts2的核心配置文件(struts.xml),找到要调用的Action类。
  4. 接下来,ActionProxy创建一个ActionInvocation实例,该实例负责命令模式的实现,包括激活action本身之前调用配置的任意拦截器(是指核心配置文件中配置的,extends继承的struts-default就默认配置着拦截器,在上一步已经进行了加载)。
  5. 在action执行完成之后,ActionInvocation实例负责根据action返回的结果码在struts.xml配置文件中查找到要输出的结果(Result)。该结果通常是JSP或者FreeMarker模板,也可能是action,输出的时候,模板也可以使用框架提供的struts2标签,(此时的JSP页面已经被服务器解释,页面内容不可能再被添加,被解释之后之后内容是Http响应的一部分)。
  6. 然后为action配置的拦截器将再次执行(做最后的收尾工作
  7. 最后,服务器响应将通过web.xml文件中配置的Struts框架核心控制器返回

02 开发流程-HelloWorld案例

  1. 先在eclipse中创建一个动态的web项目(或者是maven项目)
  2. 导入jar包(maven在pom.xml文件中写明struts的jar包坐标)
  3. 编写web.xml文件—配置struts的核心控制器
  <!--这种写法过滤所有请求-->
  <filter>
        <filter-name>struts2</filter-name>
        <filterclass>org.apache.struts2.dispatcher.ng.filter.
                              StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  <!--这种写法过action、jsp请求-->
  <filter>
        <filter-name>struts2</filter-name>
        <filterclass>org.apache.struts2.dispatcher.ng.filter.
                              StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
       <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
  1. 编写业务处理类
package com.tn.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport{
	
	@Override
	public String execute() throws Exception {
		System.out.println("hello,体测~~");
		return SUCCESS;
	}
}
  1. 配置核心配置文件struts.xml
<?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>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <!-- package:表示我们可以进行分包管理
    	 name:包的名字 默认 default
    	 namespace:报的命名空间,默认/
     -->
    <package name="default" namespace="/" extends="struts-default">
		<action name="hello" class="com.tn.action.HelloAction">
			<result>/success.jsp</result>
		</action>
    </package>
</struts>
  1. 编写success.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="uft-8">
<title>成功页面</title>
</head>
<body>
<h1>hello,world!</h1>
</body>
</html>

运行结果:
在这里插入图片描述
在这里插入图片描述
注意:这两种访问方式可不一样,第一种访问方式走的是struts上述1-7步的正规流程。而第二种访问方式虽然也被过滤了一波,但仅仅是被过滤而已,如果里面有struts标签,在struts框架先解释,解释完了tomcat再解释jsp,最后给浏览器,走的是01中注意那条线。这就没用到struts框架,所以老师在上课还专门强调了这个问题

03 struts核心配置文件

  • package:分模块管理,作用和java中的包类似
    • name:自定义但不能重复
    • namespace:命名空间,和url请求路径直接相关
    • extends:必须直接或间接继承struts-default
  • action:url和处理类的方法进行映射
    • name:为请求名,不加后缀
    • class:处理类的完全限定名称,如果不配置,由默认类来处理
    • method:处理请求的方法,默认为execute
  • result
    • name 结果集名称,和处理方法的返回值匹配,默认为success,可以自定义
    • type 指定响应结果类型
      • dispatcher 转发 默认
      • redirect 重定向
      • redirectAction 重定向到Action
  • 三者区别请参见 本链接
发布了84 篇原创文章 · 获赞 90 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42512488/article/details/90240877