ssm超市订单管理-用户管理+登录功能的实现

VO(View Object)对象 用于接收客户端多参数请求 用于返回给客户端时使用 隐藏细节信息
事务是放在service层
sqlsession是放在dao层的
dao里面的sql可以写通用的 service层的查询写的准确点的

未来你通过路径直接访问WEB-INF下的路径是访问不了的 但是你可以通过web.xml进行设置

servlet是把不好的东西过滤掉

问题:
ssm超市订单管理-用户管理+登录功能的实现_第1张图片
ssm超市订单管理-用户管理+登录功能的实现_第2张图片
ssm超市订单管理-用户管理+登录功能的实现_第3张图片

解决:

dispatcherServlet拦截范围太广泛 / 但是拦截的这个并不是我们想要处理的

所以我们希望springmvc不在拦截这种请求 我们自己可以做下静态资源的放行

需要在springmvc-servlet.xml中进行设置一下

静态资源放行:
			原因:我们给DispatcherServlet配置的URL匹配路径为/ 那么它会拦截根目录下的所有的请求
				所以导致我们的css、image、js等静态资源文件也被拦截了。
				但是我们也清除,这些静态文件,不需要我们进行拦截!
			所以解决方案如下:
				1.将Servlet的Url匹配路径更改*.do  /  *.action
				2.将根目录下的静态资源目录全部更改为采用默认Servlet处理方式
				3.精确放行
	 -->

	 2.默认的处理方式 全部放行 万一你有一个daload文件夹 下载资源的 但是并不是所有的用户都可以下载 这个时候需要拦截一定的页面
	 3.精确放行

	  
	  
	 

用户登录功能

从后端开始

dao层 .xml 接口 sql语句(写了一个通用的查询,包括分页的查询,用户登录的查询)

service层 登录业务 实现类 接口

采用spring开发 返回值user 参数(userCode,userpassword)

先判断用户在不在 如果在 再从用户中取出来密码和你的参数的密码进行比较
集合.get(0)方法 取出来第一个元素

controller层 写个方法

requestMapping 请求地址对应前端
参数 和前端name值对应
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String doLogin(@RequestParam String userCode, 									@RequestParam String userPassword, 							HttpServletRequest request)throws Exception {
User loginUser = userService.getLogin(userCode, userPassword);
		if (loginUser == null) {
request.setAttribute(ErrorMessage.USER_ERROR_FLAG, 		                            ErrorMessage.USER_LOGIN_ERROR_MSG);
	// 默认请求转发 return "forward:login";
	//return 后面跟的 直接会到视图解析器中解析 
			 return "login";
		}
		// 登陆成功 存储用户信息 跳转到系统首页
		request.getSession().setAttribute(Constants.USER_SESSION, loginUser);
		// VO(View Object)对象 用于接收客户端多参数请求 用于返回给客户端时使用隐藏细节信息
		return "frame";
}

service返回的方法是user对象 对user进行判断 对该对象进行判断

登录失败:存储错误信息 返回登录页面+提示(提示:参数带个request

登陆成功 存储用户信息 跳转到系统首页 session

用户注销功能(退出)

session里面的信息去掉 跳转回登录页面
请求转发 地址栏不变化
localhost:8080/smbms.logot退出地址
你如果写return “login”
当你退出来的时候 地址仍然为localhost:8080/smbms.logot

controller 写方法 参数session

在spring中 需要获取servlet api 直接写就可以

注意地址   在你跳转的时候写/ 表示跳转到了 根目录
	public String doLogout(HttpSession session) {
		// 从session中移除当前用户
		session.removeAttribute(Constants.USER_SESSION);
		// 返回到首页
		return "redirect:/";
	}

用户管理

实现分页查询

dao 写sql 两个方法 返回值 一个是long 另一个是集合

			totalCount list是后台查出来的

service 返回值void 参数pageBean工具类+你查询的条件 startIndex+pageSize

可以借助vo对象

package cn.kgc.vo;

import java.io.Serializable;

import cn.kgc.utils.Constants;
/*用于接收用户列表查询的参数*/
public class QueryUserListVO implements Serializable{
	
	private static final long serialVersionUID = 1L;
	private String userName;
	private Long userRole;
	private Integer p=1;
	private Integer pageSize=Constants.USER_DEFAULT_PAGESIZE;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public Long getUserRole() {
		return userRole;
	}
	public void setUserRole(Long userRole) {
		this.userRole = userRole;
	}
	public Integer getP() {
		return p;
	}
	public void setP(Integer p) {
		this.p = p;
	}
	public Integer getPageSize() {
		return pageSize;
	}
	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}
	
	
}

当前页 每页显示多少条 前台传给我们的

@Override
	public void getListForPaging(PageBean pageBean, QueryUserListVO vo) throws Exception {
		Map params=new HashMap<>();
		params.put("userName",vo.getUserName() );
		params.put("userRole",vo.getUserRole() );
		/*对于总记录数的查询 可能需要name+role
		 * 对于list查询 还需要startIndex+pageSize
		*/
	Long totalCount = userMapper.getCountByCondistions(params);
		pageBean.setTotalCount(totalCount);
		
		/*userMapper.xml对应*/
		params.put("startIndex",pageBean.getStartIndex() );
		params.put("pageSize",pageBean.getPageSize() );

		List list = userMapper.getListByConditions(params);
		pageBean.setList(list);
			}

controller 写方法

设置 当前页+每页显示条数

/* ###########################用户信息分页展示############################ */
	/* 写了参数QueryUserListVO vo 接收前台信息name 并且直接存储到对应的类中 自动按照属性注入 */
	@RequestMapping(value = "/userlist")
	public String doUserList(QueryUserListVO vo, Model model) throws Exception {
		PageBean<User> pageBean = new PageBean<>();
		// 一开始点击用户管理的时候,可能没有传进去参数 需要你进行判断
		pageBean.setCurrentPage(vo.getP());
		// 利用对象的引用传递
		pageBean.setPageSize(vo.getPageSize());

		List<Role> roleList = roleService.getList();
		userService.getListForPaging(pageBean, vo);
		// 记得存起来pageBean
		model.addAttribute("pageBean", pageBean);
		model.addAttribute("roleList", roleList);
		// 查询条件回显
		model.addAttribute("userRole", vo.getUserRole());
		model.addAttribute("userName", vo.getUserName());
		return "userlist";
	}

在这里插入图片描述
ssm超市订单管理-用户管理+登录功能的实现_第4张图片

ssm超市订单管理-用户管理+登录功能的实现_第5张图片

你点上一页 下一页 跳转至 其实调用的是查询这个方法

获取年龄
ssm超市订单管理-用户管理+登录功能的实现_第6张图片

function page_nav(frm,num){
		frm.p.value = num;
		frm.submit();
}

function jump_to(frm,num){
    //alert(num);
	//验证用户的输入
	var regexp=/^[1-9]\d*$/;
	var totalPageCount = document.getElementById("totalPageCount").value;
	//alert(totalPageCount);
	if(!regexp.test(num)){
		alert("请输入大于0的正整数!");
		return false;
	}else if(num > totalPageCount){
		alert("请输入小于总页数的页码");
		return false;
	}else{
		page_nav(frm,num);
	}
}
 
					 
					

你可能感兴趣的:(ssm超市订单管理-用户管理+登录功能的实现)