Java学习记录之struts2(一)

news2024/10/7 2:23:43

1 struts入门

1.1 介绍

 框架:就是半成品,框架已经完成一些通用功能。只需要实现与业务有关功能。
 版本:struts-2.3.15.3-all
在这里插入图片描述

1.2 核心功能

在这里插入图片描述

1.3 目录结构

在这里插入图片描述

 apps / struts2-blank.war 最简答环境
 apps / struts2-showcase.war 常见案例
war 只要放在 tomcat/webapps/ 将自动解压,并可以访问

1.4 jar包介绍

在这里插入图片描述

2 练习

2.1 导入jar包

 jar位置:struts-2.3.15.3\apps\struts2-blank\WEB-INF\lib
在这里插入图片描述
在这里插入图片描述

2.2 编写实现类

在这里插入图片描述

public class UserAction {
	
	public String execute(){
		return "success";
	}
}

2.3 核心配置文件

 位置:src
 名称:struts.xml
 内容
约束:
在这里插入图片描述
在这里插入图片描述

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

	正文:
<struts>
	<package name="day01" namespace="/hello" extends="struts-default">
		<action name="userAction" class="cn.itcast.a_hello.UserAction">
			<result name="success">/a_hello/success.jsp</result>
		</action>
	</package>
</struts>

2.5 web.xml配置过滤器

 核心过滤器名称:StrutsPrepareAndExecuteFilter

<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>

3 基本配置

3.1 配置文件介绍

  1. default.properties :用于配置struts 常量。例如:编码
  2. struts-default.xml :struts提供的默认核心配置文件,struts大部分功能都在此配置文件中。
  3. struts-plugin.xml : struts插件核心配置文件,struts整合其他框架或工具。
  • 以上三个文件,用户自己不进行修改。
  1. struts.xml :用户自定义核心配置文件。
  2. struts.properties : 用于自定义struts常量配置文件。一般不使用。
  3. web.xml :也可以配置struts常量
    @@@注意:如果配置常量,所有的配置文件存在优先级,编号越大优先级越高。

 default.properties
位置:struts2-core-2.3.15.3.jar!/org/apache/struts2/default.properties
在这里插入图片描述

 struts-default.xml
struts2-core-2.3.15.3.jar!/struts-default.xml
在这里插入图片描述

 struts-plugin.xml
在这里插入图片描述

 struts.xml 可以配置所有内容,包括:常量
配置编码
 struts.properties , 不用
struts.i18n.encoding = GBK
 web.xml,也可以配置常量,也不用。

	<init-param>
		<param-name>struts.i18n.encoding</param-name>
		<param-value>GBK</param-value>
	</init-param>

3.2 常见struts常量

  1. 用于配置项目编码
    struts.i18n.encoding=UTF-8
  2. struts整合spring需要配置,默认注释掉了【】
    struts.objectFactory = spring
  3. struts默认使用文件上传解析工具:apache-commons-fileupload
    struts.multipart.parser=jakarta
    3.1 临时文件保存位置
    struts.multipart.saveDir=
    3.2 上传文件最大大小,默认值:2M,单位字节
    struts.multipart.maxSize
  4. 用于设置action请求路径扩展名。默认:action或空。多个值使用逗号分隔【】
    struts.action.extension=action,
    例如:/hello/userAction 或 /hello/userAction.action
  5. 确定是否使用动态方法调用。默认关闭的。
    struts.enable.DynamicMethodInvocation = false
  6. 设置开发模式,默认关闭。如果设置true:将提供更多提示信息,自动加载文件。【】
    struts.devMode = false
    6.1 自动重新加载国际化资源文件。
    struts.i18n.reload = true
    6.2 自动冲洗加载xml配置文件。例如:struts.xml。但不会自动加载action类。
    struts.configuration.xml.reload = true
  7. 设置struts标签主题,默认值:xhtml。取值:simple。【】
    struts.ui.theme=xhtml
    开发中常用simple。xhtml存在默认布局,开发中布局使用美工提供页面,布局自定义。

