关于Struts2的学习总结第一天

一. 什么是Struts2?

       1.Struts2是一种基于MVC设计模式的WEB应用框架;

         2.他的本质相当于一个Servlet;

         3.Struts2作为控制器来建立模型与视图的数据交互;

         4.Struts2是以WebWork作为核心,采用拦截器的机制来处理用户的请求。

        总结:

         Struts2是一个基于MVC设计模式WEB的框架。

        1.1.1 Web层框架基于前端控制器模式

关于Struts2的学习总结第一天

1.1.2 Struts2Struts1的区别和联系

          Struts2内核已经发生变化,以webwork为核心。

二 Struts的入门

 2.1.1 下载Struts2的开发包

官网http://struts.apache.org/

2.1.2 解压Struts2

 关于Struts2的学习总结第一天

* apps:Struts2提供一些应用。

* docs:Struts2的开发文档

* lib:Struts2的开发jar

* src:Struts2的源码

2.1.3 创建web工程引入jar

D:\struts2\struts-2.3.24\apps\struts2-blank.war

WEB-INF/lib/*.jar

关于Struts2的学习总结第一天

2.1.4 创建页面

<%@ 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>Struts2的入门</h1>

<a href="${ pageContext.request.contextPath }/helloStruts.action">Struts2的入门的访问路径</a>

</body>

</html>






2.1.5 编写Action


public class HelloStrutsAction {

 

public String execute(){

System.out.println("Hello Struts2...");

return null;

}

}

2.1.6 配置Action (src根目录下,创建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>

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

 

<action name="helloStruts" class="com.itheima.struts2.demo1.HelloStrutsAction">

</action>

</package>

</struts>


2.1.7  配置前端控制器(核心过滤器)修改web.xml

  <!--配置Struts2的核心过滤器-->

  <filter>

  <filter-name>struts2</filter-name>

  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

  </filter>

  

  <filter-mapping>

  <filter-name>struts2</filter-name>

  <url-pattern>/*</url-pattern>

  </filter-mapping>




2.1.8  Struts2的执行流程

   

          页面发送请求,请求先到达前端控制器(核心过滤器StrutsPrepareAndExecuteFilter),过滤器中执行一组拦截器,这组拦截器完成了部分的功能代码。如果没有拦截器,就会执行目标Action。执行Action后返回一个逻辑视图名称。根据Result进行页面跳转。


          图解如下:

 


关于Struts2的学习总结第一天

3.1 Struts2的常见配置

3.1.1 struts.xml中配置

   核心配置文件,主要负责管理Action
   通常放在src目录下,在该目录下的struts.xml文件可以被自动加载

3.1.2. Package标签的配置

Package称为是包,为了管理Action的配置。
包可以“继承”已定义的包,并可以添加自己包的配置

包的作用:简化维护工作,提高重用性

* name:包的名称,属性为必需的且唯一,用于指定包的名称

* extends:属性指定要扩展的包,通常情况下继承struts-default

* namespace:(可选)名称空间,namespace通常和<action>标签中的name属性共同决定访问路径。

* namespace=””

* namespace=/

* namespace=/aaa

* abstract:抽象的,用于被其他的包继承。

3.1.3 Action的配置

<action>标签用来配置Action类。

* name:与namespace共同决定访问路径。

* classAction类的全路径。

* methodAction中执行的方法名。默认值是execute

3.1.4 配置文件的加载顺序

Struts2中的配置文件

配置文件的数量:

一共有6个配置文件。

6个配置文件执行时机:(这些配置文件是由过滤器加载的)

default.properties它都是key=value的形式。类似于开关。

struts-default.xml配置的都是struts2的核心。纯struts2核心。

struts-plugin.xml它是当我们使用了pluginjar时才有的配置文件。如果没用插件,就没有。

struts.xml       我们程序中的struts2核心配置。是针对当前项目的核心配置。推荐的

struts.propertiesstruts2不仅支持基于xml的配置还可以再使用.properties。但是我们不推使用

web.xml           配置的是struts2的一些开关性配置。靠过滤器的初始化参数配置

                              它最后加载,但加载的只是和struts2相关的配置。

会按照上面的顺序逐个加载,如果遇到相同的配置,后加载的覆盖先加载的。

      

       init_FileManager();

         init_DefaultProperties(); // [1]----加载default.properties

         init_TraditionalXmlConfigurations();// [2]----加载struts-default.xml,struts-plugin.xml,struts.xml

         init_LegacyStrutsProperties();// [3]----加载struts.properties

         init_CustomConfigurationProviders();// [5]----加载用户定义类

         init_FilterInitParameters() ;// [6]----加载web.xml里面过滤器配置参数

         init_AliasStandardObjects() ;// [7]----加载JavaBean

3.1.5 Struts的常量的配置

Struts2的框架中,定义了许多常量。常量定义在default.properties

struts.i18n.encoding=UTF-8  

struts.action.extension=action,,

改变Struts2的常量的值,需要怎么做?

Ø Struts.xml

constant元素(可选):配置常量,可以改变Struts 2框架的一些行为

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

注意:后加载的配置文件中的常量的值会将先加载的配置文件的常量的值覆盖。



4.1 Struts2Action的访问

4.1.1 Struts2中Action3种创建方式
1)普通的Java类
2)实现Action接口
3)继承ActionSupport类

1.1 Action是一个POJO的类

Action是一个普通的Java类。Action没有实现任何的接口,没有继承任何的类。

public class StrutsDemo1Action {

public String execute(){

System.out.println("Struts2Demo1....");

return null;

}

}

 

1.1.1.2 Action类实现一个Action接口

Action接口中提供了五个逻辑视图名称:

* SUCCESS:成功

* ERROR:错误

* INPUT:用于数据校验

* LOGIN:用于登录

* NONE:页面不跳转

 

public class StrutsDemo2Actionimplements Action{

 

@Override

public String execute()throws Exception {

System.out.println("StrutsDemo2....");

return NONE;

}

 

}

1.1.1.3 Action类继承一个ActionSupport

public class StrutsDemo3Action extends ActionSupport{

 

@Override

public String execute()throws Exception {

System.out.println("StrutsDemo3....");

return NONE;

}

}

 

ActionSupport类中有数据校验功能。Action继承了这个类,就可以有这些功能。

1.1.2 Struts2中Action方法的3种访问方式

1)动态方法访问


2)通过method属性配置


3)通过通配符的配置方式:

 

1.1.2.1 动态方法访问

作用:减少Action数量
       语法:actionName!methodName.action 
       使用:将属性struts.enable.DynamicMethodInvocation设置为true

<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

 

//Action处理类

public class UserAction implements Action {

   public String login() {      

   }

   public String register() {      

   }

}

 

//struts.xml文件

<action name="user" class="cn.itcast.action.UserAction">

</action>

 

 

 说明:

 编写form表单中action=user!register.action 

 则会调用UserAction类的register()方法

 

1.1.2.2 通过method属性配置

    优点:避免动态方法调用的安全隐患

    缺陷:导致大量的Action配置

public class UserAction implements Action {

   

   public String login() {

      

   }

   public String register() {

     

   }

}

//struts.xml文件

<action name="login" class="cn.itcast.action.UserAction" method="login">

</action>

<action name="register" class="cn.itcast.action.UserAction" method="register">

</action>

1.1.2.3 通过通配符的配置方式:

    另一种形式的动态方法调用

 

<action name= "*User"  class="cn.jbit.houserent.action.UserAction" method="{1}">

   <result name=success>/{1}_success.jsp</result>

   <result name="input">/{1}.jsp</result>

   <result name="error">/error.jsp</result>

</action>

 

说明:

编写form表单中action=loginUser.action

struts.xml中的代码相当于

method="login"

/login_success.jsp

/login.jsp