JavaWeb学习:Struts2入门

一、Struts2概述

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

二、搭建Struts2开发环境

  ①、下载Struts2

    官网struts.apache.org 

       

   ②、解压Struts2开发包

         

    apps:Struts2提供的应用,war文件:web项目打成war包。直接放入到tomcat可以允许。

    docs:Struts2的开发文档和API

    lib:Strtus2框架的开发的jar包

    src :Struts2的源码

  ③、引入jar包

    打开解压后的struts-2.5.xx\apps,有两个(struts2-showcase.war、struts2-rest-showcase.war--建议解压)war包,修改后缀war变更为zip,使用解压软件解压后找到WEB-INF\lib找到所需jar文件,将jar包copy到eclipse项目中的WebContent/WEB-INF/lib/文件目录下,拷贝完后别忘了把jar添加到Build Path中

       

     

   ④、将必备的web.xml、struts.xml两个配置文件拷贝出来

    还是以struts2-rest-showcase.war文件为参考, 在WEB-INF下web.xml copy到项目的WebContent/WEB-INF下

      

    修改web.xml

      struts2.5过滤器类全名称 :org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

      struts2.3过滤器类全名称 :org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_9" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Struts 2 Application</display-name>
    <!-- 配置Struts2的核心过滤器 -->
    <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>
    
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

</web-app>

    在WEB-INF/classes下struts.xml copy到 Java Resources/src/,拷贝之后Libraries

      

    修改strut.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随意,extends自struts-default -->
    <package name="strutsTest" extends="struts-default">
        <!-- 编写action,name为地址栏输入字符串,class为class文件的位置 -->
        <action name="hello" class="com.struts2.demo.HelloAction">
            <!-- name为刚才编写的HelloAction类中execute的返回值,execute返回值为success跳转到success.jsp页面 -->
            <result name="success">success.jsp</result>
        </action>
    </package>
</struts>

  ⑤、新建一个Action类

public class HelloAction {
    
    public String execute() throws Exception {
    System.out.println("进入HelloAction的execute方法... ...");
    return "success";
    }
}

  ⑥、新建一个index.jsp文件,验证是否跳转

    

    index.jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>Hello Strut2</h1>
    <h3><a href="${ pageContext.request.contextPath}/hello.action">执行execute方法</a></h3>
</body>
</html>

    success.jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>跳转到execute方法的返回值在struts.xml中配置指定画面... ...</h3>
</body>
</html>

  ⑦、启动服务器

     

      结果:

          

      点击执行execute方法连接,会执行HelloAction的execute方法,并通过返回值跳转画面

        

 

 

 三、Struts2执行流程

  当用户访问某个Action的时,先经过核心过滤器(在web.xml中配置),在核心过滤器(struts.xml配置要执行struts-default.xml中的配置的拦截器)中执行一组拦截器(struts-default.xml配置拦截器),通过struts.xml配置确定执行目标Action并根据Action的返回值进行页面跳转。

 四、Strut2配置文件加载顺序

  ①、每次访问Action会经过核心过滤器,核心过滤器是在什么时候被创建的呢?

    在StrutsPrepareAndExecuteFilter的init方法中添加断点,Debug启动Tomcat服务,可以看到程序会执行到添加的断点,所以过滤器是服务器启动时创建的。

     

    

  ②、加载顺序

 

 

    定位到dispatcher = init.initDispatcher(config);代码,查看initDispatcher(config)方法中init方法

      

 

 

        • init_DefaultProperties()                                     ----加载default.properties
        • init_TraditionalXmlConfigurations();                  ----加载struts-default.xml、struts-plugin.xml、struts.xml
        • init_LegacyStrutsProperties();                           ----加载struts.properties
        • init_CustomConfigurationProviders();        ----加载配置提供类
        • init_FilterInitParameters() ;                                 ----加载web.xml中过滤器初始化参数
        • init_AliasStandardObjects() ;                              ----加载Bean对象

      配置文件的加载顺序

        • default.properties
        • struts-default.xml
        • struts-plugin.xml
        • struts.xml
        • struts.properties
        • web.xml
          • 注意:后配置的常量的值会覆盖先配置的常量的值。
posted @ 2020-11-19 17:41  一杯水M  阅读(299)  评论(0)    收藏  举报