Servlet

1.Servlet是什么

  • Servlet是java语言编写的运行在服务器端的程序
  • Servlet是javaEE规范之一,规范就是接口
  • Servlet是JavaWeb三大组件之一,三大组件分别是:Servlet,Filter,Listener

2.Servlet干什么

Servlet接受客户端发来的请求,并响应数据给客户端

 

3.servlet的声明周期

  1. 加载:容器通过类加载器使用Servlet类对应的文件来加载Servlet
  2. 创建:通过调用Servlet的构造函数来创建一个Servlet实例
  3. 初始化:通过调用Servlet的init()方法完成初始化,在向客户端提供服务之前调用
  4. 处理请求:Servlet创建之后就可以处理请求,当有新的客户端请求时,Web容器都会创建一个新的线程来处理该请求,接着调用Servlet的Service()方法来响应客户端的请求
  5. 销毁:容器销毁Servlet之前调用destroy()方法,让Servlet释放资源

初始化阶段

Servlet容器加载Servlet,加载完成后,Servlet容器会创建一个Servlet实例并调用init()方法初始化,只会调用一次初始化方法

Servlet容器会在一下几种情况装载Servlet

  • 在Servlet容器启动后,客户首次向Servlet发送请求
  • Servlet类文件被更新后,重新装载

处理客户端请求阶段

每收到一个客户端请求,服务器会产生一个新的线程去处理,对于用户的Servlet请求,Servlet容器会根据不同的请求类型去调用不同的doXXX()方法

终止阶段

Web应用被终止时,或者Servlet容器终止运行,Servlet容器会调用destroy()方法

4.Servlet工作原理

客户发送一个请求,Servlet 调用 service() 方法对请求进行响应,service() 方法会对请求的方法进行匹配,进入相应的逻辑层,完成请求的响应。

但是 Servlet 接口和 GenericServlet 接口中没有 doGet(),doPost() 等方法,HttpServlet 中定义了这些,但是返回的都是Error 信息,所以每次定义 Servlet 都要重写这些方法。

Sertvlet 和 GenericServlet 是不特定于任何协议的,而 HttpServlet 是特定于 Http协 议的,所以 HttpServlet 中的 service()方法中将 ServletRequest,ServletResponse 强转为 HttpRequest 和 HttpResponse,最后调用自己的 service 方法去完成响应。

5.转发和重定向的区别

总结:转发是服务器行为,重定向是客户端行为。

转发-Forword

通过 RequestDispatcher 对象的 forward(HttpServletRequest request,HttpServletResponse response)方法实现的;RequestDispatcher 可以通过 HttpServletRequest 的 getRequestDispatcher() 方法获得。

request.getRequestDispatcher("login_success.jsp").forward(request, response);

重定向-Redirect

重定向是利用服务器返回的状态码来实现的,客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过 HttpServletRequestResponse 的 setStatus(int status) 方法设置状态码。如果服务器返回 301 或者 302,则浏览器会到新的网址重新请求该资源。

常用状态码:

  • 200(OK):表示服务器已经成功接受请求,并将返回客户端所请求的最终结果
  • 301(Moved Permanently):永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
  • 302(Found):临时移动,与301类似,但资源只是临时被移动,客户端应继续使用原有 URI
  • 400(Bad Request):客户端请求的语法错误,服务器无法理解
  • 403(Forbidden):服务器理解请求客户端的请求,但是拒绝执行此请求
  • 404(Not Found):请求失败,客户端请求的资源没有找到或者是不存在
  • 500(Internal Server Error):服务器内部错误,无法完成请求
  • 502(Bad Gateway):网关错误,作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
  • 503(Service Unavailable):服务不可用,由于超载或系统维护,服务器暂时的无法处理客户端的请求
     

从地址栏显示来说

  • forward 是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。
  • redirect 是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL。
     

从数据共享来说

  • forward:转发页面和转发到的页面可以共享request里面的数据
  • redirect:不能共享数据


从运用地方来说

  • forward:一般用于用户登陆的时候,根据角色转发到相应的模块
  • redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等


从效率来说

  • forward:效率高
  • redirect:效率低

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值