本文将为您提供关于SpringBoot-开发Web应用的详细介绍,我们还将为您解释springboot开发web应用前段用什么的相关知识,同时,我们还将为您提供关于java版springcloud+s
本文将为您提供关于Spring Boot - 开发Web应用的详细介绍,我们还将为您解释springboot 开发web应用前段用什么的相关知识,同时,我们还将为您提供关于java版spring cloud+spring boot+redis多租户社交电子商务平台(七)开发Web应用(1)、spring boot --开发web应用程序、Spring Boot Web应用开发 CORS 跨域请求支持、Spring Boot Web应用开发 CORS 跨域请求支持:的实用信息。
本文目录一览:- Spring Boot - 开发Web应用(springboot 开发web应用前段用什么)
- java版spring cloud+spring boot+redis多租户社交电子商务平台(七)开发Web应用(1)
- spring boot --开发web应用程序
- Spring Boot Web应用开发 CORS 跨域请求支持
- Spring Boot Web应用开发 CORS 跨域请求支持:
Spring Boot - 开发Web应用(springboot 开发web应用前段用什么)
原文
静态资源访问
Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
- /static
- /public
- /resources
- /META-INF/resources
渲染 web界面
spring boot 对以下模板引擎提供友好配置
- Thymeleaf
- FreeMarker
- Velocity
- Groovy
- Mustache
当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resource/templates。这个路径可在后续各模板引擎的配置属性中修改。
配置 pom.xml
<!-- freemarker -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
编写 Controller映射
@RequestMapping("/")
public String index(ModelMap map) {
map.addAttribute("host", "http://blog.didispace.com");
return "index";
}
编写模板页面( resources/template/index.ftl)
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
</head>
<body>
FreeMarker模板引擎
<h1>${host}</h1>
</body>
</html>
application.properties
## h2数据库本地化
spring.datasource.url = jdbc:h2:file:E\:\\test\\db\\testdb
spring.datasource.username = sa
spring.datasource.password = sa
spring.datasource.driverClassName = org.h2.Driver
### jpa 配置 ###
spring.jpa.hibernate.ddl-auto: update
# hibernate的命令策略,方便导入"_"命名的表
spring.jpa.hibernate.naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.database: H2
spring.jpa.show-sql: true
## Freemarker 配置
## 文件配置路径
#spring.velocity.resource-loader-path=classpath:/templates/
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true
spring.freemarker.request-context-attribute=request
# 视图名后缀
spring.freemarker.suffix=.ftl
server.port=8123
debug=true
logging.file=E:/logs/log.out
配置热部署插件
第一种方式:springloaded (官方文档)
补全 pom文件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 会在程序运行时下载此依赖包,暂时报错 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
</dependencies>
<!-- 加上这个会自动给你打包-->
<!--<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>-->
</plugin>
</plugins>
</build>
第二种方式:spring-boot-devtools (官方文档)
pom文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
1 如果使用 maven启动,必须配置 maven插件的 fork选项:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
2 指定让 devtools 监听指定文件夹,那么可以在 application.yml 配置spring.devtools.restart.additional-paths=your path,注意这里需要改成 yml 文件的格式。如果需要排除一些资源,可以使用:
spring.devtools.restart.exclude=static/**,public/**
3 spring-boot 包含一个内嵌的服务器,用于资源改变时触发浏览器刷新。可以设置spring.devtools.livereload.enabled property to false关闭它。
4. 配置好,你可以 Ctrl + S 保存,或者 Ctrl + shift + F9(Recompile),以便触发更新。
java版spring cloud+spring boot+redis多租户社交电子商务平台(七)开发Web应用(1)
静态资源访问
在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。
默认配置
Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
/static
/public
/resources
/META-INF/resources
举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件。启动程序后,尝试访问http://localhost:8080/D.jpg。如能显示图片,配置成功。
渲染Web页面
在之前的示例中,我们都是通过@RestController来处理请求,所以返回的内容为json对象。那么如果需要渲染html页面的时候,要如何实现呢?
模板引擎
在动态HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站。
Spring Boot提供了默认配置的模板引擎主要有以下几种:
Thymeleaf
FreeMarker
Velocity
Groovy
Mustache
Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性,具体可见后文:支持JSP的配置
当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates。当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性中查询并修改。
Thymeleaf
Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,该作者还是Java加密库Jasypt的作者。
Thymeleaf提供了一个用于整合Spring MVC的可选模块,在应用开发中,你可以使用Thymeleaf来完全代替JSP或其他模板引擎,如Velocity、FreeMarker等。Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。
示例模板:
<table>
<thead>
<tr>
<th th:text="#{msgs.headers.name}">Name</td>
<th th:text="#{msgs.headers.price}">Price</td>
</tr>
</thead>
<tbody>
<tr th:each="prod : ${allProducts}">
<td th:text="${prod.name}">Oranges</td>
<td th:text="${#numbers.formatDecimal(prod.price,1,2)}">0.99</td>
</tr>
</tbody>
</table>
可以看到Thymeleaf主要以属性的方式加入到html标签中,浏览器在解析html时,当检查到没有的属性时候会忽略,所以Thymeleaf的模板可以通过浏览器直接打开展现,这样非常有利于前后端的分离。
在Spring Boot中使用Thymeleaf,只需要引入下面依赖,并在默认的模板路径src/main/resources/templates下编写模板文件即可完成。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
需要JAVASpring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码请加企鹅求求:三五三六二四七二五九
spring boot --开发web应用程序
Spring MVC 自动配置
Spring Boot 提供了适用于大多数 Spring MVC 应用的自动配置
自动配置在 Spring 默认功能上添加了以下功能:
- 引入
ContentNegotiatingViewResolver
和BeanNameViewResolver
bean。 - 支持服务静态资源,包括对 WebJar 的支持。
- 自动注册
Converter
、GenericConverter
和Formatter
bean。 - 支持
HttpMessageConverter
。 - 自动注册
MessageCodesResolver
。 - 支持静态 index.html。
- 支持自定义 Favicon 。
- 自动使用
ConfigurableWebBindingInitializer
bean。
HttpMessageConverters
Spring MVC 使用 HttpMessageConverter
接口来转换 HTTP 的请求和响应
自定义 JSON Serializer 和 Deserializer
自定义序列化器(serializer)的做法通常是通过一个模块来注册 Jackson, 然而 Spring Boot 提供了一个备选的 @JsonComponent
注解,它可以更加容易地直接注册 Spring Bean。
MessageCodesResolver
Spring MVC 有一个从绑定错误中生成错误码的策略,用于渲染错误信息:MessageCodesResolver
。如果设置了 spring.mvc.message-codes-resolver.format
属性值为 PREFIX_ERROR_CODE
或 POSTFIX_ERROR_CODE
,Spring Boot 将为你创建该策略。
静态内容
默认情况下,Spring Boot 将在 classpath 或者 ServletContext
根目录下从名为 /static
(/public
、/resources
或 /META-INF/resources
)目录中服务静态内容。它使用了 Spring MVC 的 ResourceHttpRequestHandler
,因此您可以通过添加自己的 WebMvcConfigurerAdapter
并重写 addResourceHandlers
方法来修改此行为。
默认情况下,资源被映射到 /**
,但可以通过 spring.mvc.static-path-pattern
属性调整。比如,将所有资源重定位到 /resources/**
:
spring.mvc.static-path-pattern=/resources/**
如果您的应用程序要包成 jar,请不要使用
src/main/webapp
目录。虽然此目录是一个通用标准,但它只适用于 war 打包,如果生成的是一个 jar,它将被绝大多数的构建工具所忽略。
欢迎页面
Spring Boot 支持静态和模板化的欢迎页面。它首先在配置的静态内容位置中查找
index.html
文件。如果找不到,则查找 index
模板。
自定义 Favicon
Spring Boot 在配置的静态内容位置和根 classpath 中查找
favicon.ico
(按顺序)
路径匹配与内容协商
Spring MVC 可以通过查看请求路径并将其与应用程序中定义的映射相匹配,将传入的 HTTP 请求映射到处理程序。
Spring Boot 默认选择禁用后缀模式匹配,这意味着像
"GET /projects/spring-boot.json"
这样的请求将不会与 @GetMapping("/projects/spring-boot")
映射匹配。
模板引擎
Spring Boot 包含了以下的模板引擎的自动配置支持:
- FreeMarker
- Groovy
- Thymeleaf
- Mustache
错误处理
可以定义一个带有 @ControllerAdvice
注解的类来自定义为特定控制器或异常类型返回的 JSON 文档:
@ControllerAdvice(basePackageClasses = AcmeController.class)
public class AcmeControllerAdvice extends ResponseEntityExceptionHandler {
@ExceptionHandler(YourException.class)
@ResponseBody
ResponseEntity<?> handleControllerException(HttpServletRequest request, Throwable ex) {
HttpStatus status = getStatus(request);
return new ResponseEntity<>(new CustomErrorType(status.value(), ex.getMessage()), status);
}
private HttpStatus getStatus(HttpServletRequest request) {
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
if (statusCode == null) {
return HttpStatus.INTERNAL_SERVER_ERROR;
}
return HttpStatus.valueOf(statusCode);
}
}
如果同包下定义的控制器 AcmeController
抛出了 YourException
,则将使用 CustomerErrorType
类型的 POJO 来代替 ErrorAttributes
做 JSON 呈现
自定义错误页面
想在自定义的 HTML 错误页面上显示给定的状态码,请将文件添加到 /error
文件夹中。错误页面可以是静态 HTML(添加在任意静态资源文件夹下) 或者使用模板构建。文件的名称应该是确切的状态码或者一个序列掩码。
要将 404
映射到一个静态 HTML 文件,文件夹结构可以如下
src/
+- main/
+- java/
| + <source code>
+- resources/
+- public/
+- error/
| +- 404.html
+- <other public assets>
映射到 Spring MVC 之外的错误页面
对于不使用 Spring MVC 的应用程序,您可以使用 ErrorPageRegistrar
接口来直接注册 ErrorPages
。抽象部分直接与底层的内嵌 servlet 容器一起工作,即使没有 Spring MVC DispatcherServlet
也能使用。
@Bean
public ErrorPageRegistrar errorPageRegistrar(){
return new MyErrorPageRegistrar();
}
// ...
private static class MyErrorPageRegistrar implements ErrorPageRegistrar {
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
registry.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400"));
}
}
CORS 支持
跨域资源共享(Cross-origin resource sharing,CORS)是大多数浏览器实现的一个 W3C 规范
在 Spring Boot 应用程序中使用 @CrossOrigin
注解配置控制器方法启用 CORS。还可以通过注册一个 WebMvcConfigurer bean 并自定义 addCorsMappings(CorsRegistry)
方法来定义全局 CORS 配置:
@Configuration
public class MyConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**");
}
};
}
}
Spring Boot Web应用开发 CORS 跨域请求支持
一、Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等
CORS与JSONP相比
1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS
浏览器支持情况
- Chrome 3+
- Firefox 3.5+
- Opera 12+
- Safari 4+
- Internet Explorer 8+
二、在spring MVC 中可以配置全局的规则,也可以使用@CrossOrigin注解进行细粒度的配置。
全局配置:
@Configuration public class CustomCorsConfiguration { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**").allowedOrigins("http://localhost:8080"); } }; } }
或者是
/** * 全局设置 * * @author wujing */ @Configuration public class CustomCorsConfiguration2 extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**").allowedOrigins("http://localhost:8080"); } }
定义方法:
/** * @author wujing */ @RestController @RequestMapping("/api") public class ApiController { @RequestMapping(value = "/get") public HashMap<String,Object> get(@RequestParam String name) { HashMap<String,Object> map = new HashMap<String,Object>(); map.put("title","hello world"); map.put("name",name); return map; } }
测试js:
$.ajax({ url: "http://localhost:8081/api/get",type: "POST",data: { name: "测试" },success: function(data,status,xhr) { console.log(data); alert(data.name); } });
细粒度配置
/** * @author wujing */ @RestController @RequestMapping(value = "/api",method = RequestMethod.POST) public class ApiController { @CrossOrigin(origins = "http://localhost:8080") @RequestMapping(value = "/get") public HashMap<String,name); return map; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
您可能感兴趣的文章:
- 浅谈spring-boot 允许接口跨域并实现拦截(CORS)
- Spring boot 总结之跨域处理cors的方法
Spring Boot Web应用开发 CORS 跨域请求支持:
Spring Boot Web应用开发 CORS 跨域请求支持:
一、Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等
CORS与JSONP相比
1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS
浏览器支持情况
Chrome 3+
Firefox 3.5+
Opera 12+
Safari 4+
Internet Explorer 8+
二、在spring MVC 中可以配置全局的规则,也可以使用@CrossOrigin注解进行细粒度的配置。
全局配置:
@Configuration
public class CustomCorsConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void ad
};
}
}
或者是
/**
* 全局设置
*
* @author wujing
*/
@Configuration
public class CustomCorsConfiguration2 extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**").allowedOrigins("http://localhost:8080");
}
}
定义方法:
/**
* @author wujing
*/
@RestController
@RequestMapping("/api")
public class ApiController {
@RequestMapping(value = "/get")
public HashMap<String, Object> get(@RequestParam String name) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("title", "hello world");
map.put("name", name);
return map;
}
}
测试js:
$.ajax({
url: "http://localhost:8081/api/get",
type: "POST",
data: {
name: "测试"
},
success: function(data, status, xhr) {
console.log(data);
alert(data.name);
}
});
细粒度配置:
/**
* @author wujing
*/
@RestController
@RequestMapping(value = "/api", method = RequestMethod.POST)
public class ApiController {
@CrossOrigin(origins = "http://localhost:8080")
@RequestMapping(value = "/get")
public HashMap<String, Object> get(@RequestParam String name) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("title", "hello world");
map.put("name", name);
return map;
}
}
案例
package com.toutiao.agent.apiimpl.conf;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
*
*/
@Configuration
public class CorsConfig {
// @Override
// public void addCorsMappings(CorsRegistry registry) {
//
// registry.addMapping("/**").allowedHeaders("*")
// .allowedMethods("*")
// .allowedOrigins("*");
//
// }
// @Bean
// public WebMvcConfigurer corsConfigurer() {
// return new WebMvcConfigurerAdapter() {
// @Override
// public void addCorsMappings(CorsRegistry registry) {
// registry.addMapping("/**");
// }
// };
// }
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
}
我们今天的关于Spring Boot - 开发Web应用和springboot 开发web应用前段用什么的分享就到这里,谢谢您的阅读,如果想了解更多关于java版spring cloud+spring boot+redis多租户社交电子商务平台(七)开发Web应用(1)、spring boot --开发web应用程序、Spring Boot Web应用开发 CORS 跨域请求支持、Spring Boot Web应用开发 CORS 跨域请求支持:的相关信息,可以在本站进行搜索。
本文标签: