struts2学习笔记 -- day02 struts2主配置文件详解

xiaoxiao2021-02-28  67

一、入门案例

1、编写Action动作类

package cn.itcast.web.action; /** * 用于处理请求的类 * * 在struts2中把用于处理请求类都称之为:动作类 * */ public class HelloAction { /** * 用于处理请求的方法 * * 把动作类中用于处理请求的方法都叫做:动作方法 * * 动作方法有编写规范: * 访问修饰符都是public * 返回值必须是String类型的 * 方法不能有参数 * @return */ public String sayHello(){ System.out.println(this); System.out.println("HelloAction中的sayHello方法执行了。。。。"); return "success"; } }

2、配置struts.xml配置文件

<package name="p1" extends="struts-default"> <action name="hello" class="cn.itcast.web.action.HelloAction" method="sayHello"> <result name="success" type="dispatcher">/success.jsp</result> </action> </package>

3、编写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>struts2的入门案例</title> </head> <body> <%--struts2框架它默认会拦截以.action为后缀的请求,或者是没有任何后缀的请求 --%> <a href="${pageContext.request.contextPath}/hello.action">访问struts2的入门案例.action</a> <hr/> <a href="${pageContext.request.contextPath}/hello">访问struts2的入门案例</a> </body> </html>

二、struts2的执行流程

三、struts2中的配置文件

1、struts2的 6 个配置文件

default.properties、struts-default.xml、struts-plugin.xml、struts.xml、struts.properties、web.xml

加载时机是:在项目启动时就开始加载。

加载顺序:按照上述顺序加载。

注意:遇到相同的配置信息时,后加载的会覆盖先加载的

2、default.properties配置文件

注意:default.properties中的内容坚决不允许改动

(1)、位置:

3、struts-default.xml

注意:该配置文件内容不能修改

位置:

4、struts-plugin.xml

位置:插件包jar包中,没有导插件包时不存在

5、struts.xml 和 struts.properties

位置都在应用中,用于配置我们自定义的参数,推荐使用struts.xml进行配置

6、web.xml

作用:给过滤器配置参数

四、struts.xml中标签详解

1、constant标签

(1)、作用

        配置struts2的常量

        键值对形式,key、value

<!-- 开启开发者模式 --> <constant name="struts.devMode" value="true"></constant>

(2)、常用的常量

2、package标签

<!-- package标签详解: 作用:建立一个包,把我们的动作配置按照面向对象的思想来管理。 属性: name:指定包的名称。必须写,必须唯一。 extends:指定当前包的父包。子包自动具备父包的配置。我们的包一般都需要继承struts-default包。 该包中配置着struts2的核心,如果不继承该包,则不能使用struts2的核心。 struts-default包在struts-default.xml配置文件中定义着。 abstract:把当前包声明为抽象包。抽象包就是用来被继承的。里面定义的公共配置。 只有没有action标签的包,才能声明为抽象包。 namespace:指定当前包的名称空间。当包上指定了名称空间之后,访问URL就变成了: url = 名称空间+action标签的name取值 它的作用就是把访问URL按照模块化来管理。 名称空间的写法: 必须以/开头 后面的第一个字符必须是字母。 例如: /n /n1 /namespace1 访问URL就变成了: /n1/hello 体现模块化管理URL的例子: 名称空间是:/user 访问URL: /user/addUser.action /user/updateUser.action..... 当我们不指定名称空间时,它有默认值: 默认值是:"" --> <package name="myDefualt" extends="struts-default" abstract="true"> <!-- 此处定义的就是当前项目中的公共配置 --> </package> <package name="p1" extends="myDefualt" namespace="/n1"> <action name="hello" class="cn.itcast.web.action.HelloAction" method="sayHello"> <result name="success" type="dispatcher">/success.jsp</result> </action> </package>

3、action标签

<package name="p1" extends="struts-default"> <!-- action标签详解: 作用:建立动作名称,动作类和动作方法的对应关系。 属性: name:指定动作名称。它不能重复 class:指定动作类的全限定类名。 method:指定动作方法名称。 创建动作类的三种方式: 第一种方式:无侵入式的创建 实际开发中不常用 例子:HelloAction。 它的特点就是:没有任何struts2的代码体现。 第二种方式:实现Action接口的方式 实际开发中用的也不多 例子:Hello2Action 它的特点就是:Action接口中定义了一些常量,还是没有一些核心内容定义。 默认动作方法: execute方法。当我们执行此方法时,可以不指定method属性 第三种方式:继承ActionSupport 实际开发中采用的方式 例子:Hello3Action 默认动作类: ActionSuppor是默认动作类 --> <action name="hello" class="cn.itcast.web.action.HelloAction" method="sayHello"> <result name="success" type="dispatcher">/success.jsp</result> </action> </package> <!-- 使用通配符来配置 --> <package name="user" extends="struts-default"> <action name="*" class="cn.itcast.web.action.UserAction" method="{1}"> <result name="success" type="dispatcher">/success.jsp</result> </action> </package> <!-- 升级通配符 --> <package name="user" extends="struts-default"> <action name="*_*" class="cn.itcast.web.action.{2}Action" method="{1}{2}"> <result name="success" type="dispatcher">/success.jsp</result> </action> </package>

动态方法调用

struts.xml中:

<!-- 开启动态方法调用 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <package name="user" extends="struts-default"> <action name="user" class="com.itheima.web.action.UserAction" > <result name="success">/success.jsp</result> </action> </package>

jsp页面中:

<a href="${pageContext.request.contextPath}/user!addUser.action">添加用户</a> <a href="${pageContext.request.contextPath}/user!updateUser.action">修改用户</a> <a href="${pageContext.request.contextPath}/user!deleteUser.action">删除用户</a> <a href="${pageContext.request.contextPath}/user!findUser.action">查询用户</a>

4、result标签

作用:配置结果视图的地址

<action name="demo1" class="cn.itcast.web.action.Demo1Action" method="demo1"> <!-- result标签: 作用:配置结果视图的地址。 属性: name:用于和动作方法的返回值比较,当一致时前往指定的位置。 type:用何种方式前往(请求转发,重定向) 常用的取值: dispatcher:请求转发到一个指定jsp页面(默认值) redirect:重定向到一个指定的jsp页面或者是一个action redirectAction:重定向到一个指定的action --> <result name="login">/success.jsp</result> <result name="error" type="redirect">/error.jsp</result> <result name="findAll" type="redirect">findAllCust</result> <result name="findAll" type="redirectAction">findAllCust</result> </action>

五、创建动作类的三种方式

1、无侵入式

特点:没有任何struts2代码的体现,实际开发中不常用

public class HelloAction { public String sayHello(){ System.out.println(this); System.out.println("HelloAction中的sayHello方法执行了。。。。"); return "success"; } }

2、实现Action接口

特点:Action接口中定义了一些常量,还是没有一些核心内容定义。

默认的动作方法:execute方法。当我们执行此方法时,可以不指定method属性

import com.opensymphony.xwork2.Action; public class Hello2Action implements Action { @Override public String execute() throws Exception { System.out.println("Hello2Action的execute方法执行了"); return ERROR; } }

3、继承ActionSupport方式

import com.opensymphony.xwork2.ActionSupport; public class Hello3Action extends ActionSupport { }

转载请注明原文地址: https://www.6miu.com/read-20631.html

最新回复(0)