3.3 struts.xml 自动提示

 配置提示
在这里插入图片描述

 删除缓存
在这里插入图片描述

 提示完成
在这里插入图片描述

3.4 struts.xml详解

  1. 用于配置struts常量的
    name:struts提供固定常量名称。此名称从 default.properties文件获得
    value:常量值
    例如:
  2. struts用于管理所有action类
    name:给当前包进行唯一命名,必填项。用于其他包继承的。
    例如:struts-default.xml/
    将struts已经完成的功能,作为一个包存在。名称是固定值struts-default。
    namespace:action访问路径前缀。
    例如:“/”
    “/hello”
    “/a/b/c”
    “”
    extends:用于继承其他包的。
    例如: 当前action继承struts已经完成功能。
    abstract:是否抽象,如果设置为true,表示没有具体action实现功能。(了解)
    2.1 用于配置action类(请求处理类)
    name:action名称,用于在请求路径进行访问
    class:action类全限定类名
    method:用于确定action类中需要执行的方法,默认值:execute
    2.2 用于配置结果集
    name:用于确定action类中,方法的返回值
    text:标签体用于设置jsp路径
    type:结果集类型
    dispatcher:请求转发,从一个action到jsp页面,默认值。
    redirect:重定向到jsp页面
    redirectAction:重定向到另一个action
    stream:以流的方法发送浏览器,用于文件下载。
    chain:链,在一次请求中,从一个action到另一个action
    2.3 用于配置结果集类型的,一般不用,但需要看的懂。
    2.4 用于配置拦截器
    用于注册拦截器的
    拦截器栈,将已经注册的拦截器组合在一起,形成一个栈。
    例如: 声明一个拦截器栈,名称是:defaultStack
    2.5 用于确定当前默认拦截器的
    例如: 将“defaultStack”拦截器栈,声明默认拦截器栈
    2.6 如果访问的action不存在,默认执行的aciton。
    例如:/a/b/c/d/oneAction 此aciton没有配置,默认情况返回action找不到
    如果配置 如果存在404时,不显示action找不到,而是指定action
    2.7 用于配置 默认action实现类
    例如:
    如果编写配置文件时没有声明class属性,及 将执行ActionSupport类。
  3. 将多个struts配置文件组合成一个。
    struts.xml 入口配置文件,大家共用的。用于存放通用模块。


    提供子配置文件
    struts-user.xml
    struts-book.xml

3.5 action访问

3.5.1 动态方法调用

格式: action名称!方法名称.action
例如:bookAction!add.action

 入口:
2 . 动态方法调用–add

 struts.xml 配置

	<action name="bookAction" class="cn.itcast.b_demo.BookAction">
		<result name="success">/b_demo/success.jsp</result>
	</action>

 action类,提供两个方法
位置:/struts_day01/src/cn/itcast/b_demo/BookAction.java
public class BookAction {

public String execute(){
	System.out.println("bookAction execute()");
	return "success";
}

public String add(){
	System.out.println("bookAction add()");
	return "success";
}

}
 注意:默认情况动态方法调用关闭的,必须通过struts常量进行配置。

3.5.2 通配符

 , action.name可以使用通配符星号(),在action.class、aciton.method、result.name 处可以使用{n}方式匹配星号。
例如:
【案例1】:userAction_
将可以通过{1}方法获得第一个星号匹配到内容。
请求路径 /userAction_add , {1} 匹配的内容是add,将执行add方法
案例2:userAction__ {1} 匹配ID一个星;{2}匹配第二星
请求路径 /userAction_add_success
{1}匹配add方法,{2}匹配返回值的名称success
例如:3:__* 将采用多个分别描述不同的内容,一次{1}{2}{3}获得
请求路径 /UserAction_add_success

/pages/{3}.jsp

