JavaWeb学习笔记(四)分页、Cookie、Session
JavaWeb学习笔记(四)
- 1.MVC的概念
- 2.分页设计
- 2.1 设计分析
- 2.2 代码实现
- 2.2.1 BookServlet
- 2.2.2 BookService
- 2.2.3 BookDao
- 3.Cookie
- 3.1 定义
- 3.2 使用
- 3.2.1 Cookie的创建
- 3.2.2 Cookie的获取
- 3.2.3 Cookie的修改
- 3.2.4 Cookie的生命控制
- 3.2.5 Cookie有效路径Path的设置
- 4.Session
- 4.1 定义
- 4.2 使用
- 4.2.1 Session的创建和获取
- 4.2.2 Session的数据存取
- 4.2.3 Session的生命控制
- 4.3 浏览器和Session之间关联的技术内幕
1.MVC的概念
(1)MVC全程:Model(模型)、View(视图),Controller(控制器)
(2)MVC的概念最早出现在JavaEE的三层架构中的Web层,它可以有效地指导Web层的代码如何有效分离,单独工作。
(3)View视图:只负责数据和页面的显示,不接受任何与显示数据无关的代码,便于程序员和美工的分工合作——HTML/JSP。
(4)Controller控制器:只负责接收请求,调用业务层的代码处理请求,然后派发页面,是一个“调度者”的角色——Servlet。
转到某个页面,或是重定向到某个页面。
(5)Model模型:将业务逻辑相关的数据封装为JavaBean类,其中不掺杂任何与数据处理相关的代码——entity/pojo/domain/JavaBean。
(6)MVC是一种思想,理念是将软件代码拆分成组件,单独开发,组合使用,目的是为了解耦。
2.分页设计
2.1 设计分析
- 由分页的视图分析出的对象模型Page类
(1)pageNo 当前页码
(2)pageSize 每页显示数量
(3)pageTotal 总页码
(4)pageTotalCount 总记录数
(5)item 当前页数据 - 实现分析
(1)pageNo:由客户端传入
(2)pageSize:有两种方式 ①由客户端传入 ②由页面布局决定
(3)pageTotalCount:由Sql语句求得
(4)pageTotal:总记录数/每页显示数量,注意如果取余不等于0要+1
(5)item:由Sql语句得到 SELECT * FROM 表名 limit begin,pagesize
begin:(pageNo-1)*pageSize - 实现方案
(1)Web层
public void page(){ //处理分页
①获取请求的参数pageSize和pageNo
②调用bookService.page(pageNo,pageSize):返回Page对象
③保存到Request域中
④请求转发到/pages/manager/book_manager.jsp页面
}
(2)Service层
public Page page(pageNo,pageSize){
求三个属性值:pageTotalCount、pageTotal、item
①pageTotalCount:select count(*) from 表名;
②item:select * from 表名 limit begin,pageSize;
}
(3)Dao层
queryForPageTotalCount(); 求总记录数
queryForItems(); 求当前页数据
2.2 代码实现
2.2.1 BookServlet
public void page(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException {//获取请求的参数pageNo和pageSize2int pageNo = WebUtils.parseInt(req.getParameter("pageNo"),1);int pageSize = WbUtils.parseInt(req.getParameter("pageSize"),Page.pageSize);//调用BookService.page(pageNo,pageSize):Page对象Page page = bookService.page(pageNo,pageSize);//保存Page对象到Request域中req.setAttribute("page",page);//请求转发到pages/manager/book_manager.jspreq.getRequestDispatcher("pages/manager/book_manager.jsp").forward();
}
2.2.2 BookService
public Page page(int pageNo,int pageSize) {Page<Book> page = new Page<Book>();//获取当前页码page.setPageNo(pageNo);//获取每页数量page.setPageSize(pageSize);//获取总数量Integer pageTotalCount = bookDao.queryForPageTotalCount();page.setPageTotalCount(pageTotalCount);//获取总页数(如果数量取余页容量不为0,则总页码+1)Integer pageTotal = pageTotalCount / pageSize;if(pageTotalCount % pageSize != 0){pageTotal++;}page.setPageTotal(pageTotal);//获取每页数据int begin = (page.getPageNo() - 1) * pageSize;List<Book> items = pageDao.queryForBookItems(begin,pageSize);page.setItems(items);return page;
}
2.2.3 BookDao
public Integer queryForPageTotalCount(){var sql = "select count(*) from t_book";Number count = (Number) queryForSingleValue(sql);return count.intValue();
}public List<T> queryForBookItems(int begin,int pageSize){var sql = "select * from t_book limit ?,?";return queryForList(Book.class, sql, begin, pageSize);
}
3.Cookie
3.1 定义
- Cookie是一个对象,是服务端通知客户端保存键值对的一种技术。
- 客户端有了Cookie之后,每次请求都会发给服务端。
- Cookie的大小不能超过4kb。
3.2 使用
3.2.1 Cookie的创建
1.代码
public class CookieServlet extends BaseServlet {public void createCookie(HttpServletRequest req,HttpServletResponse resp){//1.创建Cookie对象Cookie cookie = new Cookie("key1","value1");//2.通知客户端保存Cookieresp.addCookie(cookie);}
}
2.底层原理

3.2.2 Cookie的获取
1.代码实现
①获取全部Cookie
public class CookieServlet extends BaseServlet {public void getCookie(HttpServletRequest req,HttpServletResponse resp){//1.获取Cookie数组Cookie[] cookies = req.getCookies();for(Cookie cookie : cookies) {//getName()方法获取键resp.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "]");}}
}
②根据Cookie名获取指定Cookie
public class CookieServlet extends BaseServlet {public void getCookieByName(HttpServletRequest req,HttpServletResponse resp){//1.获取Cookie数组Cookie[] cookies = req.getCookies();Cookie iWantCookie = null;for(Cookie cookie : cookies) {//2.遍历数组,使用getName()方法获取键,判断是否和要取的Cookie相同if("key1".equals(cookie.getName())){iWantCookie = cookie;}}if(iWantCookie != null){resp.getWriter().writer("找到了Cookie!");}}
}
2.底层原理

3.2.3 Cookie的修改
1.代码实现
①方案一:创建一个和要修改的值同名的Cookie,用新的Cookie替换
public class CookieServlet extends BaseServlet {public void updateCookie(HttpServletRequest req,HttpServletResponse resp){Cookie cookie = new Cookie("key1","newValue1");resp.addCookie(cookie);resp.getWriter().writer("key1的Cookie的值已修改");}
}
②方案二:找到原有的Cookie,通过修改值的方法修改Cookie
public class CookieServlet extends BaseServlet {public void updateCookie(HttpServletRequest req,HttpServletResponse resp){Cookie cookie = CookiesUtils.findCookie("key2",req.getCookies());if(cookie != null){cookie.setValue("newValue2");resp.addCookie(cookie);resp.getWriter().writer("key1的Cookie的值已修改");}}
}
3.2.4 Cookie的生命控制
Cookie的生命控制指的是如何管理Cookie什么时候被销毁。
setMaxAge(int expiry):设置Cookie的最大生存时间,以秒为单位
- 正数:表示在指定秒数后过期
- 负数:表示浏览器一关,Cookie就会被删除,默认值是-1
- 0:表示马上删除Cookie
3.2.5 Cookie有效路径Path的设置
Cookie的path属性可以有效过滤哪些Cookie可以发送给服务器,那些不发送。
path属性通过请求的地址来进行有效的过滤。
setPath()方法。
CookieA path=/工程路径
CookieB path=/工程路径/abc
请求地址如下:
http://localhost:8080/工程路径/a.html
CookieA发送,CookieB不发送
http://localhost:8080/工程路径/abc/b.html
CookieA,CookieB都发送
4.Session
4.1 定义
- Session是一个接口。
- Session就是一个会话,它是用来维护一个客户端和服务器之间关联的一种技术。
- 每个客户端都有自己的一个Session会话。
- Session会话中,我们经常用来保存用户的登录信息。
4.2 使用
4.2.1 Session的创建和获取
request.getSession():第一次调用方法时是创建Session会话,之后调用都是获取前面创建的Session绘画。
Session.isNew():判断是否是新创建的Session。true/false
Session.getId():每个会话都有一个唯一的ID,调用该方法返回sessionID。
2.代码实现
public class SessionServlet extends BaseServlet {public void createSession(HttpServletRequest req,HttpServletResponse resp){HttpSession session = req.getSession();boolean isNew = session.isNew();String id = session.getId();resp.getWriter().write("得到的session,它的id是:"+ id + "");resp.getWriter().write("这个Session是否是新创建的:"+ isNew + "");}
}
4.2.2 Session的数据存取
1.setAttribute
public class SessionServlet extends BaseServlet {public void setAttribute(HttpServletRequest req,HttpServletResponse resp){req.getSession().setAttribute("key1","value1");}
}
2.getAttribute
public class SessionServlet extends BaseServlet {public void getAttribute(HttpServletRequest req,HttpServletResponse resp){Object key1 = req.getSession().getAttribute("key1");}
}
4.2.3 Session的生命控制
(1)public void setMaxInactiveInterval(int interval) 设置session的超时时间(以秒为单位),超过指定的时常,Session就会被销毁。
正数:超时时长
负数:永不超时
(2)public int getMaxInactiveInerval() 获取session的超时时间
(3)Session默认的超时时长为:30分钟
因为在tomcat服务器的配置文件web.xml中默认有以下配置,表示配置了当前Tomcat服务器下所有的Session超时配置默认时长为30分钟。
<session-config><session-timeout>30session-timeout>
session-config>
在项目的web.xml文件中可以配置自己项目的默认Session超时时长。
(4)public void invalidate():让当前Session会话马上超时无效
(5)超时时长的概念

4.3 浏览器和Session之间关联的技术内幕
Session技术底层是基于Cookie技术实现的。

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
