整合servlet

1.继承HttpServlet

2.添加@WebServlet注解

@WebServlet(name="FirstServlet",urlPatterns="/firstServlet")
public class FirstServlet extends HttpServlet{ @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
// 解决json中文乱码
resp.setContentType("text/json;charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
PrintWriter out = resp.getWriter();
String str ="{\"name\":\"欧女士\",\"sex\":\"30岁啦\"}";
out.println(str);
out.flush();
out.close();
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost");
} }

3.在启动类添加@ServletComponentScan

@SpringBootApplication
@ServletComponentScan
public class AppMain {
public static void main(String[] args) {
SpringApplication.run(AppMain.class, args);
}
}

浏览器访问

整合filter

1.实现Filter

2.添加注解 @WebFilter(filterName=“FirstFilter”,urlPatterns={".do",".jsp","/first"})
新建FirstFilter过滤器

@WebFilter(filterName="FirstFilter",urlPatterns={"*.xx","/firstFilter"})
public class FirstFilter implements Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
System.out.println("==="+arg0.getParameter("sign"));
/* if("no".equals(arg0.getParameter("sign"))){
return;
}*/
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}

新建HelloController

@RestController
public class HelloController {
@GetMapping("/firstFilter")
public String firstFilter(String sign){
System.out.println("---"+sign);
return "firstFilter";
}
}

3.启动类添加 @ServletComponentScan

浏览器访问

整合listener

1.实现 ServletContextListener

2.添加WebListenter注解
新建FirstListener 监听器

@WebListener
public class FirstListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) { }
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("---contextInitialized---");
} }

3.启动类添加 @ServletComponentScan

访问静态资源

访问静态资源springboot有两种方式

第一种

在/resources下建static文件夹,名字一定要命名为static。如图

新建list.html文件

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
用户列表界面<br/>
<img alt="图片" src="/image/3.jpg">
</body>
</html>

浏览器访问,如图

第二种

在src/main/webapp ,在main下建文件夹webapp,如图

文件上传

1.新建fileUpload.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="/helloFileUpdate" method="post" enctype="multipart/form-data">
上传文件:<input type="file" name="filename"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>

2.新建HelloController

@RestController
public class HelloController { @RequestMapping("/helloFileUpdate")
public Object helloFileUpdate(MultipartFile filename){
System.out.println("文件名称"+filename.getOriginalFilename());
Map<String,Object> retMap = new HashMap<String,Object>();
try {
filename.transferTo(new File("D:\\upload\\"+filename.getOriginalFilename()));
retMap.put("sign", "ok");
retMap.put("mes", "文件上传成功");
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
retMap.put("sign", "ok");
retMap.put("mes", "文件上传失败");
}
return retMap;
}
}

3.配置上传文件大小等

编辑application.yml文件,添加如下配置

spring:
http:
multipart:
maxFileSize: 1MB
maxRequestSize: 5MB

注:maxFileSize表示单个上传文件的大小,maxRequestSize表示多个文件一共的大小

异步上传文件

很多时候我们是异步上传图片的,选择后就上传然后进行浏览

1.新建fileUploadAjax.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
<script src="/plug/jquery/jquery-1.11.3.min.js"></script>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data" id="resource">
上传文件:<input type="file" name="filename" id="filename"><br/>
标&nbsp;&nbsp;题:<input type="text" name="title" id="title"><br/>
备&nbsp;&nbsp;注:<input type="text" name="remark" id="remark"><br/>
<input onclick="subResource()" type="button" value="提交"><br/>
<img alt="没有上传图片" src="D:/upload/1.png" id="img1">
</form>
</body>
<script type="text/javascript">
function subResource(){
//$("form").serialize() 与new FormData 区别
var formData = new FormData($("#resource")[0])
$.ajax({
url: "/helloFileUpdate",
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (data) {
$("#img1").attr("src",data.filePath);
},
error: function (data) {
alert(data)
}
});
} </script> </html>

