spring boot 搭建web项目常见五种返回形式
在web项目中一般常见的五种返回形式:
代码见:https://github.com/BenMario315/SpringBootLearn,demo
- 返回页面,使用模板引擎,spring boot推荐使用thymeleaf,类似的还有freemarker等。
- 返回字符串(json),一般用于完全的前后端分离开发,或者提供接口服务。
- 返回重定向,一些较少的业务需求。
- 转发,一些较少的业务需求。
- 流输出,常用于下载文件。
方法前代码:
package cn.mario.springboot.controller; import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.util.StringUtils; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder; /**
* @PackageName cn.mario.springboot.controller
* @ClassName TestController
* @Author BenMario
* @Date 2018/5/23 3:16
* @Description test controoler
* @Version 1.0
**/ @Controller
public class TestController {
private Logger logger = LoggerFactory.getLogger(TestController.class);
1.返回页面:使用spring boot 推荐的thymeleaf,默认模板路径:resources/templates/*.html
代码:
/**
* retrun page
* @param request HttpServletRequest
* @param response HttpServletResponse
* @return test page
*/
@RequestMapping(value = "/testReturnPage")
public String testReturnPage(HttpServletRequest request, HttpServletResponse response) {
logger.debug("into testReturnPage function");
System.out.println("into testReturnPage function");
return "test";
}
2.1返回普通字符串
代码:
/**
* retrun general string
* @param request HttpServletRequest
* @param response HttpServletResponse
* @return str
*/
@ResponseBody
@RequestMapping(value = "/testReturnString")
public String testReturnString(HttpServletRequest request, HttpServletResponse response) {
logger.debug("into testReturnString function");
System.out.println("into testReturnString function");
String str = "RETRUN STRING";
return str;
}
2.2返回json字符串
代码:
/**
* retrun json string
* @param request HttpServletRequest
* @param response HttpServletResponse
* @return JSONObject to string
*/
@ResponseBody
@RequestMapping(value = "/testReturnJSONObject")
public String testReturnJSONObject(HttpServletRequest request, HttpServletResponse response) {
logger.debug("into testReturnJSONObject function");
System.out.println("into testReturnJSONObject functioin");
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("name_1", StringUtils.toString(1));
jsonObject.put("name_2", 1);
} catch (JSONException e) {
e.printStackTrace();
}
return jsonObject.toString();
}
3.1.1利用关键字“redirect”跨web服务重定向
代码:
/**
* retrun cross web project redirect
* @param request HttpServletRequest
* @param response HttpServletResponse
* @return redirect cross web project
*/
@RequestMapping(value = "/testRedirect_1")
public String testRedirect_1(HttpServletRequest request, HttpServletResponse response) {
logger.debug("inot testRedirect_1 function");
System.out.println("into testRedirect_1 function");
String url = "http://www.baidu.com";
return "redirect:" + url;
}
3.1.2利用关键字“redirect”同web服务重定向
代码:
/**
* retrun same web project redirect
* @param request HttpServletRequest
* @param response HttpServletResponse
* @return redirect same web project
*/
@RequestMapping(value = "/testRedirect_2")
public String testRedirect_2(HttpServletRequest request, HttpServletResponse response) {
logger.debug("into testRedirect_2 function");
System.out.println("into testRedirect_2 function");
String url = "/testRedirect_1";
return "redirect:" + url;
}
3.2.1利用HttpServletRespons对象跨web服务重定向
代码:
/**
* retrun cross web project redirect
* @param request HttpServletRequest
* @param response HttpServletResponse
* @return redirect cross web project
*/
@RequestMapping(value = "/testRedirect_3")
public void testRedirect_3(HttpServletRequest request, HttpServletResponse response) {
logger.debug("into testRedirect_3 function");
System.out.println("into testRedirect_3 function");
String url = "http://www.baidu.com";
try {
response.sendRedirect(url);
} catch (IOException e) {
e.printStackTrace();
}
}
3.2.2利用HttpServletRespons对象同web服务重定向
代码:
/**
* retrun same web project redirect
* @param request HttpServletRequest
* @param response HttpServletResponse
* @return redirect same web project
*/
@RequestMapping(value = "/testRedirect_4")
public void testRedirect_4(HttpServletRequest request, HttpServletResponse response) {
logger.debug("into TestController中的testRedirect_4 function");
System.out.println("into TestController中的testRedirect_4 function");
String url = "/testRedirect_3";
try {
response.sendRedirect(url);
} catch (IOException e) {
e.printStackTrace();
}
}
4.1跨web项目不能转发
代码:
/**
* retrun cross web project forward
* @param request HttpServletRequest
* @param response HttpServletResponse
* @return forward cross web project
* @note fail. Only the same web project forwarding
*/
@RequestMapping(value = "/testForward_1")
public void testForward_1(HttpServletRequest request, HttpServletResponse response) {
logger.debug("into testForward_1 function");
System.out.println("into testForward_1 function");
String url = "http://www.baidu.com";
try {
request.getRequestDispatcher(url).forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("After the forwarding is completed,the code can also run.");
}
4.2同web项目转发
代码:
/**
* retrun same web project forward
* @param request HttpServletRequest
* @param response HttpServletResponse
* @return forward same web project
*/
@RequestMapping(value = "/testForward_2")
public void testForward_2(HttpServletRequest request, HttpServletResponse response) {
logger.debug("into testForward_2 function");
System.out.println("into testForward_2 function");
String url = "/testReturnPage";
try {
request.getRequestDispatcher(url).forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("After the forwarding is completed,the code can also run.");
}
5.1流输出,用于下载文件
代码:
/**
* retrun stream for downlaod file
* @param request HttpServletRequest
* @param response HttpServletResponse
*/
@RequestMapping(value = "/testReturnStream")
public void testReturnStream(HttpServletRequest request, HttpServletResponse response) {
logger.debug("into testReturnStream function");
System.out.println("into testReturnStream function");
byte[] bts = new byte[8192];
int len = -1;
try {
// set type is dawnload
response.setHeader("content-Type", "application/force-download");
// set file name and charset
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("test.log", "utf-8"));
OutputStream output = response.getOutputStream();
File file = new File("./logs/log.log");
FileInputStream input = new FileInputStream(file);
while ((len = input.read(bts)) != -1) {
output.write(bts, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
方法后代码:
}
对于一般的web项目来说, 以上五种返回形式应该是比较全面了。几乎也都说明了每种返回形式的应用场景。如有疏漏或错误,请不吝指出。
spring boot 搭建web项目常见五种返回形式的更多相关文章
- Spring Boot搭建Web项目常用功能
搭建WEB项目过程中,哪些点需要注意: 1.技术选型: 前端:freemarker.vue 后端:spring boot.spring mvc 2.如何包装返回统一结构结果数据? 首先要弄清楚为什么要 ...
- 使用Spring Boot开发Web项目(二)之添加HTTPS支持
上篇博客使用Spring Boot开发Web项目我们简单介绍了使用如何使用Spring Boot创建一个使用了Thymeleaf模板引擎的Web项目,当然这还远远不够.今天我们再来看看如何给我们的We ...
- 【spring boot】5.spring boot 创建web项目并使用jsp作前台页面
贼烦的是,使用spring boot 创建web项目,然后我再idea下创建的,but 仅仅启动spring boot的启动类,就算整个项目都是好着的,就算是能够进入controller中,也不能成功 ...
- 基于Spring boot的web项目搭建教程(一)
前言: 本教程参考了大量前辈的代码,在此不方便一一列举.本教程使用IDEA开发工具搭建项目,对于本人的IDEA已经集成了某些插件,比如Lombok,Thymeleaf,yml等插件,这些插件不在文中提 ...
- 使用Spring Boot开发Web项目
前面两篇博客中我们简单介绍了Spring Boot项目的创建.并且也带小伙伴们来DIY了一个Spring Boot自动配置功能,那么这些东西说到底最终还是要回归到Web上才能体现出它的更大的价值,so ...
- Spring MVC 搭建web项目示例
环境为Eclipse 1:新建Dynamic web project : springMvcDemo 2:下载spring的jar包,把jar包复制到WEB-INF/lib目录下 3.添加配置文件w ...
- Spring Boot教程(二十五)返回JSON格式
在上述例子中,通过@ControllerAdvice统一定义不同Exception映射到不同错误处理页面.而当我们要实现RESTful API时,返回的错误是JSON格式的数据,而不是HTML页面,这 ...
- spring boot 创建web项目并使用jsp作前台页面
参考链接:https://www.cnblogs.com/sxdcgaq8080/p/7712874.html
- Spring-Boot快速搭建web项目详细总结
最近在学习Spring Boot 相关的技术,刚接触就有种相见恨晚的感觉,因为用spring boot进行项目的搭建是在太方便了,我们往往只需要很简单的几步,便可完成一个spring MVC项目的搭建 ...
随机推荐
- STM32中GPIO的8种工作模式
一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止.高低电平由IC的电源决定.形象点解释:推挽,就是有推有拉,任何 ...
- LeetCode(24)-Balanced Binary Tree
题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...
- obj-c编程11:内存管理和ARC(自动引用计数)
乖乖隆地洞,这篇文章内容可是不得了,内存管理哦!首先,这个要是搞不明白,你就等着进程莫名其妙的挂死,或是疯狂申请内存却不释放,结果被OS杀死,不管是"自杀"还是"他杀&q ...
- LeetCode(56)-Add Binary
题目: Given two binary strings, return their sum (also a binary string). For example, a = "11&quo ...
- obj-c编程10:Foundation库中类的使用(6)[线程和操作队列]
任何语言都不能避而不谈线程这个东东,虽然他是和平台相关的鸟,虽说unix哲学比较讨厌线程的说...线程不是万能灵药,但有些场合还是需要的.谈到线程就不得不考虑同步和死锁问题,见如下代码: #impor ...
- Java核心技术第四章——2.final 和 static
final实例域 实例域(对象的属性)可修饰为final.修饰为final后,在构建对象时必须初始化这个实例域.若没有在实例域进行初始化,那么必须在每个构造器内初始化这个实例域(否则会编译错误). 表 ...
- 深入了解Map
联系 Java中的Map类似于OC的Dictionary,都是一个个键值对组成,一键对应一值.我在之前的文章中讲解过Set,其实在JAVA底层Set依赖的也是Map,那我们都知道,Set是单列的(只有 ...
- 无效类字符串:ProgID: Excel.Application
网上发现的方案是改注册表,其实用不着那么麻烦,找2种excel文件:xlsx和xls,把默认打开方式都换成你机器上有的程序就行,比如WPS Office的WPS 表格
- Go语言开发区块链只需180行代码
区块链开发用什么语言?通过本文你将使用Go语言开发自己的区块链(或者说用go语言搭建区块链).理解哈希函数是如何保持区块链的完整性.掌握如何用Go语言编程创造并添加新的块.实现多个节点通过竞争生成块. ...
- 服务器禁止ping
禁止ping后,不让别人通过域名ping到你的ip, 如果禁用后,你在ping自己的域名会给你返回服务商的IP并提示超时, 这样你就可以减少IP暴露,增加一点安全. 禁止方法: 编辑 /etc/sys ...