009 - Maven创建SpringBoot,整合JSP
时间:2021-04-01 00:46:25
收藏:0
阅读:33
备注
不建议在SpringBoot中使用JSP。
须知
- pom.xml中的javax.servlet.jsp.jstl是用于支持JSP标签库的,在Web2.5的容器中没有问题,单当你的容器是Web3.0或以上版本时,就会出问题。 这是个非常坑爹的问题。
- javax.servlet.jsp.jstl会自动加载依赖servlet-api-2.5.jar, 而且会在实际运行时把支持Web3.0的3.1版本的javax.servlet-api覆盖掉。即使你在pom.xml显示的在加入3.1版本的javax.servlet-api也没用。导致SpringBoot应用抛出Runtime exception运行错误。
- 这是一个不可调和的矛盾,要么不用javax.servlet.jsp.jstl,要么不用Web3.0。但绝大多数情况下,jstl标签库不是必须的,而Web3.0是必须的。替代方式就是不用JSP,改用Themeleaf吧
项目结构

创建maven工程,选择webapp模块

命名

在pom.xml原有的基础上添加下面的代码
<!--导入父类依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--整合jsp-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<!--处理jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!--JSTL-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope> <!---->
</dependency>
</dependencies>
在main文件夹新建java文件夹,然后设置为Sources Root

在main文件夹新建resources文件夹,设置为Resources Root。然后在resources文件夹新建application.yml文件

application.yml
#配置视图解析(配置yml文件的时候需要将这个注释删除,否则会出错)
spring:
mvc:
view:
prefix: /
suffix: .jsp
配置启动类(层级必须是其他业务代码的父级别)

package com;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ApplicationRun {
public static void main(String[] args) {
SpringApplication.run(ApplicationRun.class,args);
}
}
实体类
package com.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private Integer id;
private String name;
private Integer age;
}
controller层
package com.controller;
import com.entity.Student;
import com.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/hello")
public class HelloHandler {
@Autowired
private StudentRepository studentRepository;
/**
* 一开始进入就展示所有的数据信息
* @return
*/
@RequestMapping("/index")
public ModelAndView modelAndView() {
ModelAndView m = new ModelAndView();
m.setViewName("index");
m.addObject("list", studentRepository.findAll());
return m;
}
/**
* 更改学生信息之前,需要先查询学生信息出来,并且学生id不可更改
* @param id
* @return
*/
@GetMapping("/findById/{id}")
public ModelAndView findById(@PathVariable("id") Integer id) {
ModelAndView m=new ModelAndView();
m.setViewName("update");
m.addObject("student",studentRepository.findById(id));
return m;
}
/**
* 重定向
*
* return "index"; //直接跳转的话,jsp中的数据不可取出
*
* @param id
* @return
*/
@GetMapping("/deleteById/{id}")
public String deleteById(@PathVariable("id") Integer id){
studentRepository.deleteById(id);
return "redirect:/hello/index";
}
@PostMapping("/save")
public String save(Student student){
studentRepository.saveOrUpdate(student);
return "redirect:/hello/index";
}
@PostMapping("/update")
public String update(Student student){
studentRepository.saveOrUpdate(student);
return "redirect:/hello/index";
}
}
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>学生信息</h1>
<table>
<tr>
<th>学生id</th>
<th>学生姓名</th>
<th>学生年龄</th>
<th>操作</th>
</tr>
<c:forEach items="${list}" var="student">
<tr>
<th>
<td>${student.id}</td>
<td>${student.name}</td>
<td>${student.age}</td>
<td>
<a href="/hello/findById/${student.id}">修改</a>
<a href="/hello/deleteById/${student.id}">删除</a>
</td>
</th>
</tr>
</c:forEach>
</table>
<a href="/save.jsp">添加学生</a>
</body>
</html>
save.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加学生信息</title>
</head>
<body>
<%--点击提交按钮,将由/hello/save来进行请求处理--%>
<form action="/hello/save" method="post">
id: <input type="text" name="id"/><br/>
name:<input type="text" name="name"/><br/>
age:<input type="text" name="age"/><br/>
<input type="submit" value="添加">
</form>
</body>
</html>
update.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>修改学生信息</title>
</head>
<body>
<%--点击提交按钮,将由/hello/update来进行请求处理--%>
<form action="/hello/update" method="post">
id: <input type="text" name="id" value="${student.id}" readonly/><br/>
name:<input type="text" name="name" value="${student.name}"/><br/>
age:<input type="text" name="age" value="${student.age}"/><br/>
<input type="submit" value="修改">
</form>
</body>
</html>
原文:https://www.cnblogs.com/YuRong3333/p/14603865.html
评论(0)