SpringBoot整合篇
目录
SpringBoot整合Servlet
整合方式一
1.1 创建servlet
在src对应的目录下创建一个servlet,添加相关的get方法,设置@WebServlet注解,如下:
@WebServlet(name = "FirstServlet",urlPatterns = "/first")
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("--doGet方法执行了----");
PrintWriter out = resp.getWriter();
out.write("success");
out.flush();
out.close();
}
}
1.2启动类中配置
在启动类的头部我们通过@ServletComponentScan注解来加载自定义的Servlet
@SpringBootApplication
//在 springBoot 启动时会扫描@WebServlet,并将该类实例化
@ServletComponentScan()
public class Springboot01ServletApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot01ServletApplication.class, args);
}
}
1.3 启动测试
通过启动类启动程序访问:http://localhost:8080/first 如下
success
整合方式二
2.1创建servlet
第二种整合servlet的方式不需要在servlet的头部添加@WebServlet注解。
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("--doGet方法执行了----");
PrintWriter out = resp.getWriter();
out.write("success second");
out.flush();
out.close();
}
}
2.2 修改启动类
需要在启动类中单独注册servlet,创建一个新的启动类,具体如下:
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
@Bean
public ServletRegistrationBean getServletRegistrationBean(){
// 直接获取ServletRegistrationBean对象 并关联自定义的servlet
ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
// 设置servlet对应的 UrlMapping
bean.addUrlMappings("/second");
return bean;
}
}
2.3 启动程序测试
通过新创建的App启动类启动程序,访问测试 http://localhost:8080/second
success second
SpringBoot整合Filter
整合方式一
1.创建过滤器
创建Filter,并且通过@WebFilter注解配置过滤信息,具体如下:
@WebFilter(urlPatterns = "/first")
public class FirstFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("First过滤器:firstServlet 执行之前");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("First过滤器:firstServlet 执行之后");
}
@Override
public void destroy() {
}
}
2.创建启动类
启动类和我们前面整合Servlet的第一种方式是一样的。
@SpringBootApplication
//在 springBoot 启动时会扫描@WebServlet,并将该类实例化
@ServletComponentScan()
public class Springboot01ServletApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot01ServletApplication.class, args);
}
}
3.启动测试
通过启动器启动程序测试如下
整合方式二
1.创建过滤器
创建新的过滤器,不用配置@WebFilter注解,我们同样在启动类中注册过滤器。
@WebFilter(urlPatterns = "/first")
public class FirstFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("First过滤器:firstServlet 执行之前");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("First过滤器:firstServlet 执行之后");
}
@Override
public void destroy() {
}
}
2.创建启动类
添加获取FilterRegistrationBean对象的方法,并在该方法中注册Filter及配置拦截的请求的URL
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
@Bean
public ServletRegistrationBean getServletRegistrationBean(){
// 直接获取ServletRegistrationBean对象 并关联自定义的servlet
ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
// 设置servlet对应的 UrlMapping
bean.addUrlMappings("/second");
return bean;
}
/**
* 获取FilterRegistrationBean 对象
* 注册过滤器并设置拦截的请求地址
* @return
*/
@Bean
public FilterRegistrationBean getFilterRegistrationBean(){
FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
// 配置要拦截的请求
bean.addUrlPatterns("/second");
return bean;
}
}
3.启动测试
通过App启动类启动程序,访问测试如下:
SpringBoot整合Listener
整合方式一
1.创建Listener
创建一个自定义的Listener,监听ServletContext的初始化和销毁的行为,具体如下:
@WebListener
public class FisrtListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("FirstListener:Servlet容器初始化...");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("FirstListener:Servlet容器被销毁了");
}
}
2.创建启动器
启动还是和之前一样,没什么区别。
@SpringBootApplication
//在 springBoot 启动时会扫描@WebServlet,并将该类实例化
@ServletComponentScan()
public class Springboot01ServletApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot01ServletApplication.class, args);
}
}
3.启动测试
通过启动类启动程序,观察控制台。
整合方式二
1.创建Listener
创建自定义的监听器,不要添加@WebListener注解
package com.edu.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class SecondListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("SecondListener : 初始化了....");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("SecondListener : 销毁了....");
}
}
2.创建启动器
创建启动类,同时创建注册Listener的方法,如下
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
/**
* 注册自定义的监听器
* @return
*/
@Bean
public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new SecondListener());
return bean;
}
}
3.启动测试
启动程序,观察控制台的输出。
输出结果看到不光第二个Listener触发了,而且前面的Listener也触发了。搞定~
文件上传和下载
上传操作
表单页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>文件上传案例:</h1>
<form action="/user/upload" method="post" enctype="multipart/form-data">
<label>账号:</label><input type="text" name="username"><br/>
<label>照片:</label><input type="file" name="upload"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
控制层处理
添加控制器处理上传的文件信息
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/upload")
public String upload(MultipartFile upload,String username) throws IOException {
System.out.println("账号:"+username+" "+upload.getOriginalFilename());
upload.transferTo(new File("c:/tools/",upload.getOriginalFilename()));
return "success:上传成功";
}
}
设置上传参数
在application.properties中添加配置参数,此处要注意SpringBoot2.x版本的参数和1.x版本的参数设置有区别,需要注意
# SpringBoot 2.0 版本
spring.servlet.multipart.enabled=true
# 设置单个文件上传大小
spring.servlet.multipart.max-file-size=200MB
# 设置一次上传请求的文件的总大小
spring.servlet.multipart.max-request-size=200MB
# SpringBoot 1.5.9 版本
#spring.http.multipart.enabled=true
#spring.http.multipart.max-file-size=10MB
#spring.http.multipart.max-request-size=100MB
测试即可
下载操作
@RequestMapping("/exportExcel")
public void exportExcel(HttpServletRequest request,HttpServletResponse response) throws IOException{
File file = new File("d://owned.xls");
//设置响应头和客户端保存文件名
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=" + file.getName());
try {
//打开本地文件流
InputStream inputStream = new FileInputStream(file);
//激活下载操作
OutputStream os = response.getOutputStream();
//循环写入输出流
byte[] b = new byte[2048];
int length;
while ((length = inputStream.read(b)) > 0) {
os.write(b, 0, length);
}
// 这里主要关闭。
os.close();
inputStream.close();
} catch (Exception e){
throw e;
}
}
SpringBoot整合Freemarker
添加依赖
我们需要额外添加freemarker的依赖,如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
创建controller
创建一个普通的控制器,跳转到ftl中。
@Controller
public class UserController {
/*
* 处理请求,产生数据
*/
@RequestMapping("/showUser")
public String showUser(Model model){
List<User> list = new ArrayList();
list.add(new User(1,"张三",20));
list.add(new User(2,"李四",22));
list.add(new User(3,"王五",24));
//需要一个 Model 对象
model.addAttribute("list", list);
//跳转视图
return "user";
}
}
创建ftl文件
注意:springBoot 要求模板形式的视图层技术的文件必须要放到 src/main/resources 目录下必须要一个名称为 templates
ftl代码
<html>
<head>
<title>展示用户数据</title>
<meta charset="utf-9"></meta>
</head>
<body>
<table border="1" align="center" width="50%">
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr>
<#list list as user >
<tr>
<td>${user.userid}</td>
<td>${user.username}</td>
<td>${user.userage}</td>
</tr>
</#list>
</table>
</body>
</html>
属性文件中添加后缀
spring.freemarker.suffix=.ftl |
测试
创建启动类,然后启动访问测试。
@SpringBootApplication
public class Springboot03FreemarkerApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot03FreemarkerApplication.class, args);
}
}
SpringBoot整合Thymeleaf
添加相关的依赖
<!-- 添加父类的依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<dependencies>
<!-- 添加相关的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
- 创建存放视图的templates目录以及application.properties
目录位置:src/main/resources/templates
templates:该目录是安全的。意味着该目录下的内容是不允许外界直接访问的。
Thymeleaf基本使用
1.Thymeleaf 特点:
thymeleaf是一种模板语言,可以动态或者静态显示文本内容,Thymelaef 是通过他特定语法对 html 的标记做渲染。具体语法介绍下篇文章单独介绍
2.编写controller
@Controller
public class DemoController {
@RequestMapping("/show")
public String showInfo(Model model){
model.addAttribute("msg","Thymeleaf入门案例...");
return "index";
}
}
创建视图页面
在我们刚刚创建的templates目录下创建index.html页面,在头部引入
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" >
<head>
<meta charset="UTF-8">
<title>Thymeleaf入门案例</title>
</head>
<body>
<h1>Thymeleaf入门案例:</h1>
<span th:text="hello"></span>
<hr>
<span th:text="${msg}}"></span>
</body>
</html>
创建启动类
在com.dpb.springboot目录下创建启动类
@SpringBootApplication
public class Start {
public static void main(String[] args) {
SpringApplication.run(Start.class,args);
}
}
原文地址:https://blog.csdn.net/loushaoqi/article/details/145267858
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!