深入解析:SpringMVC静态资源与Servlet容器指南

news/2025/9/20 20:58:37/文章来源:https://www.cnblogs.com/lxjshuju/p/19102839

一.静态资源映射规则

帮助文档

总结

只要静态资源放在类路径下:called/static(or/public or/resource or META-INT/resources)

访问:当前项目的根路径/+静态资源名

二.enjoy模板引擎

1.将页面保存在templates目录下

2.添加坐标

    com.jfinalenjoy5.0.3

3.开启配置

@Configuration
public class SpringBootConfig {@Bean(name = "jfinalViewResolver")public JFinalViewResolver getJFinalViewResolver() {// 创建用于整合 spring boot 的 ViewResolver 扩展对象JFinalViewResolver jfr = new JFinalViewResolver();// 对 spring boot 进行配置jfr.setSuffix(".html");jfr.setContentType("text/html;charset=UTF-8");jfr.setOrder(0);// 设置在模板中可通过 #(session.value) 访问 session 中的数据jfr.setSessionInView(true);// 获取 engine 对象,对 enjoy 模板引擎进行配置,配置方式与前面章节完全一样Engine engine  = JFinalViewResolver.engine;// 热加载配置能对后续配置产生影响,需要放在最前面engine.setDevMode(true);// 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件engine.setToClassPathSourceFactory();// 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath// 代替 jfr.setPrefix("/view/")engine.setBaseTemplatePath("/templates/");// 更多配置与前面章节完全一样// engine.addDirective(...)// engine.addSharedMethod(...);return jfr;}
}

4.编写代码

@RequestMapping(path="/init")//二级目录
public String userInit(){System.out.println("==========进入了springMVC的控制器=========");System.out.println("调用业务层,调用持久层");return "success";//返回方法执行完要跳转的页面名称
}
@RequestMapping(value="/show1",method ={RequestMethod.POST})
public String show1(){System.out.println("==========进入了springMVC的控制器=========");System.out.println("使用post方式发送请求进入");return "success";//返回方法执行完要跳转的页 面名称
}

三.springMVC

  • 1.请求处理
  • 2.参数绑定
  • 3.常用注解
  • 4.数据传递
  • 5.文件上传

1.请求处理

 @RequestMapping

/****@RequestMapping* 意义:处理用户的请求,相似于doget与dopost* 位置:*      类上:一级目录*      方法:二级目录*      例如:user/save*          user/delete*          student/save*          student/delete*  属性:*      value = "",path = ""*      表示请求路径*      =========================*      method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式*      =========================*      params = ""*      限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数**      注意:1.超链接默认发送的是get请求*          2.所有请求所携带的参数格式均为:key = value**     @DeleteMapping删除*     @PutMapping   修改*     @GetMapping   查询*     @PostMapping  新增**     @RequestMapping可以点击查看源码*     @Target({ElementType.METHOD, ElementType.TYPE})*          METHOD==代表修饰方法,TYPE==代表修饰类

2.参数绑定

/*** springMVC请求参数的绑定* 绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的** 一.支持数据类型:*      1.基本类型参数:*                  包括基本类型和 String 类型*      2.POJO类型参数:*                  包括实体类,以及关联的实体类*      3.数组和集合类型参数:*                  包括 List 结构和 Map 结构的集合(包括数组)*      4.使用 ServletAPI 对象作为方法参数*          HttpServletRequest*          HttpServletResponse*          HttpSession*          java.security.Principal*          Locale*          InputStream*          OutputStream*          Reader*          Writer**  二.使用要求*     1.发送请求中携带数据的key与方法参数的name必须一致*     2.数据类型合法** */

3.常用注解

@RequestParam

作用

        把请求中指定名称的参数给控制器中的形参赋值。

        如果页面标签名称和方法参数名称不一致,可以使用此注解。

属性:

  name属性:设置参数名称

defaultValue属性:设置默认值

required属性:设置是否为必传

@RequestBody

        作用:

                用于获取“请求体”内容,直接使用得到是key=value&key=value...结构的数据,并可以转换为对象。

        属性:

required:是否必须有请求体,默认值是:true.

@PathVariable

        作用:

                用于绑定url中的占位符。例如:请求url中/delete/{id},这个{id}就是url占位符。url支持占位符是spring3.0后加入的,是springmvc支持rest风格URL的一个重要标志。

        属性:

value:用于指定url中的占位符名称。

required:是否必须提供占位符。

@RequestHeader

        作用:

