SpringBoot整合Jsp

本文详细介绍了如何在SpringBoot中整合Jsp,创建一个用户管理的示例工程。从开发准备到代码编写,包括数据库表创建、工程结构、配置设置、实体类、DAO层、服务层、控制器的编写,最后进行功能测试。提供JPA操作数据库的示例,并附带源代码下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本篇文章主要讲述SpringBoot整合Jsp,实现一个简单的用户增删改查示例工程。若需工程源代码,可以直接跳到底部,通过链接下载工程代码。

SpringBoot整合Jsp

开发准备

环境要求
JDK: 1.8
SQL: MySql

这里我们需要在mysql中建立一张用户表,用于存储用户的信息。
数据库脚本如下:

CREATE TABLE `tb_user` (
  `id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `username` varchar(10) DEFAULT NULL COMMENT '用户名',
  `sex` int(1) DEFAULT NULL COMMENT '性别,0:女, 1:男',
  `password` varchar(50) DEFAULT NULL COMMENT '密码',
  `age` int(3) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

新建好表之后,我们再来创建工程。
我们的这个工程是通过maven创建一个普通的web工程。
创建好工程之后,我们需要下载相应的jar包,然后再来进行相关的开发。
这些jar包我们在pom.xml文件中添加springBoot和Jsp相关的jar即可。
相关的注释以及写在其中了,这里就不在过多讲述了。
Maven依赖如下:

 <dependencies>
        <!-- Spring Boot Web 依赖 核心 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>
        <!-- Spring Boot 热部署 class文件之后会自动重启 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>2.0.1.RELEASE</version>
            <optional>true</optional>
        </dependency>
        <!-- Spring Boot Test 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.0.1.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <!-- Spring Boot JPA -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>
        <!-- Spring Boot Mybatis 依赖 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring-boot}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
        </dependency>
        <!--fastjson 依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.14</version>
        </dependency>

        <!--JSP 依赖  -->
        <!-- servlet依赖. -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- tomcat的支持.-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>8.5.15</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

相关的Jar包下载完毕之后,我们再来确认项目的工程结构。
首先是后台相关包说明:

src/main/java
com.dwqin.controller - Controller层
com.dwqin.dao - 数据操作层 DAO
com.dwqin.pojo - 实体类
com.dwqin.service - 业务逻辑层
com.dwqin.StartApplication - 应用启动类
src/main/java/resources
application.yml - 应用配置文件,应用启动会自动读取配置

前端的相关文件存放说明:

src/main/webapp
pages - JSP文件的存放路径
WEB-INF - web.xml web相关的核心配置

整体工程结构图:

工程结构确认之后,我们再来添加相应的配置。
只需在application.yml 添加相应的配置即可。
数据源的配置和之前的差不多,需要注意的是Jsp的相关配置。
由于springBoot默认的支持的模版是Thymeleaf,所以这里我们需要进行相应的更改。

配置如下:

#服务属性配置
server:
  port: 8082
spring:
  application:
    name: springboot-jsp-thymeleaf
  mvc:
    view:
      prefix: /pages/
      suffix: .jsp
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/dwqin?useSSL=false&characterEncoding=utf-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    show-sql: true  # 打印sql
    generate-ddl: false # 自动建表
    database: MySQL  # 数据库类型
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

代码编写

其实这里的代码和之前文章讲述的基本一致,唯一有点区别的是,这里我是用JPA实现对数据库进行操作的(也就是顺便说下JPA这个框架的使用)。

首先是实体类,这里因为用了JPA,所以和之前的有点不同,添加了一些注解。
Entity:表示这是个实体类。
Table:该实体类映射的数据表名。
Column:指定该字段的属性,nullable 表示是否非空,unique 表示是否是唯一。

那么实体类的代码如下:

@Entity
@Table(name = "tb_user")
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "username")
    private String username;
    @Column(name = "sex")
    private Integer sex;
    @Column(name = "password")
    private String password;
    @Column(name = "age")
    private Integer age;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public Integer getSex() {
        return sex;
    }
    public void setSex(Integer sex) {
        this.sex = sex;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

由于用的是JPA,dao层这块只需继承JpaRepository该类即可,需要指定实体类和主键类型。
dao层代码如下:

public interface UserDao extends JpaRepository<User, Long>, JpaSpecificationExecutor<User>{

}

业务层这块和之前一样调用即可,虽然用的是JPA,但是方法也是很简单的,新增和修改就用save,删除就是delete,findOne就是通过ID查找,findAll就是查询所有等等。

services代码如下:

public interface UserService {
    public boolean addUser(User user);

    public boolean updateUser(User user);

    public boolean deleteById(Long id);

    public User findUserById(Long id);

    public List<User> findAll();
}
@Service
public class UserServiceImpl implements UserService {
    
    @Autowired
    private UserDao userDao;

    @Override
    public boolean addUser(User user) {
        boolean flag = false;
        try {
            userDao.save(user);
            flag = true;
        } catch (Exception e) {
            System.out.println("新增失败!");
            e.printStackTrace();
        }
        return flag;
    }

    @Override
    public boolean updateUser(User user) {
        boolean flag = false;
        try {
            userDao.save(user);
            flag = true;
        } catch (Exception e) {
            System.out.println("修改失败!");
            e.printStackTrace();
        }
        return flag;
    }

    @Override
    public boolean deleteById(Long id) {
        boolean flag = false;
        try {
            userDao.deleteById(id);
            flag = true;
        } catch (Exception e) {
            System.out.println("删除失败!");
            e.printStackTrace();
        }
        return flag;
    }

    @Override
    public User findUserById(Long id) {
        return userDao.findById(id).get();
    }


    @Override
    public List<User> findAll() {
        return userDao.findAll();
    }
}

到了控制层这块,这里提供还是提供接口给Jsp进行调用,不过这里类的注解就不能用之前的RestController这个注解,这个注解以json的格式返回数据,但是我们有时返回的时候需要跳转界面,所以应该使用Controller这个注解。如果想在某个方法中返回的数据格式是json的话,在该方法上加上ResponseBody这个注解即可。

控制层代码如下:

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/index")
    public ModelAndView sign_demo() {
        return new ModelAndView("/index");
    }

    @RequestMapping("/list")
    public String list(Model model) {
        List<User> userList = userService.findAll();
        model.addAttribute("userList", userList);
        return "user/list";
    }

    @RequestMapping("/toAdd")
    public String toAdd() {
        return "user/userAdd";
    }

    @RequestMapping(value = "/add")
    public String add(User user) {
        userService.addUser(user);
        return "redirect:/list";
    }

    @RequestMapping("/toEdit")
    public String toEdit(Model model, Long id) {
        User user = userService.findUserById(id);
        model.addAttribute("user", user);
        return "user/userEdit";
    }

    @RequestMapping("/edit")
    public String edit(User user) {
        userService.updateUser(user);
        return "redirect:/list";
    }

    @RequestMapping("/toDelete")
    public String delete(Long id) {
        userService.deleteById(id);
        return "redirect:/list";
    }
}

启动类:

StartApplication.java
@SpringBootApplication
public class StartApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(StartApplication.class);
        springApplication.run(args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(StartApplication.class);
    }
}

前端jsp代码如下:

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>index</title>
</head>
<body>
    <p><a href="<%=request.getContextPath()%>/list">用户列表</a></p>
    <a href="<%=request.getContextPath()%>/toAdd">添加用户</a>
</body>
</html>

list.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>list</title>
    <style>
        .tb {
            border-collapse: collapse;
        }
        .tb tr th, .tb tr td {
            border: 1px solid #666666;
            text-align: center;
        }
    </style>
</head>
<body>
<h2>用户列表</h2>
<a href="<%=request.getContextPath()%>/toAdd">添加用户</a>
<br/><br/>
<table class="tb">
    <tr>
        <th>序号</th>
        <th>用户名</th>
        <th>性别</th>
        <th>密码</th>
        <th>年龄</th>
        <th>编辑</th>
        <th>删除</th>
    </tr>
    <c:forEach items="${userList}" var="userItem" varStatus="userStatus">
        <tr>
            <td>${userItem.id}</td>
            <td>${userItem.username}</td>
            <c:choose>
                <c:when test="${userItem.sex eq '1'}"><td>男</td></c:when>
                <c:otherwise><td>女</td></c:otherwise>
            </c:choose>
            <td>${userItem.password}</td>
            <td>${userItem.age}</td>
            <td><a href="<%=request.getContextPath()%>/toEdit?id=${userItem.id}">编辑</a></td>
            <td><a href="<%=request.getContextPath()%>/toDelete?id=${userItem.id}">删除</a></td>
        </tr>
    </c:forEach>
</table>
<br/><br/>
<div><a href="<%=request.getContextPath()%>/index">返回首页</a></div>
</body>
</html>

userAdd.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>add</title>
</head>
<body>
<h2>添加用户</h2>
<form action="<%=request.getContextPath()%>/add" method="post">
    <label>
        用户名:<input type="text" name="username">
    </label>
    <br/><br/>
    <label>
        性别:
        <input type="radio" name="sex" value="1">男
        <input type="radio" name="sex" value="0">女
    </label>
    <br/><br/>
    <label>
        密 码:<input type="password" name="password">
    </label>
    <br/><br/>
    <label>
        年 龄:<input type="text" name="age">
    </label>
    <br/><br/>
    <input type="submit" value="提交">
    <input type="reset" value="重置">
</form>
<br/><br/>
<div><a href="<%=request.getContextPath()%>/index">返回首页</a></div>
</body>
</html>

userEdit.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>edit</title>
</head>
<body>
<h2>编辑用户</h2>
<form action="<%=request.getContextPath()%>/edit" method="post">
    <input type="hidden" name="id" value="${user.id}">
    <label>
        用户名:<input type="text" name="username" value="${user.username}">
    </label>
    <br/>
    <label>
        性别:
        <input type="radio" name="sex" ${user.sex eq '1' ? 'checked="checked"':""} value="1">男
        <input type="radio" name="sex" ${user.sex eq '0' ? 'checked="checked"':""} value="0">女
    </label>
    <br/>
    <label>
        密 码:<input type="text" name="password" value="${user.password}">
    </label>
    <br/>
    <label>
        年 龄:<input type="text" name="age" value=${user.age}>
    </label>
    <br/><br/>
    <input type="submit" value="修改">
</form>
<br/><br/>
<div><a href="<%=request.getContextPath()%>/index">返回首页</a></div>
</body>
</html>

 

功能测试

我们直接点击StartApplication启动项目,在浏览器上输入地址查看效果。

1.主界面: http://localhost:8082/index

2.列表页:http://localhost:8082/list

3.添加页面:http://localhost:8082/toAdd

 

4. 编辑页面:http://127.0.0.1:8082/toEdit?id=7

 

源代码下载地址:  https://download.youkuaiyun.com/download/qq_35161159/11966735

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值