在上一篇博客中我搭建了ssm的框架这里有两个错误需要纠正
1.`spring-mvc文件的避免IE出现下载JSON文件情况的配置有点问题,换成如下代码。
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8value>
<value>text/html;charset=UTF-8value>
list>
property>
bean>
mvc:message-converters>
mvc:annotation-driven>
2.servlet版本过低,我忘记了当时是哪个组件报的错了,在pom.xml文件中将servlet的依赖换成如下配置即可。
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
实现基本的登录功能
我这里从页面的请求开始一路向下按照请求处理流程来陈述相关文件,当然也是基于自己的理解,由于我也是刚开始学这个东西,如有不对还望各位大佬不吝赐教。
1.编写登录页面,配置请求URL
我这里直接从网上下载了一个登录页面,稍微改了一下主要是把表单的请求路径设置为自己的习惯的格式(注意这里要和之后的controller类中的相关方法匹配的,最好带有一点自解释性。)
login.jsp
<%--
Created by IntelliJ IDEA.
User: Godwei
Date: 2017/8/7
Time: 9:24
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>SSM_logintitle>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link rel="stylesheet" href="assets/css/reset.css">
<link rel="stylesheet" href="assets/css/supersized.css">
<link rel="stylesheet" href="assets/css/style.css">
head>
<body>
<div class="page-container">
<h1>登录h1>
<form action="/user/getall" method="post">
<input type="text" name="userName" class="username" placeholder="用户名">
<input type="password" name="passWord" class="password" placeholder="密码">
<button type="submit">提交button>
<div class="error"><span>+span>div>
form>
div>
<script src="assets/js/jquery-1.8.2.min.js">script>
<script src="assets/js/supersized.3.2.7.min.js">script>
<script src="assets/js/supersized-init.js">script>
<script src="assets/js/scripts.js">script>
<script src="assets/js/user/login.js">script>
body>
html>
2.编写controller类接受页面请求
UserController.java
这里理解@Controller@Resource@RequestMapping三个注解后就没什么大问题了。
@Controller将该类标志位控制层组件
@Resource用来装配Bean,spring的核心依赖注入。(注意UserService ,到后面你会发现它只是一个接口而已。)
@RequestMapping用来匹配请求路径
上面只是简单介绍一下。
package com.godwei.ssmframe.controller;
import com.godwei.ssmframe.model.User;
import com.godwei.ssmframe.service.UserService;
import com.godwei.ssmframe.util.ActionReturnUtil;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Controller
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@RequestMapping(value = "/login",method = RequestMethod.GET)
public ActionReturnUtil login(@RequestParam(value = "userName") final String userName, @RequestParam(value = "passWord") final String passWord){
return userService.login(userName,passWord);
}
}
3.编写UserSerivce以及UserServiceImpl来进行具体的业务处理
UserSerivces是一个接口,所以非常简单,就包含一个登录的方法。
package com.godwei.ssmframe.service;
import com.godwei.ssmframe.model.User;
import com.godwei.ssmframe.util.ActionReturnUtil;
import java.util.List;
public interface UserService {
ActionReturnUtil login(String userName,String passWord);
}
UserServiceImpl.java
到这里才算是处理了页面请求,这里注入了UserMapper,并调用相应方法来完成。UserMapper是用来匹配数据库相关操作的,稍后再介绍。同时这里的ActionReturnUtil是一个工具类,用来统一返回的信息的。在最后我将会贴出来。
package com.godwei.ssmframe.service.impl;
import com.godwei.ssmframe.mapper.UserMapper;
import com.godwei.ssmframe.model.User;
import com.godwei.ssmframe.service.UserService;
import com.godwei.ssmframe.util.ActionReturnUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("userService")
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper userMapper;
@Override
public ActionReturnUtil login(String userName, String passWord){
User user = new User();
user.setUserName(userName);
user.setPassWord(passWord);
if(userMapper.login(user)!=null) {
return ActionReturnUtil.returnSuccess();
}else {
return ActionReturnUtil.returnError();
}
}
}
4.UserMapper和usermapper.xml完成数据库的相关操作
UserMapper接口,里面就只有一个login方法。
package com.godwei.ssmframe.mapper;
import com.godwei.ssmframe.model.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserMapper {
User login(User user);
}
usermapper.xml。UserMapper的login方法对应一个id为login的sql语句。然后sqlsession会执行相应的sql语句并返回结果。
<mapper namespace="com.godwei.ssmframe.mapper.UserMapper">
<resultMap id="userMap" type="com.godwei.ssmframe.model.User">
<id property="id" column="id" />
<result property="userName" column="name"/>
<result property="passWord" column="password"/>
resultMap>
<resultMap id="BaseResultMap" type="com.godwei.ssmframe.model.User">
<constructor>
<idArg column="id" javaType="java.lang.Long" jdbcType="BIGINT" />
<arg column="userName" javaType="java.lang.String" jdbcType="VARCHAR" />
<arg column="passWord" javaType="java.lang.String" jdbcType="VARCHAR" />
constructor>
resultMap>
<select id="login" parameterType="com.godwei.ssmframe.model.User" resultType="com.godwei.ssmframe.model.User">
select * from users where userName=#{userName} and passWord=#{passWord};
select>
<select id="getUserByName" resultMap="BaseResultMap">
SELECT * FROM users where name = #{name}
select>
<select id="getAllUser" resultMap="BaseResultMap">
select id,userName,passWord from users
select>
<select id="getOneUser" resultType="java.lang.String">
select name from users where id = 2;
select>
mapper>
到此,一个登录请求算是执行完了,程序沿途返回到controller,然后在controller配置相关的结果展示页面即可。我这里没有配置,打算在下一遍博客中展示通过js配置并通过js传递相关数据。来完成剩下的增,删,改操作。
ActionReturnUtil.java
package com.godwei.ssmframe.util;
import java.util.HashMap;
@SuppressWarnings("serial")
public class ActionReturnUtil extends HashMap{
public static ActionReturnUtil returnSuccess(){
ActionReturnUtil returnMap = new ActionReturnUtil();
returnMap.put("success",true);
return returnMap;
}
public static ActionReturnUtil returnSuccessWithData(Object data){
ActionReturnUtil returnMap = new ActionReturnUtil();
returnMap.put("data", data);
returnMap.put("success",true);
return returnMap;
}
public static ActionReturnUtil returnSuccessWithDataAndCount(Object data,int Count){
ActionReturnUtil returnMap = new ActionReturnUtil();
returnMap.put("data", data);
returnMap.put("count",Count);
returnMap.put("success",true);
return returnMap;
}
public static ActionReturnUtil returnSuccessWithMap(String key,String value){
ActionReturnUtil returnMap = new ActionReturnUtil();
returnMap.put(key, value);
returnMap.put("success",true);
return returnMap;
}
public static ActionReturnUtil returnError(){
ActionReturnUtil returnMap = new ActionReturnUtil();
returnMap.put("success",false);
return returnMap;
}
public static ActionReturnUtil returnErrorWithData(Object data){
ActionReturnUtil returnMap = new ActionReturnUtil();
returnMap.put("data", data);
returnMap.put("success",false);
return returnMap;
}
public static ActionReturnUtil returnErrorWithMap(String key,String value){
ActionReturnUtil returnMap = new ActionReturnUtil();
returnMap.put(key, value);
returnMap.put("success",false);
return returnMap;
}
public static ActionReturnUtil returnSuccessWithMsg(String msg){
ActionReturnUtil returnMap = new ActionReturnUtil();
returnMap.put("msg", msg);
returnMap.put("success",true);
return returnMap;
}
public boolean isSuccess() {
return (Boolean) get("success");
}
}
接下来我们测试一下,看一下执行结果
首先我的数据库表有两行数据
然后运行Tomcat再使用postman进行测试,可以看到我们输入正确的信息并发起请求时,得到的结果是true。
当用户名和密码不匹配时可以看到后台返回的是false。
相关代码也会在下一遍博客完成增,删,改操作后,给出git下载地址。