VO(View Object)对象 用于接收客户端多参数请求 用于返回给客户端时使用 隐藏细节信息
事务是放在service层
sqlsession是放在dao层的
dao里面的sql可以写通用的 service层的查询写的准确点的
未来你通过路径直接访问WEB-INF下的路径是访问不了的 但是你可以通过web.xml进行设置
servlet是把不好的东西过滤掉
解决:
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";
}
你点上一页 下一页 跳转至 其实调用的是查询这个方法
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);
}
}