注:("form").serialize()和newFormData(("form").serialize()和 new FormData(("form").serialize()和newFormData((‘#uploadForm‘)[0])都是序列化表单,实现表单的异步提交,但是二者有区别:首先,前者,只能序列化表单中的数据 ,比如文本框等input select等的数据,但是对于文件,比如文件上传,无法实现,那么这时候,FormData就上场了

2.新建HelloController

@RestController
public class HelloController { @RequestMapping("/helloFileUpdate")
public Object helloFileUpdate(MultipartFile filename,String remark,String title){
System.out.println("文件名称"+filename.getOriginalFilename()+" remark="+remark+" title="+title);
Map<String,Object> retMap = new HashMap<String,Object>();
try {
File file = new File("D:\\upload\\"+filename.getOriginalFilename());
filename.transferTo(file);
retMap.put("sign", "ok");
retMap.put("filePath", file.getAbsolutePath());
retMap.put("mes", "文件上传成功");
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
retMap.put("sign", "ok");
retMap.put("mes", "文件上传失败");
}
return retMap;
}
}

多文件上传

只要把接收参数 MultipartFile filename 修改为 MultipartFile[] filename 数组即可

springboot整合web开发(整合servlet、filter、listener、访问静态、文件上传)的更多相关文章

  1. Spring Boot整合Servlet,Filter,Listener,访问静态资源

    目录 Spring Boot整合Servlet(两种方式) 第一种方式(通过注解扫描方式完成Servlet组件的注册): 第二种方式(通过方法完成Servlet组件的注册) Springboot整合F ...

  2. iOS开发之网络编程--使用NSURLConnection实现文件上传

    前言:使用NSURLConnection实现文件上传有点繁琐.    本文并没有介绍使用第三方框架上传文件. 正文: 这里先提供用于编码测试的接口:http://120.25.226.186:3281 ...

  3. servlet 通过 FileItem 实现多文件上传

    [本文简介] 一个servlet 多文件上传的简单例子. [依赖包] commons-fileupload-1.3.1.jar commons-io-2.2.jar [依赖包下载] commons-f ...

  4. 一个简单的QQ隐藏图生成算法 通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传

    一个简单的QQ隐藏图生成算法   隐藏图不是什么新鲜的东西,具体表现在大部分社交软件中,预览图看到的是一张图,而点开后看到的又是另一张图.虽然很早就看到过这类图片,但是一直没有仔细研究过它的原理,今天 ...

  5. 【温故知新】Java web 开发(三)Form表单与上传下载文件

    简介:在一和二的基础之上,这次来记录下如何在页面提交表单数据,以及文件的上传和下载整个流程,请求也不仅限于GET了,也有POST了. 1. 为了方便,在 webapp 下直接新建一个 index.ht ...

  6. 通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传

    准备工作: 建立.NET Core Web Api项目 新建一个用于Api请求的UserInfo类 public class UserInfo { public string name { get; ...

  7. iOS开发之结合asp.net webservice实现文件上传下载

    iOS开发中会经常用到文件上传下载的功能,这篇文件将介绍一下使用asp.net webservice实现文件上传下载. 首先,让我们看下文件下载. 这里我们下载cnblogs上的一个zip文件.使用N ...

  8. 2020最新Servlet+form表单实现文件上传(图片)

    servlet实现文件上传接受 这几天学了一点文件上传,有很多不会,在网查了许多博客,但是最新的没有,都比较久了 因为我是小白,版本更新了,以前的方法自己费了好久才弄懂,写个随笔方便以后查找 代码奉上 ...

  9. [转]web.xml中servlet ,filter ,listener ,interceptor的作用与区别

    原文链接:https://blog.csdn.net/netdevgirl/article/details/51483273 一.概念: 1.servlet:servlet是一种运行服务器端的java ...

  10. Servlet中使用getInputStream进行文件上传

    据说古老了点,所以代码比较繁琐,主要用于处理文件的地方太多. 下节用SERVLET3.0的Part进行操作一下. form.html: <!DOCTYPE html> <html&g ...

随机推荐

  1. 【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick

    目录 Event Loop 是什么? Event Loop 基本解释 事件循环阶段概览 事件循环细节 timers pending callbacks poll阶段 check close callb ...

  2. iOS 基本控件的使用以及系统层次架构(1)

    User  Interface iOS系统架构层次图 -CocoaTouch UI相关 -媒体层(Media) 音频.视频.图形.动画 -核心服务层(Core services) 内存.网络.文件.线 ...

  3. HTML语言和CSS开发商业站点 错题

    1.关于css为什么会出现Bug说法不正确的是(). (选项两项) A.编写CSS样式是需要在不同浏览器中实现表现一致 B.各大主流浏览器由于不同厂家开发,浏览器使用的内核不同,支持CSS的程度不同 ...

  4. 计蒜客-蒜场抽奖(AC自动机+状态压缩DP)

    题解:题意不再说了,题目很清楚的. 思路:因为N<=10,所以考虑状态压缩 AC自动机中 val[1<<i]: 表示第i个字符串.AC自动机中fail指针是指当前后缀在其他串里面所能 ...

  5. 回文自动机(PAM) 入门讲解

    处理回文串,Manacher算法也是很不错,但在有些问题的处理上比较麻烦,比如求本质不同的子串的数量还需要结合后缀数组才能解决.今天的们介绍一种能够方便的解决关于回文串的问题的算法--PAM. 一些功 ...

  6. CodeForces999A-Mishka and Contest

    A. Mishka and Contest time limit per test 1 second memory limit per test 256 megabytes input standar ...

  7. Codeforces 题解 CF863A 【Quasi-palindrome】

    此题本质上是:求一个数去掉后缀零后是否是回文串 因此,代码分为: >>> 读入 >>> 删除后缀0 >>> 判断回文 >>> 转 ...

  8. ARTS-S pytorch中Conv2d函数padding和stride含义

    padding是输入数据最边缘补0的个数,默认是0,即不补0. stride是进行一次卷积后,特征图滑动几格,默认是1,即滑动一格.

  9. 【Web技术】286- 自定义错误及扩展错误

    英文:Ilya Kantor  译文:LeviDing https://zh.javascript.info/custom-errors 当我们在进行开发的时候,通常需要属于我们自己的错误类来反映任务 ...

  10. Hexo+Github个人博客搭建 | 实战经验分享

    概述 第一次尝试搭建属于自己的博客,并且成功了,非常开心. 很久之前就想搭建一个博客,可是也一直没有行动,最近在逛B站的时候发现一个up主(CodeSheep)的一个视频 <手把手教你从0开始搭 ...