Spring boot的Controller类是如何指定HTML页面的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring boot的Controller类是如何指定HTML页面的相关的知识,希望对你有一定的参考价值。

如题,知道@RequestMapping("/")是在服务端启动页面的网址,但是它是如何加载resource中相应的页面,代码中在哪里可以体现出来?小白刚开始学习。

创建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";

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

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>123456789

上面说了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 Shanhy123456

在 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>12345678910111213

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>1234567891011

要想让spring-boot支持JSP,需要将项目打成war包。
我们做最后一点修改,修改pom.xml文件,将 jar 中的 jar 修改为 war
然后启动spring-boot服务。
参考技术A Spring boot的Controller类是指定HTML页面的实现的方法如下:
1、在spring boot中借鉴servlet的方法输出html:
@RequestMapping(value="/getPage")
public void writeSubmitHtml(Reader reader, Writer writer, HttpSession session) throws IOException
User user = (User) session.getAttribute(ConstantConfig.LONGIN_USER);
StringBuffer sbHtml = new StringBuffer();
sbHtml.append("<!doctype html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
sbHtml.append("<title>支付宝即时到账交易接口</title></head><body>"+ user.getNo() +"</body></html>");
writer.write(sbHtml.toString());


这里直接使用了参数 Writer writer,返回值为 void, 其实参数 Writer writer 也可以换成 PrintWriter writer; 直接写出HTML的字符流。
2.在controller中的配置:
@RequestMapping(value="/htmlView")
public void htmlView(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
// ...
request.getRequestDispatcher("index.html").forward(request, response);
     //response.sendRedirect("http://www.baidu.com");

spring boot之入门Controller常用注解

Controller常用注解

@Controller 

  处理http请求

 

@RestController

  Spring4之后新加的注解,原来返回json数据需要@ResponseBody配合@Controller,现在合并成@RestController

 

@RequestMapping 

  配置url映射,value配置url方法路径,method配置请求方式, 例:@RequestMapping(value="hello",method = RequestMethod.GET)

 

@PathVariable

  获取url中的数据,,请求的url方式 :  url路径/value  ,例: http://localhost:8080/hi/1 ,请求方式相对于@RequestParam简洁

  

 

@RequestParam

  获取请求参数的值,@RequestParam(value = "id",required = false,defaultValue = "1")  value即传参名称,required = false不是必须传入(默认为true),defaultValue 当不传入参数时的默认值

  请求的url方式 :  url路径?key=value  例: http://localhost:8080/hi?id=1

  

     

@GetMapping和@PostMapping

  组合注解,@GetMapping等同于@RequestMapping(method = RequestMethod.GET),@PostMapping等同于@RequestMapping(method = RequestMethod.POST)

  即@GetMapping接收的是get请求,@PostMapping接收的是post请求

 

 Repository注解

@Entity 对实体类的注释,表明此类映射数据库的表

对属性的注释:

  1.@Id此属性为主键

  2.@GenerateaValue 设置为自增列

  3.@Column(name = "password",unique = true,nullable = false,length = 255) 可设置列名、唯一属性、不为空、长度等。

  4.@Min/Max 设置最小值或最大值

  ...

 

 Service注解

 @Service 对实体类的注释,表明此类为业务层。

 @Transactional 可对实体类或方法进行注释,对实体类注释表明此类的全部方法都是用事务。一般使用在方法中有多条执行更新数据库的语句。以防执行错误导致数据错误。

 

其他注解

@Component 表明此类将注入Spring容器给予管理,而@Repository、@Service和@Controller的注解接口都使用了@Component

 下面是Spring的@Service注解接口

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
    String value() default "";
}

 

 

  

以上是关于Spring boot的Controller类是如何指定HTML页面的的主要内容,如果未能解决你的问题,请参考以下文章

记一次Spring boot搭建过程

Spring Boot常用注解总结

spring boot常用注解使用小结

spring boot 整合mysql

Spring boot 中 WebMvcConfigurationSupport 详解

Spring Boot Controller(篇二)