springboot之web项目开发(spring+jpa+jsp)
来源:互联网 发布:可以九连拍的软件 编辑:程序博客网 时间:2024/06/01 22:46
前言
本章主要讲述,使用springboot做一个基本的web项目的登录功能,view层没有使用springBoot推荐的thyemleaf模板,而使用jsp,持久层使用JPA。基本的环境搭建可以参考我之前的文章,在最后我也会贴上我的源码地址。
《springboot入门》
项目创建
首先创建一个maven project,IDE中选择New -> Maven project,如下图:![选择webapp项目](http://img.blog.csdn.net/20170915103710402?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzY2MzM4MTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)然后next,输入group ID,Artifact id, -> finish 完成。创建完成目录如下:![这里写图片描述](http://img.blog.csdn.net/20170915104505663?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzY2MzM4MTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
相关jar引入,pom.xml中添加:
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.luowei</groupId> <artifactId>springBoot</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>springBoot Maven Webapp</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!-- JPA --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- servlet 依赖. --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </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-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- jdbc 依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- 热部署配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional><!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 --> </dependency> <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.1</version> </dependency> </dependencies> <build> <finalName>springBoot</finalName> </build></project>
添加application.peoperties
在resource目录添加application.properties文件
spring.datasource.url=jdbc:mysql://192.168.1.2:3306/luoweispring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.Driverserver.port=8080server.session.timeout=10server.tomcat.uri-encoding=UTF-8#项目contextPathserver.contextPath=/springboot#格式化时间格式spring.jackson.date-format=yyyy-MM-dd HH:mm:ss#thymeleaf#spring.thymeleaf.mode=LEGACYHTML5#是否开启模板缓存,default true#spring.thymeleaf.cache=false#是否支持浏览器小图标,默认为TRUE,支持#spring.mvc.favicon.enabled = true#JSP配置# 页面默认前缀目录spring.mvc.view.prefix=/WEB-INF/jsp/# 响应页面默认后缀spring.mvc.view.suffix=.jsp
这里主要对JDBC、JSP、日期格式等进行了配置。
这需要注意下,日期格式配置是为了解决在页面中获取mysql时间格式字段时,会在前端页面变成了1234242xxxxxx时间戳。
登录功能
创建数据表
建表sql如下,创建一个简单的账号表:
CREATE TABLE `t_account` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID,自增', `account` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账号', `password` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码', `mobile` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '手机号', `createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', `modifyTime` datetime DEFAULT NULL COMMENT '最后修改时间', `status` tinyint(1) DEFAULT '1' COMMENT '账号状态,0禁用,1 启用,默认1', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
创建实体类
package com.luowei.base;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@MappedSuperclass
public class BaseEntity implements Serializable {
/** * */private static final long serialVersionUID = 1L;@Temporal(TemporalType.TIMESTAMP)private Date createtime;@Temporal(TemporalType.TIMESTAMP)private Date modifytime;public Date getCreatetime() { return createtime;}public void setCreatetime(Date createtime) { this.createtime = createtime;}public Date getModifytime() { return modifytime;}public void setModifytime(Date modifytime) { this.modifytime = modifytime;}
}
这里注意需要加上 @MappedSuperclass注解
package com.luowei.entity;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.NamedQuery;import javax.persistence.Table;import com.luowei.base.BaseEntity;/*** @ClassName: Account.java * @Description: 账号实体类* @author:luowei* @date:2017年9月5日* */@Entity@Table(name="t_account")@NamedQuery(name="Account.findAll", query="SELECT t FROM Account t")public class Account extends BaseEntity{ /** * */ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; private String account; private String password; private String mobile; private Integer status; getXXX&setXXX 省略... 因为实体字段与数据库字段一样,所以字段不需要任何注解配置}
持久层配置
BaseDao,主要是对JPA本身部分接口的继承。
package com.luowei.base;import java.io.Serializable;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;import org.springframework.data.repository.NoRepositoryBean;/** * 继承DAO * 自定义的 XxxxRepository 需要继承 JpaRepository,这样的 XxxxRepository 接口就具备了通用的数据访问控制层的能力。 * JpaSpecificationExecutor: 不属于Repository体系,实现一组 JPA Criteria 查询相关的方法 。 * **/@NoRepositoryBeanpublic interface BaseDao<T> extends JpaRepository<T, Serializable>,JpaSpecificationExecutor<T> {}
业务DAO
package com.luowei.dao;import org.springframework.data.jpa.repository.Query;import org.springframework.stereotype.Repository;import com.luowei.base.BaseDao;import com.luowei.entity.Account;/*** @ClassName: AccountDao * @Description: 账号DAO * @author luowei* @date 2017年8月30日 下午4:15:55 * */@Repositorypublic interface AccountDao extends BaseDao<Account> { /** * 根据账号以及密码获取用户信息 * @param account 账号 * @param password 密码 * @return */ @Query("select t from Account t where t.status = 1 and t.account = ?1 and t.password = ?2") public Account findByAccountAndPassword(String account,String password);}
这里对JAP不做详细的介绍,如有需要,大家可以去看看Spring-data-jpa的详细使用.
业务层
同样很简单,接口:
package com.luowei.service;import java.util.List;import com.luowei.entity.Account;/** * * @ClassName: AccountService.java * @Description: 账号service* @author:luowei* @date:2017年8月30日 */public interface AccountService { /** * 获取所有账号信息 * @return * @throws Exception */ public List<Account> findAllAccounts() throws Exception; /** * 根据账号密码获取用户信息 * @param account * @param password * @return * @throws Exception */ public Account findByAccountAndPassword(String account,String password) throws Exception;}
实现类:
package com.luowei.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.luowei.dao.AccountDao;import com.luowei.entity.Account;import com.luowei.service.AccountService;@Servicepublic class AccountServiceImpl implements AccountService { @Autowired private AccountDao accountDao; @Override public List<Account> findAllAccounts() throws Exception { return accountDao.findAll(); } @Override public Account findByAccountAndPassword(String account, String password) throws Exception { return accountDao.findByAccountAndPassword(account, password); }}
控制层
package com.luowei.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.google.gson.Gson;
import com.luowei.entity.Account;
import com.luowei.service.AccountService;
import com.luowei.vo.ResultObject;
/**
*
* @ClassName: LoginController.java
* @Description: 登录模块控制器
* @author:luowei
* @date:2017年9月1日
*
*/
@Controller
@RequestMapping(value=”/login”)
public class LoginController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowiredprivate AccountService accountService;/** * @return 跳转到login.html */@RequestMapping("/toLogin")public String index() { return "login";}/** * 跳转到系统首页 * @return */@RequestMapping("/toIndex")public String test() { return "index";}/** * @return 验证是否登录成功 */@RequestMapping("/checkLogin")@ResponseBodypublic ResultObject checkLogin(@RequestParam("account") String account,@RequestParam("password") String password) { ResultObject rs = new ResultObject(); try { Account at = this.accountService.findByAccountAndPassword(account, password); if(null == at ) { rs.setCode("0"); rs.setMsg("账号或密码错误"); return rs; } Gson gson = new Gson(); logger.info("登录成功! 用户信息="+gson.toJson(at)); return rs; } catch (Exception e) { logger.error("登录异常!"); e.printStackTrace(); } return rs;}
}
注意,这里我使用到了日志,slf4j,Gson ,其中gson是很好的json转换工具类,推荐大家使用。
JSP
在webapp/WEB-INF目录下创建jsp目录,然后创建jsp文件,
登录页:
$.ajax({ url: '${ctx}/login/checkLogin', data:{ "account":account, "password":password }, type:"POST", dataType: "json", async: false, success: function(data){ console.log(data); if(data.code == 1){ var url = "${ctx}/login/toIndex.adm"; window.location.href = url; }else{ //tipAlert(data.msg); alert('账号或密码错误!'); } }, error: function(){ console.log('登录失败!'); } });
这里我只将异步请求的方法贴出来了,其实就是获取页面上的账号,密码信息,然后异步请求到后台
运行效果大家可以下载完整的源码运行,SQL脚本也在源码中。
源码地址:springboot+jpa+jsp
demo访问:http://localhost:8080/springboot/login/toLogin
- springboot之web项目开发(spring+jpa+jsp)
- SpringBoot + Thymeleaf + JPA创建一个web项目
- SpringBoot之JPA(J)
- SpringBoot之Data JPA介绍、开发
- springboot 整合web项目支持jsp
- SpringBoot系列(二)--web应用之jsp篇
- 【系统学习SpringBoot】再遇Spring Data JPA之JPA应用详解(自定义查询及复杂查询)
- SpringBoot详解(三)-Spring Boot的web开发
- springboot【9】数据访问之Spring-data-jpa
- springboot之热部署及Spring JPA简单应用
- SpringBoot之1分钟快速搭建Web项目(一)
- springboot整合spring data jpa
- springboot集成spring-data-jpa
- SpringBoot--使用Thymeleaf模板开发web项目
- 使用springboot进行web项目开发
- SpringBoot入门之Web开发(含源码)
- SpringBoot学习(五)操作数据库Spring-Data-JPA
- 【Java EE (Struts2 + Spring + Hibernate)开发】:Web 之 【JSP基础知识】
- 深入理解Java反射
- 1 判断日期
- 由两道题所引起的一些思考
- TESTTEST
- MySQL事务隔离级别详解
- springboot之web项目开发(spring+jpa+jsp)
- Centos安装Redis4.0.0
- Logback浅析
- 润乾V4报表展现JSP文件放入WEB_INF下后如何访问
- Spring技术内幕——事务的创建,挂起,回归,提交(事务拦截器和抽象事务管理器)
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- 设计模式(二)工厂模式:简单工厂模式
- 结构体内存对齐详解
- MySQL事务