javaweb

servlet工作原理

Servlet运行的详细步骤

step1 浏览器依据IP建立与容器的连接

step2 浏览器请求数据打包

step3 容器解析请求数据包,封装对象

step4 容器依据路径找到Servlet创建对象

step5 容器用Servlet对象的service方法

step6 容器将响应打包发给浏览器

step7 浏览器取出结果,生成页面

什么是C/S三层架构

C/S(Client/Server)结构分为客户端和服务端两部分。服务端存储数据库内容,并在客户端上安装相应软件。C/S 结构按照架构分为双层结构和三层结构。

例如我们电脑上的软件和手机上的APP都是C/S结构的

C/S的三层架构分别是 表示层、业务逻辑层、数据访问层

表示层就是与用户交互的界面,用于接收用户的数据和展示服务器响应的数据,通常不包括系统的业务逻辑,仅仅与页面有关系,例如图片轮播、分页显示

业务逻辑层: 负责接收前端的请求,并向数据访问层发送信息获取数据,Servlet和Controller就是负责这一部分的

数据访问层: 系统的持久层,负责对数据库的读取及管理,DAO层

什么是B/S三层架构

B/S架构是浏览器到服务器,由于网络的快速发展,B/S 结构的功能越来越强大。这种结构可以进行信息分布式处理,可以有效降低资源成本,提高设计的系统性能。

B/S分为:浏览器端、服务器端、中间件

浏览器端: 即用户使用的浏览器,用户通过浏览器界面向服务器端发送请求,并将响应展示给用户

**服务器端:**提供数据服务,操作数据,然后把将结果返回中间层,结果显示在系统界面上。

**中间件:**这是运行在浏览器和服务器之间的。这层主要完成系统逻辑,实现具体的功能,接受用户的请求并把这些请求传送给服务器,然后将服务器的结果返回给用户,浏览器端和服务器端需要交互的信息是通过中间件完成的。

C/S和B/S的关系

C = Client, S = Server。C/S 架构即“客户端-服务器” 架构。这里的“客户端”可以是有 GUI (图形用户界面)的定制软件,也可以是浏览器,甚至可以是通过 SSH 访问服务器的命令行脚本。只要是客户端通过访问服务器调取计算或者存储资源的,统统都是 C/S 架构。所谓的 Browser-Server 架构其实是 C/S 架构的一种特殊的实现形式,而不是其对立面。

B/S是C/S的一个子集

什么情况下出现状态码404、405、500、302的提示?

404

Not Found

服务器无法找到被请求的资源,例如请求的资源路径出错

405

405 错误一般指请求 method not allowed 错误,本文列出了出现该错误的可能原因。

出现 405 错误的可能原因有:

  • POST 类请求出现 302 跳转,302 跳转的时候会更改请求方法此时服务端可能不能识别,则报 405 错误。

  • 请求服务端直接校验 Method,对应 Response Header 中会有 Allow =GET 的信息字样。

  • 负载均衡或者 Web Server 上做转发的时候,修改了请求 Method 导致后端无法识别。

500

Internal Server Error

请求未完成。服务器内部遇到不可预知的错误

一般是服务器后台错误出现内部错误,例如代码写错了

302

一般出现 Found,请求临时转移到新地址。返回新地址。302是临时转移,301是永久转移

可以简单的理解为该资源原本确实存在,但已经被临时改变了位置;换而言之,就是请求的资源暂时驻留在不同的URI下,故而除非特别指定了缓存头部指示,该状态码不可缓存。

当一个网站或者网页24-48小时内临时移动到一个新的位置,这时候就要进行302跳转

谈谈重定向与转发的区别联系?

联系

重定向和转发都是一种页面跳转的方式

区别

区别: 1. 从作用上来谈

转发的话是服务器内部的资源跳转,servlet直接进行跳转到另外的servlet资源路径,tomact通过反射创建其字节码对象,tomact调用其service方法; 重定向的话是浏览器这边进行跳转,如果在所访问servlet资源中发现了重定向,然后response响应到浏览器,再让浏览器再访问具体的某个servlet资源路径

区别:2. 从具体操作上来谈

转发的话是先用request对象获取请求转发器,传入跳转的路径,然后再调用其forward方法传递请求响应对象,从而进行转发 重定向的话是用response对象设置好状态码302,然后设置响应头location,值就是跳转的路径

区别3

重定向在当前页面只能执行一次,如果进行了多次重定向,那么会指向最后个重定向,也就是说只能执行一次,转发在当前页面只能执行一次,如果进行了多次转发,则直接报错,如果想进行多次重定向或者转发的话,那要求转发或重定向到的资源下再写转发操作代码

区别4

重定向的话优先级非常低,只有在执行完当前方法内的代码后才会进行重定向,但是转发的话是直接就去转发,他不会等代码执行完然后再执行

区别5

转发的话只能转发到当前tomact服务器下部署的某个项目的资源,但是重定向的话可以访问其他服务器的资源

区别6

如果当前项目中有虚拟路径的话,那么转发的时候,如果我们用绝对路径简写的形式写,那么不需要加虚拟路径,因为虚拟路径是针对项目的,我们已经在项目里面了,加上会报错,重定向的时候如果我们用绝对路径简写的形式写,是需要加上虚拟路径的,当然如果区别6说的这都用相对路径来写的话没这事

jsp

九大内置对象

在JSP开发中,会频繁使用到一些对象。例如HttpSession, ServletContext, ServletContext, HttpServletRequet。如果我们每次要使用这些对象都去创建这些对象就显示非常麻烦。所以Sun公司设计JSP时,在JSP页面加载完毕之后就会自动帮开发者创建好这些对象,而开发者只需要直接使用这些对象调用方法即可,这些创建好的对象就叫内置对象!

内置对象名
类型

request

HttpServletRequest

response

HttpServletResponse

config

ServletConfig

application

ServletContext

session

HttpSession

exception

Throwable

page

Object(this)

out

JspWriter

pageContext

PageContext

四大域对象

用于数据共享, 保存数据 和 获取数据。

内置对象名
类型

pageContext

page域

request

request域

session

session域

application

context域

什么是相对路径,什么是绝对路径?

  • **相对路径:**以引用文件之网页所在位置为参考基础,而建立出的目录路径。因此,当保存于不同目录的网页引用同一个文件时,所使用的路径将不相同,故称之为相对。

  • **绝对路径:**以Web 站点根目录为参考基础的目录路径。之所以称为绝对,意指当所有网页引用同一个文件时,所使用的路径都是一样的。其实绝对路径与相对路径的不同处,只在于描述目录路径时,所采用的参考点不同。由于对网站上所有文件而言,根目录这个参考点对所有文件都是一样的,因此,运用以根目录为参考点的路径描述方式才会被称之为绝对路径。

最后更新于