<!-- 案例3:通配符 -->
<action name="personAction_*" class="cn.itcast.c_demo.PersonAction" method="{1}">
		<result name="add">/c_demo/add.jsp</result>
		<result name="update">/c_demo/update.jsp</result>
</action>

3.5.3 action访问路径

 当默认访问一个action时,package.namespace = /a/b/c
优先从"/a/b/c"namespace获得相应的aciton,
如果没有获得,将从"/a/b"中获得
如果没有获得,将从"/a"中获得【】
如果没有获得,将从"/“中获得【】
如果没有获得,将从”"中获得

4 Action类

4.1 实现方式

  1. POJO,普通类。
  2. Action接口,实现接口
    在这里插入图片描述
   public static final String SUCCESS = "success";
    public static final String NONE = "none";
    public static final String ERROR = "error";
    public static final String INPUT = "input";
    public static final String LOGIN = "login";
    public String execute() throws Exception;
success : 表示成功了。
none:没有返回值。相当方法void。没有返回值表示没有result,常用与ajax操作。使用response发送数据。
error:服务器异常。
input:表示用户输入错误。
login:表示需要权限。
  1. ActionSupport类,继承类
    在这里插入图片描述

    已经默认提供很多功能。

4.2 方法

在这里插入图片描述

  1. 必须是public
  2. 建议又返回值,类型必须String
  3. 方法名称自定义
  4. 没有参数
  5. 需要throw Exception
  6. 非静态的
    注意:可以没有返回值,一般情况都有,可以使用return “none” 表示没有返回。
    public void add() throw Exception{
    }

4.3 Struts.xml中struts-default包中的默认配置

如果不手动配置Action 默认Action如下配置:

如果不配置结果的type属性,默认type属性如下配置:

5 访问Servlet api

5.1 完全解耦,但只能操作作用域【】

 不使用曾经学习过的servlet知识,可以去操作三个作用域
 ActionContext 工具类,action上下文对象
获得实例:ActionContext.getContext()
api:
ac.put(key,value) , 相当于操作request作用域。request.setAttribute(“key”,value)
ac.getSession().put(key,value) ,相当于操作session作用域。session.setAttribute(“key”,value)
ac.getApplication().put(key,value) ,相当于操作application作用域。servletContext.setAtt…
@Override
public String execute() throws Exception {
//1 request作用域
ActionContext.getContext().put(“ds”, “屌丝_request”);
//2 session作用域
ActionContext.getContext().getSession().put(“ds”, “屌丝_session”);
//3 application作用域
ActionContext.getContext().getApplication().put(“ds”, “屌丝——application”);

	return SUCCESS;
}

5.2 操作servlet对象【】

 ServletActionContext 工具类,获得需要servlet对象
 api:
在这里插入图片描述

//1 获得request对象
HttpServletRequest request = ServletActionContext.getRequest();
//2 获得response对象
HttpServletResponse response = ServletActionContext.getResponse();
//3获得servletContext对象
ServletContext servletContext = ServletActionContext.getServletContext();
//4 获得session
HttpSession session = request.getSession();

5.3 通过实现接口,struts注入

 需要实现指定的接口,此接口都提供setter,struts在执行action方法之前,将调用setter方法进行赋值。
ServletRequestAware 获得HttpServletRequest对象
ServletResponseAware 获得HttpServletResponse对象
ServletContextAware 获得ServletContext对象

public class Demo5Action3 extends ActionSupport implements ServletRequestAware , ServletResponseAware ,ServletContextAware{
	
	
	private HttpServletRequest request;
	private HttpServletResponse response;
	private ServletContext servletContext;
	private HttpSession session;
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.session = request.getSession();
		this.request = request;
	}
	@Override
	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
	}
	@Override
	public void setServletContext(ServletContext context) {
		this.servletContext = context;
	}

