• SpringBoot之WEB开发-专题二


    SpringBoot之WEB开发-专题二

    三、Web开发

    3.1、静态资源访问

    在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。

    默认配置

    Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:

    /static

    /public

    /resources

    /META-INF/resources

    举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件。启动程序后,尝试访问http://localhost:8080/D.jpg。如能显示图片,配置成功。

    3.2、渲染Web页面

    渲染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。当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性中查询并修改。

    3.3、使用Freemarker模板引擎渲染web视图

    3.3.1、pom文件引入:
    <!-- 引入freeMarker的依赖包. -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    
    3.3.2、后台代码

    在src/main/resources/创建一个templates文件夹,后缀为*.ftl

    @RequestMapping("/index")
    	public String index(Map<String, Object> map) {
    	    map.put("name","hello...");
    	   return "index";
    	}
    
    3.3.3、前台代码
    <!DOCTYPE html>
    <html>
    <head lang="en">
    <meta charset="UTF-8" />
    <title></title>
    </head>
    <body>
    	  ${name}
    </body> 
    </html>
    
    3.3.4、Freemarker其他用法
    @RequestMapping("/freemarkerIndex")
    	public String index(Map<String, Object> result) {
    		result.put("name", "yushengjun");
    		result.put("sex", "0");
    		List<String> listResult = new ArrayList<String>();
    		listResult.add("zhangsan");
    		listResult.add("lisi");
    		listResult.add("hello");
    		result.put("listResult", listResult);
    		return "index";
    	}
    
    <!DOCTYPE html>
    <html>
    <head lang="en">
    <meta charset="UTF-8" />
    <title>首页</title>
    </head>
    <body>
    	  ${name}
    <#if sex=="1">
                男
          <#elseif sex=="2">
                女
         <#else>
            其他      
    	  
    	  </#if>	  
    	 <#list userlist as user>
    	   ${user}
    	 </#list>
    </body> 
    </html>
    
    
    3.3.5、Freemarker配置

    新建application.properties文件

    这里使用properties配置文件,yml文件后面会写

    spring.freemarker.allow-request-override=false
    spring.freemarker.cache=true
    spring.freemarker.check-template-location=true
    spring.freemarker.charset=UTF-8
    spring.freemarker.content-type=text/html
    spring.freemarker.expose-request-attributes=false
    spring.freemarker.expose-session-attributes=false
    spring.freemarker.expose-spring-macro-helpers=false
    #spring.freemarker.prefix=
    #spring.freemarker.request-context-attribute=
    #spring.freemarker.settings.*=
    spring.freemarker.suffix=.ftl
    spring.freemarker.template-loader-path=classpath:/templates/
    #comma-separated list
    #spring.freemarker.view-names= # whitelist of view names that can be resolved
    

    3.4、使用JSP渲染Web视图

    3.4.1、pom文件引入以下依赖
    <parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.0.0.RELEASE</version>
    	</parent>
    	<dependencies>
    		<!-- SpringBoot web 核心组件 -->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-tomcat</artifactId>
    		</dependency>
    	<!-- SpringBoot 外部tomcat支持 -->	
    	<dependency>
    			<groupId>org.apache.tomcat.embed</groupId>
    			<artifactId>tomcat-embed-jasper</artifactId>
    		</dependency>
    	</dependencies>
    
    3.4.2、在application.properties创建以下配置
    spring.mvc.view.prefix=/WEB-INF/jsp/
    spring.mvc.view.suffix=.jsp
    
    3.4.3、后台代码
    @Controller
    public class IndexController {
    	@RequestMapping("/index")
    	public String index() {
    		return "index";
    	}
    }
    

    注意:创建SpringBoot整合JSP,一定要为war类型,否则会找不到页面.

    不要把JSP页面存放在resources// jsp 不能被访问到

    模板引擎这块会单独写,期待关注!

    3.5、全局捕获异常

    @ExceptionHandler 表示拦截异常

    • @ControllerAdvice 是 controller 的一个辅助类,最常用的就是作为全局异常处理的切面类

    • @ControllerAdvice 可以指定扫描范围

    • @ControllerAdvice 约定了几种可行的返回值,如果是直接返回 model 类的话,需要使用 @ResponseBody 进行 json 转换

    • 返回 String,表示跳到某个 view

    • 返回 modelAndView

    • 返回 model + @ResponseBody

    @ControllerAdvice
    public class GlobalExceptionHandler {
    	@ExceptionHandler(RuntimeException.class)
    	@ResponseBody
    	public Map<String, Object> exceptionHandler() {
    		Map<String, Object> map = new HashMap<String, Object>();
    		map.put("errorCode", "101");
    		map.put("errorMsg", "系統错误!");
    		return map;
    	}
    }
    
  • 相关阅读:
    (原)在ubuntu 中安装 swi prolog 和 简单的使用
    (转) 新手入门:C/C++中的结构体
    (转) eclipse debug (调试) 学习心得
    flutter: 根视图、根元素与根渲染
    eggjs的参数校验模块egg-validate的使用和进一步定制化升级
    Vue源码中用到的工具函数
    21 项优化 React App 性能的技术
    react-redux 的使用
    编写 Vue.js 组件前需要知道的 10 件事
    Flutter实现抽屉动画效果
  • 原文地址:https://www.cnblogs.com/GitBoy/p/11093750.html
Copyright © 2020-2023  润新知