                用于获取请求消息头。

        属性:

value:提供消息头名称。

required:是否必须有此消息头。

@CookieValue

        作用:

                用于把指定cookie名称的值传入控制器方法的参数。

        属性:

value:指定cookie的名称

required:是否必须有此cookie

4.数据传递
@RequestMapping("/show4")
public String show4(HttpSession  session){
System.out.println("==========show4=============");
// 模拟数据库中查询数据
Emp emp=new Emp(1,"张三","男");
session.setAttribute("emp",emp);
return "success_String";
}
Title
返回值String成功页面
#(session.emp.eid)
#(session.emp.ename)
#(session.emp.esex)
5.文件上传

导入坐标

com.qiniu
qiniu-java-sdk
7.2.25
com.squareup.okhttp3
okhttp
3.14.2
compile
com.google.code.gson
gson
2.8.5
compile
com.qiniu
happy-dns-java
0.1.6
test
commons-io
commons-io
2.6
commons-fileupload
commons-fileupload
1.3.3

文件上传

@RequestMapping("/fileUpload")
public String fileUpload(String uname, MultipartFile file, HttpServletRequest request, HttpSession session) {
System.out.println("uname:" + uname);
System.out.println("file:" + file);
//方式1.将文件upic以流的方式写入当前服务器磁盘(应用服务器)
//方式2.文件服务器(七牛云)
//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.autoRegion());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
String accessKey = "KdLYknp1GkTjvLa72NIhHZyO8qwUcDjOg9_hunNX";
String secretKey = "CbYmLqqW52XtU3EnpYO8yHOk06kvSyvKIPoR6sBF";
String bucket = "likejenne";
//默认不指定key的情况下,以文件内容的hash值作为文件名
String key = "mup";
try {
byte[] uploadBytes = file.getBytes();
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(uploadBytes, key, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);//获取文件名
System.out.println(putRet.hash);//获取文件hash值
request.getSession().setAttribute("picname", putRet.key);
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
} catch (Exception ex) {
//ignore
}
return "success";
}

四.注册Servlet三大三大组件Servlet/Filter/Listener

servlet

package com.itheima.springboot_day03_demo02.controller;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/HttpServlet")
public class MyHttpServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MyHttpServlet");
}
}

filter

package com.itheima.springboot_day03_demo02.controller;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import java.io.IOException;
@WebFilter("/HttpServlet")
public class MyFilter extends HttpFilter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("MyFilter");
chain.doFilter(request, response);
}
}
Listener
package com.itheima.springboot_day03_demo02.controller;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("监听器启动");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("监听器销毁");
}
}

五.切换为其他嵌入式Servlet容器

SpringBoot 默认针对Servlet容器提供以下支持:

Tomcat(默认使用)

Jetty :支持长连接项目(如:聊天页面)[ˈdʒeti]

Undertow : 不支持 JSP , 但是并发性能高,是高性能非阻塞的容器[ˈʌndətəʊ]

            org.springframework.bootspring-boot-starter-webspring-boot-starter-tomcatorg.springframework.bootspring-boot-starter-jettyorg.springframework.boot

六.restFul

         Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。 主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次, * 更易于实现缓存机制等。

        Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:

*       GET:用于获取资源
*       POST:用于新建资源
*       PUT:用于更新资源
*       DELETE:用于删除资源
* 例如:
*  /users/1                GET :      得到 id = 1 的 user
*  /users/1                DELETE:    删除 id = 1 的 user
*  /users/1/新名/新性       PUT:       更新 id = 1 的 user
*  /users/新名/新性         POST:      新增 user
*
*  http://localhost:8080/userSave?uid=101&uname=XX
*
*  post         http://localhost:8080/users/101/XX
*  get          http://localhost:8080/users/101
*  delete       http://localhost:8080/users/101
*  put          http://localhost:8080/users/101/XX

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

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

相关文章

CCPC Online 2025 游寄

CCPC Online 2025 游寄 赛时 随机 roll 题,先 roll 到 \(K\) 然后没看懂,又 roll 到 \(E\) 谁家好人上来就把两道签到题就 roll 完了() 和队友讨论了一下 \(E\),发现很简单,队友推了个式子过了 回头一看,发现自…

CentOS 7 容器时遇到了 yum update 报错