6 结果集类型 Result

	<action name="demo6Action" class="cn.itcast.f_demo.Demo6Action">
		<result type="redirect">/f_demo/type.jsp</result>
	</action>
	<!-- 案例 6.2 :结果集类型,重定向action -->
	<action name="demo6Action2" class="cn.itcast.f_demo.Demo6Action2">
		<result type="redirectAction">demo6Action3</result>
	</action>
	<action name="demo6Action3" class="cn.itcast.f_demo.Demo6Action3">
		<!-- 请求转发 ,默认值-->
		<result type="dispatcher">/f_demo/type.jsp</result>
	</action>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】MySQL 主从复制与读写分离

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 MySQL 主从复制与读写分离 MySQL 主从复制与读写分离1、什么是读写分离2、为什么要读写分离3、什么时候要读写分离4、主从复制与读写分离5、mysql支持的复制类型6、主从复制的…

Unity Android启动子进程加载其他SDK

1、导出untiy 安卓工程 添加MyService 2、 在子进程内加载SDK部分

【C#】错误 14 “GenerateResource”任务意外失败。

问题描述 Microsoft Visual Studio Ultimate 2013 12.0.21005.1 错误 14 “GenerateResource”任务意外失败。 System.Runtime.InteropServices.ExternalException (0x80004005): GDI 中发生一般性错误。在 System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder,…

开车适合佩戴哪种蓝牙耳机,分享几款骨传导耳机的使用体验

骨传导耳机从发布到现在有了几年的时间&#xff0c;也有很多人开始了解&#xff0c;但真正去选购的人还是很少&#xff0c;如果你没有使用过骨传导耳机&#xff0c;在选购时会很迷茫。作为一个骨传导耳机的重度使用者&#xff0c;下面就给大家分享一下我的体验感受以及选购建议…

大模型微调实践遗留问题1

Lora 和 AdaLora的区别和联系&#xff1f; P-tuning和Prompt tuning的区别和联系&#xff1f; P-Tuning&#xff0c;仅对大模型的Embedding加入新的参数。 P-Tuning-V2&#xff0c;将大模型的Embedding和每一层前都加上新的参数。 Prompt Tuning 方式可以看做是 Prefix Tuni…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第十二章 无线网络安全下)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、无线局域网安全性分析1、Wi-Fi网络安全2、WEP存在如下弱点&#xff1a; 二、移动通信网安全防护1、3G安全体系趋于透明化2、考虑采用公钥密码体系3、考虑新密码技术的应用…

kafka入门,生产者自定义分区(六)

