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 设计分析

  1. 由分页的视图分析出的对象模型Page类
    (1)pageNo                         当前页码
    (2)pageSize                       每页显示数量
    (3)pageTotal                       总页码
    (4)pageTotalCount             总记录数
    (5)item                                当前页数据
  2. 实现分析
    (1)pageNo:由客户端传入
    (2)pageSize:有两种方式 ①由客户端传入 ②由页面布局决定
    (3)pageTotalCount:由Sql语句求得
    (4)pageTotal:总记录数/每页显示数量,注意如果取余不等于0要+1
    (5)item:由Sql语句得到     SELECT * FROM 表名 limit begin,pagesize
    begin:(pageNo-1)*pageSize
  3. 实现方案
    (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 定义

  1. Cookie是一个对象,是服务端通知客户端保存键值对的一种技术。
  2. 客户端有了Cookie之后,每次请求都会发给服务端。
  3. 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 定义

  1. Session是一个接口。
  2. Session就是一个会话,它是用来维护一个客户端和服务器之间关联的一种技术。
  3. 每个客户端都有自己的一个Session会话。
  4. 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技术实现的。
在这里插入图片描述


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部