zoukankan      html  css  js  c++  java
  • Spring Boot Controller

    接上篇文章。HelloWorld程序中我们已经创建了一个HellController,里面包括了响应JSON的方法。本文针对Controller再做一下解说。

    回想上篇文章,我们在Controller中使用 @RestController 注解,该注解是Spring 4.0引入的。查看源代码可知其包括了 @Controller 和 @ResponseBody 注解。

    我们能够理解为 @Controller的增强版。专门为响应内容式的 Controller 而设计的,能够直接响应对象为JSON。
    而 @Controller 用来响应页面,spring-boot 支持多种模版引擎包括:
    1,FreeMarker
    2,Groovy
    3。Thymeleaf (Spring 官网使用这个)
    4,Velocity
    5,JSP (貌似Spring Boot官方不推荐,STS创建的项目会在src/main/resources 下有个templates 文件夹,这里就是让我们放模版文件的,然后并没有生成诸如 SpringMVC 中的webapp文件夹)
    只是本文还是选择大家都熟悉的JSP来举例,由于使用JSP与默认支持的模版须要特殊处理,所以拿来举例更好。

    关于Controller 方法能够接收參数使用@RequestBody、@RequestParam、@ModelAttribute、JSONObject、HttpEntity 等方式,皆与Spring的使用一样,这里不做赘述。

    以下我们来说一下怎样使用 @Controller 实现响应JSP页面(与SpringMVC也是一样使用)。
    创建PageController。编码例如以下:

    package org.springboot.sample.controller;
    
    import java.util.Date;
    import java.util.Map;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    public class PageController {
    
        // 从 application.properties 中读取配置,如取不到默认值为Hello Shanhy
        @Value("${application.hell:Hello Shanhy}")
        private String hello = "Hello Shanhy";
    
        /**
         * 默认页<br/>
         * @RequestMapping("/") 和 @RequestMapping 是有差别的
         * 假设不写參数。则为全局默认页,加入输入404页面。也会自己主动訪问到这个页面。

    * 假设加了參数“/”,则仅仅觉得是根页面。

    * * @return * @author SHANHY * @create 2016年1月5日 */ @RequestMapping(value = {"/","/index"}) public String index(Map<String, Object> model){ // 直接返回字符串。框架默认会去 spring.view.prefix 文件夹下的 (index拼接spring.view.suffix)页面 // 本例为 /WEB-INF/jsp/index.jsp model.put("time", new Date()); model.put("message", this.hello); return "index"; } /** * 响应到JSP页面page1 * * @return * @author SHANHY * @create 2016年1月5日 */ @RequestMapping("/page1") public ModelAndView page1(){ // 页面位置 /WEB-INF/jsp/page/page.jsp ModelAndView mav = new ModelAndView("page/page1"); mav.addObject("content", hello); return mav; } /** * 响应到JSP页面page1(能够直接使用Model封装内容。直接返回页面字符串) * * @return * @author SHANHY * @create 2016年1月5日 */ @RequestMapping("/page2") public String page2(Model model){ // 页面位置 /WEB-INF/jsp/page/page.jsp model.addAttribute("content", hello + "(另外一种)"); return "page/page1"; } }

    pom.xml加入依赖:

            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>

    上面说了spring-boot 不推荐JSP,想使用JSP须要配置application.properties。
    加入src/main/resources/application.properties内容:

    # 页面默认前缀文件夹
    spring.mvc.view.prefix=/WEB-INF/jsp/
    # 响应页面默认后缀
    spring.mvc.view.suffix=.jsp
    # 自己定义属性,能够在Controller中读取
    application.hello=Hello Shanhy

    在 src/main 以下创建 webapp/WEB-INF/jsp 文件夹用来存放我们的jsp页面。
    index.jsp

    <%@ page language="java" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Spring Boot Sample</title>
    </head>
    
    <body>
        Time: ${time}
        <br>
        Message: ${message}
    </body>
    </html>

    page1.jsp

    <%@ page language="java" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Spring Boot Sample</title>
    </head>
    
    <body>
        <h1>${content }</h1>
    </body>
    </html>

    要想让spring-boot支持JSP。须要将项目打成war包。
    我们做最后一点改动,改动pom.xml文件。将 jar 中的 jar 改动为 war

    然后启动spring-boot服务。


    訪问页面查看结果:
    http://localhost:8080
    http://localhost:8080/page1
    http://localhost:8080/page2

    最后附上工程结构:
    这里写图片描写叙述

    假设须要使用 FreeMarker 的同学,请按以下的方法说明改动:
    1、去掉 application.properties 中的 spring.mvc.view.prefix 和 spring.mvc.view.suffix 配置。
    2、将 .ftl 模版页面放到 resources/templates 中(如上面工程截图所看到的)
    当中 error.ftl 是系统默认的错误页,内容自定。
    3、改动 pom.xml ,例如以下:

    <?

    xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springboot.sample</groupId> <artifactId>spring-boot-sample</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <!-- <packaging>war</packaging> --> <name>spring-boot-sample</name> <description>Spring Boot Sample Web Application</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!-- <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> --> <!-- <dependency> --> <!-- <groupId>org.apache.tomcat.embed</groupId> --> <!-- <artifactId>tomcat-embed-jasper</artifactId> --> <!-- <scope>provided</scope> --> <!-- </dependency> --> <!-- <dependency> --> <!-- <groupId>javax.servlet</groupId> --> <!-- <artifactId>jstl</artifactId> --> <!-- </dependency> --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

  • 相关阅读:
    测试markdown
    Ubuntu 部署 k8s集群
    HTML 表格 各标签使用的标准顺序(心得)
    javascript event(事件对象)详解
    CSS3选择器归类整理
    PHP开发中session无法获取和保存问题解决方法
    表单脚本
    PHP页面跳转三种实现方法
    PHP中关于时间(戳)、时区、本地时间、UTC时间等的梳理
    JS前端将table导出到excel 兼容谷歌 IE 且保留表格样式
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7217063.html
Copyright © 2011-2022 走看看