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