1、实现Partitioner接口 package com.longer.producer;import org.apache.kafka.clients.producer.Partitioner; import org.apache.kafka.common.Cluster;import java.util.Map;/*** 实现接口Partitioner* 实现3个方法&#xff1a;partition&#xff0c;close,configure* 编写…

EasyCVR级联后上级在线,请求播放显示端口不可达是什么原因?

EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比如&#xff1a;视…

TestNG单元测试报错Software caused connection abort: socket write error

在用TestNG进行单元测试时&#xff0c;总出现如下错误&#xff1a;Software caused connection abort: socket write error 解决方法&#xff1a; 报错前我使用的eclipse testng插件版本为6.11&#xff0c;对插件版本降为6.8后此问题解决。&#xff08;先卸载已装testng插件&…

通过精益价值流探索研发效能提升实践

研发效能八大损耗 采用精益价值流进行分析&#xff0c;研发过程存在以下典型的八大损耗 01 缺陷修复 因上游质量问题后移而引发的工作返工&#xff0c;一般会占用新功能的时间投入&#xff0c;如果经常反复回流&#xff0c;将严重影响团队的需求交付吞吐量 02 工作等待 上游…

Postman接口测试工具使用教程【基础版】

postmanpostman是一款支持http协议的接口调试与测试工具&#xff0c;其主要特点就是功能强大&#xff0c;使用简单且易用性好 。无论是开发人员进行接口调试&#xff0c;还是测试人员做接口测试&#xff0c;postman都是我们的首选工具之一 。那么接下来就介绍下postman到底有哪…

chatgpt赋能python:Python调用宏实现SEO优化的方法

Python调用宏实现SEO优化的方法 什么是Python调用宏&#xff1f; 在Python语言中&#xff0c;宏是一种可以被调用的代码模板&#xff0c;可以在程序运行时被动态地解析和执行。Python的宏通常用于代码重用和快速开发&#xff0c;可以大大提高代码的可维护性和开发效率。 Pyt…

青大数据结构【2018】【综合应用】

关键字&#xff1a; 二叉排序树、先序中序排列、平均查找长度ASL、快速排序、堆排序 &#xff08;3&#xff09; 采用堆排序&#xff1b; 因为快速排序在基本有序&#xff08;逆序&#xff09;的情况下&#xff0c;达到最坏的时间复杂度O(n2)。

【im推送苹果推】日历推送筛选与 APNs 的通讯协定应基于您的需要、技能栈和开辟环境

筛选与 APNs 的通讯协定应基于您的需要、技能栈和开辟环境。如下是一些发起来帮忙您做出选择&#xff1a; HTTP/2 协议合用情况&#xff1a; 如果您的技术栈支撑 HTTP/2&#xff0c;且您的开发环境能够大要轻松地集成和利用 HTTP/2 库或框架&#xff0c;那么选择 HTTP/2 是一…

48. 旋转图像----从一道题中深入理解数组=

48. 旋转图像 原题链接&#xff1a;完成情况&#xff1a;开始分析&#xff1a;&#xff08;1&#xff09;&#xff08;2&#xff09;&#xff08;3&#xff09; 解释&#xff1a;如果是一维数组如果是二维数组数组传递的底层原理 原题链接&#xff1a; 48. 旋转图像 https://…

【产品设计】电商类产品搜索功能如何优化?

搜索功能对于电商类产品而言尤为重要&#xff0c;当用户带着明确的目的去搜索自己需要的产品时&#xff0c;却没有得到他想要的结果&#xff0c;这在很大程度上直接影响了用户对于产品的体验。本文作者结合自己的经验&#xff0c;来探讨关于电商类产品搜索功能应如何优化。 在讲…

kettle之数据库连接-Generic database连接hive(CDH版)

版本&#xff1a;kettle7.1、hive-common-1.1.0-cdh5.5.0 目录 1、创建连接 2、org/apache/thrift/TException 3、org.apache.hadoop.conf.Configuration 1、创建连接 当我们想通过jdbc方式连接hive时&#xff0c;可以配置一个通用的一般数据连接Generic database&#xff…

理解GPT-4:人工智能的全新里程碑及其国内使用

在人工智能领域&#xff0c;每一代的进步都是突破性的。近年来&#xff0c;这个领域的发展尤为引人注目&#xff0c;尤其是在语言处理和生成方面。OpenAI的GPT系列模型就是最好的例证。在GPT-3取得巨大成功后&#xff0c;我们迎来了更强大的GPT-4。 GPT-4: AI的新里程碑 GPT-4…

【2022吴恩达机器学习课程视频翻译笔记】2.2监督学习-part-2

B站上面那个翻译我有点看不懂&#xff0c;打算自己啃英文翻译了&#xff08;有自己意译的部分&#xff09;&#xff0c;然后懒得做字幕&#xff0c;就丢在博客上面了&#xff0c;2.2之前的章节结合那个机翻字幕能看懂 2.2监督学习-part-2 So supervised learning algorithms …

【qiankun】前端微服务架构踩坑记录

目录 前言 1.Cannot GET /cooperation/board 场景&#xff1a; 分析 解决 2.Invalid options in vue.config.js:"css.requireModuleExtension" is not allowed 原因 解决 3.less版本升级导致除法写法未转换 原因 解决 4.主子应用样式隔离 场景 解决 5…