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

原创粉丝点击