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