java SSM项目基础(day 4)[实现用户登录功能]

今日目的,实现用户登录功能

目录

思路整理

代码编写

前端JSP页面

后端代码

Service层

Controllor层


思路整理

我们还是以  前端页面→Service层→Controllor层→前端页面   的思路来整理。

要想实现登录,先要有一个登录框,登录框包括用户名,密码和验证码。输入之后,要进行验证。验证之后,如果正确,则跳转到成功页面,如果错误,则留在当前页面。

那么前端页面要编写一个登录框,和点击登录事件。Service层要编写登录和验证。Controllor层要实现验证和登录跳转。最后前端页面要跳转到成功页面或留在当前页面

代码编写

前端JSP页面

页面里肯定要有个表单,用于提交数据。为了美观,网上有很多登录的模板,大家可以自行下载并修改。

最主要的是要有一个post表单,把输入框里的用户名和密码以及验证码提交到后端进行验证。

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>

<!-- 引入文件 -->
<link rel="stylesheet" href="plugin/login/css/style.css" />
<script src="plugin/login/js/jquery.js"></script>
<script src="plugin/login/js/verificationNumbers.js"></script>
<script src="plugin/login/js/Particleground.js"></script>

<!-- 页面样式布局 -->
<style>
body {
	height: 100%;
	background: #00031b;
	overflow: hidden;
}

/*背景颜色*/
canvas {
	z-index: -1;
	position: absolute;
}
</style>

<!-- 背景特效js -->
<script>
	$(document).ready(function() {
		//粒子背景特效
		$('body').particleground({
			dotColor : '#a9aed4', //背景点的颜色
			lineColor : '#a9aed4' //背景线的颜色
		});
		//验证码
		//createCode();
	});
</script>

</head>

<body>


	<!-- 提交表单 -->
	<form method="post" action="${pageContext.request.contextPath}/userlogin.do">
		<dl class="admin_login">
			<dt>
				<strong>站点后台管理系统</strong> <em>Management System</em>
			</dt>

			<!-- 用户名 -->
			<dd class="user_icon">
				<input name="username" placeholder="账号" type="text"
					class="login_txtbx" required="" />
			</dd>

			<!-- 密码 -->
			<dd class="pwd_icon">
				<input name="userpwd" placeholder="密码" type="password"
					class="login_txtbx" />
			</dd>

			<!-- 验证码 -->
			<dd>
				<img id="imgObj" alt=""
					src="${pageContext.request.contextPath}/kaptcha.do"
					class="login_yzmbx">
			</dd>

			<!-- 验证码输入框 -->
			<dd class="val_icon">
				<input name="code" placeholder="验证码" required="" type="text"
					class="login_txtbx">
			</dd>

			<!-- 登录按钮 -->
			<dd>
				<input value="登陆" class="submit_btn" type="submit" />
			</dd>

			<!-- 注册按钮 -->
			<dd>
				<input type="button" value="注册" class="submit_btn"
					onclick="window.open('success.jsp','_blank')" />
			</dd>
		</dl>
	</form>

	<!-- 验证码点击更换 -->
	<script type="text/javascript">
		$(function() {//jquery加载事件  text()、attr()、val()、html()
			$("#imgObj")
					.click(
							function() {
								$(this)
										.attr("src",
												"${pageContext.request.contextPath}/kaptcha.do");
							})

		})
	</script>

</body>
</html>

当点击登录时,form表单调用了controllor里的一个userlogin.do方法。

后端代码

Service层

UserService

package com.demo.service;

import java.util.List;

import com.demo.pojo.User;
import com.demo.pojo.UserExample;

public interface UserService {

	//通过主键查询
	User selectByPrimaryKey(Integer userid);
	//通过条件查询
	List<User> selectByExample(UserExample example);
	//用户登录
	public User login(String username,String userpwd);
}

UserServiceImpl

package com.demo.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.demo.mapper.UserMapper;
import com.demo.pojo.User;
import com.demo.pojo.UserExample;
import com.demo.pojo.UserExample.Criteria;
import com.demo.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	//注解方式,自动装配
	@Autowired
	UserMapper userMapper;
	
	@Override
	public User selectByPrimaryKey(Integer userid) {
		return userMapper.selectByPrimaryKey(userid);
	}

	//通过条件查询
	@Override
	public List<User> selectByExample(UserExample example) {
		
		return userMapper.selectByExample(example);
	}

	//用户登录验证
	@Override
	public User login(String username, String userpwd) {
		UserExample example =new UserExample();
		Criteria criteria=example.createCriteria();
		criteria.andUsernameEqualTo(username);
		criteria.andUserpwdEqualTo(userpwd);
		List<User> list = userMapper.selectByExample(example);
		return list.size() > 0 ? list.get(0) : null;
	}

	
	
}

UserServiceImpl里要实现的代码比较多,好在自动生成的代码里提供了UserExample。在UserExample里可以找到验证的方法。

验证完后把值传入list里,如果list里有值,即验证正确,那么返回该用户,如果list里为空即验证失败,返回null。

Controllor层

package com.demo.controllor;

import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.demo.pojo.User;
import com.demo.pojo.UserExample;
import com.demo.service.UserService;
import com.google.code.kaptcha.Constants;

@Controller
public class UserControllor {

	@Resource(name = "userServiceImpl") // 通过注解,自动装配,注意首字母小写
	UserService userService;

	/**
	 * 通过主键查询用户信息
	 * 
	 * @param userid
	 * @return
	 */
	@RequestMapping(value = "queryuserbypk") // 请求地址,和user.jsp里的url一致
	@ResponseBody // 由于需要返回json数据,因此需要responsebody
	public User querybypk(Integer userid) {
		System.out.println("开始查询");
		try {
			System.out.println("查询成功");
			User user = userService.selectByPrimaryKey(userid);
			return user;
		} catch (Exception e) {
			// TODO: handle exception
			return null;
		}
	}

	/**
	 * 通过条件查询
	 * @return
	 */
	@RequestMapping(value = "queryuserbyem")
	@ResponseBody
	public List<User> querybyem() {
		UserExample example = new UserExample();
		List<User> list = userService.selectByExample(example);
		return list;
	}
	
	/**
	 * 用户登录
	 * @param username
	 * @param userpwd
	 * @param code
	 * @param req
	 * @return
	 */
	@RequestMapping(value = "userlogin")
	public ModelAndView userlogin(String username,String userpwd,String code,HttpServletRequest req) {
		
		//创建视图对象
		ModelAndView mv = new ModelAndView();
		
		//获取Session对象
		HttpSession session = req.getSession();
		
		//获取随机生成的验证码
		String randomCode = session.getAttribute(Constants.KAPTCHA_SESSION_KEY).toString();
		
		//判断验证码输入是否正确
		if(code.equalsIgnoreCase(randomCode)){
			
			//判断用户名和密码输入是否正确
			User user = userService.login(username, userpwd);
			
			if(user != null){
				//用户名和密码输入正确
				
				mv.setViewName("user");//跳转到主页面
				
			}else{//用户名和密码输入错误
				mv.setViewName("login");//  login.jsp
			}
		}else{//验证码输入有误
			mv.setViewName("login");//  login.jsp
		}
		
		return mv;
		
		
		
	}

}

Controllor层因为是和mode and view直接接触的,无论验证成功与否,都应该返回一个视图。如果成功,则跳转到成功页面,如果失败,则留在当前页面。

mv.setViewName("login") 这句这样写,是因为在springmvc-servlet里已经配置过了前缀和后缀

<!-- 视图解析器   prefix:前缀   suffix:后缀-->
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="order" value="2" />
	  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
      <property name="prefix" value="" />
      <property name="suffix" value=".jsp" />
   </bean>

所以这里只需要写个login就行,它会自动装配成 login.jsp 并访问该页面。

 

到此,用户登录已经实现。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值