javaweb基础概念笔记

一些概念

java对象

POJO(Plain Ordinary Java Object,简单Java对象)

POJO在不同环境、场合下有不同意义:

  • PO(Persistant Object,持久对象):数据库表在java中映射的对象
  • BO(Business Object,业务对象):业务层的Java对象
  • VO(View Object,视图对象):表现层的Java对象
  • DTO(Data Transfer Object,数据传输对象):在两个系统间传递数据,需要将POJO序列化,如RPC
  • JavaBean:遵循特定写法的java类,通常具有以下特征:
    • 属性私有
    • 实现getter和setter
    • 具有无参构造函数
    • 实现序列化
  • EJB(Enterprise JavaBean,企业级JavaBean):一组JavaBean的集合,组合起来实现某块业务的功能

架构分层

  • Model层:模型层,mvc中的model
  • Dao层:(Data Access Object,数据访问对象),封装数据库操作(CRUD),常用框架:Mybatis,hibernate,spring-data-jpa等
  • Service层:业务层,封装业务逻辑,调用dao层进行处理,如跨表查询,判断等问题
  • Controller层:控制层,用于接收请求,分发到具体service,调用service层方法,返回数据,封装响应页面返回给前端
  • View层:视图层,如jsp、模板(template)(前后端分离之后,view层就到前端去了)

Entity、Model、Domain的区别

  • Entity:实体,对应数据库表
  • Model:更接近业务,将entity进行处理
  • Domain:类似model,model主要是在mvc中提出来的概念,模块化的话称为domain更常见

Model会对Entity进行处理:如数据库存储性别用(1,2),Entity里面存储的是int型,经过转换封装成Model,再传给前端,避免前端做判断

Entity和Model在数据库中就相当于表和视图的关系,表存储可能会有很多无用的字段,所以在表上建立视图,用于频繁读取。

JPA

jpa(java persistent api,java持久化api)

http状态码

  • 1开头的归类为临时响应,并需要客户端继续请求
  • 2开头归类为请求成功
  • 3开头归类为重定向
  • 4开头归类为请求出错
  • 5开头归类为服务器问题

http常用的状态码及其对应的含义如下:

状态码 含义
100 客户应该继续发出请求
101 客户要求服务器根据请求转换HTTP协议版本
200 服务器响应正常。
201 提示知道新文件的URL
202 接受和处理、但处理未完成
203 返回信息不确定或不完整
204 请求收到,但返回信息为空
205 服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206 服务器已经完成了部分用户的GET请求
300 请求的资源可在多处得到
301 删除请求数据
302 在其他地址发现了请求数据
303 建议客户访问其他URL或访问方式
304 该资源在上次请求之后没有任何修改(这通常用于浏览器的缓存机制,使用GET请求时尤其需要注意)。
305 请求的资源必须从服务器指定的地址得到
306 前一版本HTTP中使用的代码,现行版本中不再使用
307 申明请求的资源临时性删除
400 无法找到请求的资源。
401 访问资源的权限不够。
402 保留有效ChargeTo头响应
403 没有权限访问资源。
404 需要访问的资源不存在。
405 需要访问的资源被禁止。
406 根据用户发送的Accept头,请求资源不可访问
407 访问的资源需要代理身份验证。
408 客户端没有在用户指定的时间内完成请求
409 对当前资源状态,请求不能完成
410 服务器上不再有此资源且无进一步的参考地址
411 服务器拒绝用户定义的Content-Length属性请求
412 一个或多个请求头字段在当前请求中错误
413 请求的资源大于服务器允许的大小
414 请求的URL太长。
415 请求资源不支持请求项目格式
416 请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417 服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
500 服务器内部错误。如代码执行异常
501 服务器不支持请求的函数
502 服务器暂时不可用,有时是为了防止发生系统过载
503 服务器过载或暂停维修
504 关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505 服务器不支持或拒绝支请求头中指定的HTTP版本

转发和重定向

解释一:转发是服务器行为,重定向是客户端行为

转发过程:客户浏览器发送http请求----》web服务器接受此请求–》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;
在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器–》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。
在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

解释二:重定向,其实是两次request,

第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

请求转发是服务器内部把对一个request/response的处理权,移交给另外一个
对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。

解释三:假设你去办理某个执照,

重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。

转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。

注:

转发或重定向后需要return避免代码往下执行。

连续发两次forward,会报错:Cannot forward after response has been committed