CentOS 7 容器时遇到了 yum update 报错你在 CentOS 容器中执行 yum update -y 时遇到的错误, ` Loaded plugins: fastestmirror, ovl Determining fastest mirrors Could not retrieve mirrorlist http://mirrorlist…

MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构

现在的文生图模型已经十分强大了,例如我们在输入框敲下 “a photorealistic astronaut riding a horse on the moon”,几秒钟后屏幕生成从未出现过的图像,细节丰富,几近完美。扩散模型(diffusion models)推动了这…

实用指南:光学神经网络与人工智能应用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Zabbix 企业级监控架构实战指南:从搭建、可视化到智能告警

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于MATLAB的视频动态目标跟踪检测搭建方案

基于MATLAB的视频动态目标跟踪检测搭建方案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

第三篇:Windows10/11软件集成与系统优化 - 教程

第三篇:Windows10/11软件集成与系统优化 - 教程2025-09-20 20:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

U522155 数据生成(小心电脑)

// code by 樓影沫瞬_Hz17 #include <bits/stdc++.h> using namespace std;#define getc() getchar_unlocked() #define putc(a) putchar_unlocked(a) #define en_ putc(\n) #define e_ putc( )using pii = pair…

Windows-Appx

Windows-Appx导航 (返回顶部)1. PS_modules 2. Appx 3. Get-AppxPackage3.1 Syntax 语法 3.2 Description 描述 3.3 Examples 3.4 Parameters 参数4. Remove-AppxPackage4.1 Syntax 4.2 Description 4.3 Parameters5. …

实用指南:OSG中osgFX库

实用指南:OSG中osgFX库pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…

2025.9.20——1橙

终于结束初赛,可以好好写写编程题了。 普及- P10108 [GESP202312 六级] 闯关游戏 很简单的一道dp题,但我因为没考虑到答案可能是负数,卡了好几次。

CSP 2025 游记

前言 被迫报了 J 组,不好评价。 初赛 J 组 上午坐大巴在车上睡着了,然后正好在考点门口被颠醒了…… 提前半个小时到了考点,又在桌子上趴了一会,不过没睡着。两个监考老师左右脑互搏,至今不知道准考证号前四位要填…

配置Spring框架以连接SQL Server数据库

Spring框架是一个开源的企业级应用框架,用于简化Java开发工作,通过依赖注入(DI)和面向切面编程(AOP)等核心功能支持程序的健壮性和易维护性。要配置Spring框架以连接SQL Server数据库,需要遵循几个关键步骤,从…

这一辈子大多数日子是无聊的

本文纯属个人观点,搏您一笑,请勿上升至道德高度今天晚上去食堂吃饭的路上拍下了这张照片(图一):密密麻麻的不知道什么植物,如同校园里的学生一样多,它们占领了照片的下部。岸边的树、教学楼,乃至于远方的天空,天…

Elasticsearch面试精讲 Day 11:索引模板与动态映射 - 指南

Elasticsearch面试精讲 Day 11:索引模板与动态映射 - 指南2025-09-20 19:44 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importan…

Go 实现验证码识别

步骤 1:安装 Go 语言 首先,确保你的系统已经安装了 Go 语言。如果没有安装,可以从 Go 官网 下载并安装。 安装后,验证是否成功: 更多内容访问ttocr.com或联系1436423940 go version 步骤 2:安装 Tesseract OCR 我…

跳出 AI 编程的「兔子洞」,4 个实战策略帮你解决90%的死循环

在和 AI 协作编程的时候,你肯定遇到过这样一种情况: 使用 Claude Code 或者 Codex 信心满满的实现一个功能之后,结果你一运行,直接报错。 于是你把错误信息直接复制粘贴回给 AI,它态度好的一笔,立马道歉:非常抱…

用 PHP 和 Tesseract OCR 识别英文数字验证码

验证码是网页中常见的防止自动化攻击的工具,通常它们由一串字母和数字组成,目的是确认用户是人类而不是机器人。很多情况下,验证码都是扭曲、加噪音的图像,这让计算机很难直接读取。幸运的是,借助 OCR(Optical C…

凝望深渊时,深渊也凝望着你(黑洞与摇钱树)

/dev/null与/dev/zero在 Linux 系统中,/dev/null 和 /dev/zero 是两个特殊的设备文件,由内核提供,用于特定的数据处理目的。 /dev/null 是“只进不出”的黑洞,用于丢弃数据。 /dev/zero 是“只出不进”的零源,用于…

详细介绍:《Vuejs设计与实现》第 16 章(解析器) 中

详细介绍:《Vuejs设计与实现》第 16 章(解析器) 中pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…