今日利用Spring三框架做一个登录界面

标签: spring  java

思路

我们自顶向下介绍思路,然后自底向上写代码
1.通过jsp中form向controller传送两个参数username,password
2.controller拿到参数后传给mapper层
3.mapper层进行sql语句执行得到的结果会返回controller的user对象中
4.在controller中如果user为空则返回错误信息并且通过return回到登录界面
如果查询到了信息则登陆成功

mapper层

mapper.xml中添加一个select标签取名为login

<select id="login" parameterType="User" resultType="User" >
	select id,name
	from user
	where username = #{username} and password = #{password}
	</select>

mapper.java接口

package cn.edu.wic.mapper;
import cn.edu.wic.entity.User;
public interface UserMapper {
	public User get(Integer id);
	public User login(User user);
	}

service层

service接口跟mapper接口是一样的

package cn.edu.wic.service;
import cn.edu.wic.entity.User;
public interface UserService {
	public User get(Integer id);
	public User login(User user);
	}

然后就是UserServiceImpl

package cn.edu.wic.service.impl;
import cn.edu.wic.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.edu.wic.service.UserService;
import cn.edu.wic.mapper.UserMapper;
@Service
public class UserServiceImpl implements UserService {
	@Autowired
	private UserMapper userMapper;
	
	@Override
	public User get(Integer id) {
		
		return userMapper.get(id);
	}
	@Override
	public User login(User user) {
		
		return userMapper.login(user);
	}
}

编写重要的控制器(controller)

controller中有一个小逻辑
user为空则登陆失败-即查询不到对象则登陆失败

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import cn.edu.wic.entity.User;
import cn.edu.wic.service.UserService;



@Controller
@RequestMapping("/login")
public class LoginController {
	@Autowired
	private UserService userService;
	@RequestMapping(method=RequestMethod.GET)
	public String get(){
		return "login";
	}
	@RequestMapping(method=RequestMethod.POST)
	public String post(@ModelAttribute("user") @Valid User user ,BindingResult errors,Model model){
		user = userService.login(user);
		if(user == null){
			model.addAttribute("error","用户不存在或者密码错误");
			return "login";
		}
		else{
			model.addAttribute("message",String.format("用户[%s]登录成功", user.getName()));
			return "login_success";
		}
		
		
		
	}
}

然后进入视图层

要编写两个视图 一个为登录界面的form表单
一个为登陆成功
login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core"    %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"  %>
<!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>用户登录</title>
<link type="text/css" rel="stylesheet"  href="<c:url value="/res/bootstrap/css/bootstrap.min.css"/>"></link>
</head>
<body>
	<div class="container">
		<h1 class="page-header">用户登录</h1>
		<form action="" method="post" class="form-horizontal">
			<div class="form-group">
				<label class="col-sm-4 control-label">用户名:</label>
				<div class="col-sm-3">
					<input type="text" name="username" class="form-control">
					<form:errors path="user.username"/>
				</div>
			</div>
			<div class="form-group">
				<label class="col-sm-4 control-label">密码:</label>
				<div class="col-sm-3">
					<input type="password" name="password" class="form-control">
					<form:errors path="user.password"/>
				</div>
			</div>
			<div class="form-group">
				<div class="col-sm-offset-4 col-sm-3 ">
					<button type="submit" class="btn btn-primary">登录</button>
				</div>
			</div>
			<div class="form-group">
				<div class="col-sm-offset-4 col-sm-3 ">
					${error}
				</div>
			</div>
		</form>
	</div>
</body>
</html>

login_success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!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>用户登录成功</title>
</head>
<body>
  ${message}
  
</body>
</html>

可以进入浏览器运行试试看

在这里插入图片描述
在这里插入图片描述

这样就运行成功了

运行失败的话(用户名密码不正确情况)
就会出现错误信息
在这里插入图片描述

版权声明:本文为m0_48245213原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_48245213/article/details/106727331

智能推荐

websocket基本原理

HTTP中一个request只能有一个response。而且这个response也是被动的,不能主动发起 因此过去的服务端推送信息是通过客户端不停的轮询实现的 websocket是双向通信协议,提供了服务端主动推送信息的能力 需要客户端(浏览器)和服务端同时支持 如果经过代理的话,还需要代理支持,否则有些代理在长时间无通信时会自动切断连接 因此WS为了保证连接不被断掉,会发心跳 WebSocket...

mybatis+ehcache二级缓存

导入jar包 mapper.xml文件开启二级缓存 pojo类实现序列化接口 配置ehcache.xml 测试...

python+opencv实现图像拼接

任务 拍摄两张图片去除相同部分,拼接在一起 原图 结果 步骤 读取两张图片 使用sift检测关键点及描述因子 匹配关键点 处理并保存关键点 得到变换矩阵 图像变换并拼接 代码实现 扩展 这里对右边图像进行变换,右边变得模糊,可以修改代码对左边图像变换 这里只有两张图片拼接,可以封装实现多张图片拼接 可以修改代码实现上下图片的拼接...

python_sklearn机器学习算法系列之AdaBoost------人脸识别(PCA,决策树)

          注:在读本文之前建议读一下之前的一片文章python_sklearn机器学习算法系列之PCA(主成分分析)------人脸识别(k-NearestNeighbor,KNN)         本文主要目的是通过一个简单的小...

memmove函数与memcpy函数的模拟实现

memmove函数和memcpy函数都是在内存复制任意类型的,但是它俩也有区别。当源区域和目标区域有重复的,memmove函数会复制缓冲区重叠的部分,而memcpy相反,会报出未知错误。 下面给出两个函数的实现 首先,memmove函数。 实现的基本原理如下图。 具体代码如下: memcpy函数的实现很简单,就直接给出源代码了...

猜你喜欢

SpringFramework核心 - IOC容器的实现 - 总结

1. 概述 把Spring技术内幕第一章和第二章过了一遍,也做了一些笔记, 对IOC容器的实现有了一定皮毛理解,现在跟着源码再过一遍总结一下IOC容器的初始化,Bean的初始化的过程,做一下总结 ① IOC容器和简单工厂模式 在开始之前,先想想我们平时是怎么使用IOC容器为我们管理Bean的,假设我们要把下面的User类交给IOC容器管理 我们不想关心如何创建一个User对象实例的,仅仅在需要他的...

Python和Django的安装

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈  一、下载并安装Python Python 官方下载地址:http://www.python.org/ftp/python/ 我们这里选择的是 Python 2.7.2 。虽然目前最新版是Python 3.2.2, 但是Django目前还不支持 Python 3.2.2。 安装步骤很简单,双击安装包开...

OpenStack代码贡献初体验

为什么80%的码农都做不了架构师?>>>     OpenStack如今已成为开源云平台中的明星项目,得到广泛关注。OpenStack的优秀出众依赖于众多开发者的努力,在享受其带来的便利与快捷的同时,为其做一份贡献也是一个开发者的义务。  在前段时间的OpenStack的测试过程中,我发现Nova项目中的一个Bug,于是向社区提交了Bug报...

SQL Server之8:sql查询每个学生得分最高的两门课

这是一道面试题,今天有空把它记下来,以后遇到此类问题作个参考!刚一看到这个题目,估计好多人都会想到关键字top,其实这里用到的关键字是partition, 好了,先看看表结构,及数据吧!     接下来看一看partition的功能,执行语句   结果如下:   到这里一目了然知道最终结果了!   View Code     &...