2019.5.12学习周报

继续Servlet

1、与属性相关的方法

  1. 方法:
  • Object getAttribute(String name);
    获取指定的属性
  • Enumeration getAttributeNames();
    获取所有属性名字组成的Enumeration对象
  • boolean removeAttribute(String name);
    移除属性
  • void setAttribute(String name,Object o);
    设置属性
  1. pageContext、request、session、application对象都有这些方法,这四个对象也称之为域对象
    • pageContext属性的作用域仅限于当前JSP页面
    • request属性的作用域仅限于同一个请求
    • Session属性的作用域仅限于一次会话:浏览器打开直到关闭称之为一次会话
    • application属性的作用域仅限于当前Web应用,是范围最大的属性

2、绝对路径和相对路径

servlet中,所有路径的配置都要用绝对路径。 什么是绝对路径,就是以“/”开头的路径(开发中就这样理解)。 实际开发中,“/”所代表的含义不同,但主要分以下两种情况:

1. servlet内部配置路径
- web.xml中servlet配置的路径
	前面需要加“/”来代表应用名称
- forward转发路径(不包含redirect重定向)
	需要加“/”来代表应用名称
总之,在应用的内部,“/”代表应用名称
2. 页面配置路径

对客户端的浏览器而言,它认识的只有站点,也就是说,我们的jsp页面,“/”代表的是站点名。所以在“/”后需要添加上我们应用的名称才能正确的访问到。
- form的action路径配置
需要加“/应用名/应用内部路径名”(这里要搞清楚,应用内部的路径名不包括web文件夹这一层,这一层属于应用默认的页面文件的路径前缀)
- 页面资源引用(css,js,图片等)
同上
- jsp/servlet的重定向
很明显,只要和页面打交道的,“/”都代表站点名,需要在后面添加应用名以区分是哪个应用的请求。

基本上可以总结为两点:
1. servlet中所有访问路径都要用绝对路径“/”开头
2. 页面中“/”表示站点路径(在客户端展现出来,只知道它的站点路径,所有需要“/”后追加应用名来区分属于站点下的哪个应用),其他地方的“/”表示应用路径(在服务端的应用程序内调用,肯定是相对于应用的路径啦)

3、JavaBean

JavaBean的作用:
  1. 减轻JSP的复杂度(将Java代码封装,JSP中只进行调用)
  2. 提高代码复用
JavaBean就是一个Java类,但满足以下两点要求:
  1. 类使用public修饰,并且有public修饰的无参构造方法
  2. 所有属性都是private的,并且提供了get(或is)和set方法
在使用层面,JavaBean分为两类:
  1. 封装业务逻辑的JavaBean
  2. 封装数据的JavaBean
    对应于数据库中的一张表

4、MVC设计模式

  • M:Model,模型:一个个功能。用JavaBean实现。
  • V:View,视图:用于展示以及与用户交互。使用HTML、css、jsp、jquery等前端技术实现。
  • C:Controller,控制器:接受请求,将请求跳转到模型进行处理;模型处理完毕后,再将处理的结果返回给请求的来源。用servlet实现。
    MVC设计模式

5、三层架构

与MVC设计模式的目标一致:都是为了降低耦合、提高代码复用;二者的区别是对项目理解的角度不同。

三层组成:
  1. 表示层(USL:User Show Layer):视图层
    • 前台:对应于MVC中的View,用于和用户交互,界面显示
      JSP、JS、HTML、CSS、JS、jQuery等web前端技术 代码位置:web包
    • 后台代码:对应于MVC中的Controller,用于控制跳转,调用业务逻辑
      Servlet(sprintMVC、等),位于xxx.servlet包中。
  2. 业务逻辑层(BLL,Business Logic Layer):Servce层
    • 用于接收表示层的请求,调用数据访问层
    • 用于组装数据访问层,带有逻辑的增删改查
      一般xxx.Servce
  3. 数据访问层(DAL,Data Access Layer):Dao层
    • 单纯的进行增删改查的对数据的操作( 原子性操作)
      一般位于xxx.dao包
      三层架构
项目目录

src
dao层用于存放关于数据库的操作类
entity层用于存放数据库中表所对应的实体对象
service层用于存放后台中处理业务逻辑的代码
servlet层用于放置请求和响应的处理,也就是Servlet

web
Web部分我没有进行分层

6、JSP Cookie对象

存在于客户端,不是内置对象,而是由服务端生成并发送给客户端保存的。
相当于本地缓存的作用:客户端(text.txt)->服务端(text.txt)

  • Cookie:key — value(javax.servlet.http.Cookie)
cookie api
- getName() 获得名称,cookie中的key
- getValue() 获得值,cookie中的value
- setValue(java.lang.String newValue)  设置内容,用于修改key对应的value值。
- setMaxAge(int expiry) 设置有效时间【】
- setPath(java.lang.String uri)  设置路径【】
  • 服务端准备Cookie给客户端
    response.addCookie(Cookie cookie)
  • 页面跳转或重定向
  • 客户端获取Cookie(一次性获取全部的Cookie)
    Cookie[] request.getCookies();
工作流程:
  1. servlet创建cookie,保存少量数据,发送浏览器。
  2. 浏览器获得服务器发送的cookie数据,将自动的保存到浏览器端。
  3. 下次访问时,浏览器将自动携带cookie数据发送给服务器。
cookie操作
  1. 创建cookie:new Cookie(name,value)
  2. 发送cookie到浏览器:HttpServletResponse.addCookie(Cookie)
  3. servlet接收cookie:HttpServletRequest.getCookies() 浏览器发送的所有cookie
cookie特点
  1. 每一个cookie文件大小:4kb , 如果超过4kb浏览器不识别
  2. 一个web站点(web项目):发送20个
  3. 一个浏览器保存总大小:300个
  4. cookie 不安全,可能泄露用户信息。浏览器支持禁用cookie操作。
  5. 默认情况生命周期:与浏览器会话一样,当浏览器关闭时cookie销毁的。—临时cookie

7、JSP Session对象

Session对象中文为会话
整个从浏览器打开到关闭的过程中(不是指网页的打开关闭),都属于一次会话

执行机制:

客户端第一次请求一个服务器时,服务端会产生一个session对象用于保存一些信息,并产生一个sessionid,在cookie中打包一份JSESSIONID与sessionid相同,cookie传给客户端后与服务端的sessionid一一对应。
客户端第二次请求该服务器(在同一个会话中),服务端会先判断客户端是否有JSESSIONID,若果有,找到服务端中的相同的sessionid,对应的session对象找出所存储的数据。

API:
• String getId(); 获取sessionid
• boolean isNew();判断是否是第一次访问
• boid invalidate();使session失效(退出登录,注销)
• void setAttribute(String name, Object value);
• Object getAttribute(String name);
• boid setMaxInactiveInterval(s);设置最大有效非活动时间

猜你喜欢

转载自blog.csdn.net/Benjalin_76_84/article/details/90144546