Java面试题-day17 Servlet

Servlet

1) HttpServlet中的方法

doGet()/doPost()方法
通过覆盖HttpServlet类中的doGet()方法,可以处理浏览器端发送过来的GET请求
post是一种邮寄的方式,在浏览器的地址栏不显示提交的信息,但是这种方式传送的数据是没有限制的;
get是一种手把手的提交到服务器上,最大的信息量是1K,而且提交的信息显示在浏览器上。
init()
在第一次调用servlet时,会创建servlet实例,在创建这个实例时,会调用HttpServlet中的init()方法(这个方法只会被调用一次)
service()
当客户端有一个对servlet的请求发送过来,则服务器会产生一个新的线程,并让它调用servlet的service()方法,service()会根据收到的客户端请求类型,决定调用doGet()还是doPost()方法
destroy()
在删除servlet实例之前,服务器会先调用destroy()方法

2) 什么是ServletContext?它由谁创建?

当Servlet容器启动时,它会部署并加载所有的web应用。当web应用被加载时,Servlet容器会一次性为每个应用创建Servlet上下文(ServletContext)并把它保存在内存里。Servlet容器会处理web应用的web.xml文件,并且一次性创建在web.xml里定义的Servlet、Filter和Listener,同样也会把它们保存在内存里。当Servlet容器关闭时,它会卸载所有的web应用和ServletContext,所有的Servlet、Filter和Listner实例都会被销毁。
从Java文档可知,ServletContext定义了一组方法,Servlet使用这些方法来与它的Servlet容器进行通信。

3) Servlet生命周期

 当客户端第一次向web服务器提出一个对servlet的请求时,web服务器会创建一个该servlet的实例,并调用init()方法。如果当web服务器中已存在一个servlet实例,则直接使用此实例,然后再调用service()方法,service()方法根据客户端的请求方式决定调用对应的doXXX()方法,当servlet从web服务器中删除时,web服务器会调用servlet的destroy()方法

4) Forward与sendRedirect区别

forward是服务器端的转向而redirect是客户端的跳转。
使用forward浏览器的地址不会发生改变。而redirect会发生改变。
Forward是一次请求中完成。而redirect是重新发起请求。
Forward是在服务器端完成,而不用客户端重新发起请求,效率较高。

5) MVC设计模式

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
最简单的、最经典就是Jsp(view) +Servlet(controller) + JavaBean(model)

在这里插入图片描述
1、当控制器收到来自用户的请求
2、控制器调用JavaBean完成业务
3、完成业务后通过控制器跳转JSP页面的方式给用户反馈信息
传统MVC模式问题
1、所有的Servlet和Servlet映射都要配置在web.xml中,如果项目太大,web.xml就太庞大,并且不能实现模块化管理。
2、Servlet的主要功能就是接受参数、调用逻辑、跳转页面,比如像其他字符编码、文件上传等功能也要写在Servlet中,不适合。
3、接受参数比较麻烦(String name = request.getParameter(“name”),User user=new User user.setName(name)),不能通过model接收,只能单个接收,接收完成后转换封装model.
4、跳转页面方式比较单一(forword,redirect),并且当我的页面名称发生改变时需要修改Servlet源代码.

现在比较常用的MVC框架有:

Struts2
Spring MVC
SpringBoot(推荐)

Filter与listener

  1. Filter接口中的方法
     void init(FilterConfig filterConfig) throws ServletException
    过滤器初始化是在启动容器(Tomcat)时自动初始化

 void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
如果过滤器要将内容传递到目的地,则需要FilterChain,将请求继续向下转发。
chain.doFilter(request,response) ;
过滤器会执行两次:FilterChain之前执行一次,之后再执行一次

 void destroy()
在标准Servlet中的doGet或doPost方法中,传递的参数为HttpServletRequest、HttpServletResponse
在过滤Servlet中的doFilter中传递的是ServletRequest、ServletResponse
在这里插入图片描述

1、说一说Servlet的生命周期?★★★★★ 答: servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。 这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 2、servlet的生命周期 答: web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。 通过调用service()方法实现,根据请求的不同调用不同的do***()方法。 结束服务,web容器调用servlet的destroy()方法。 3、Servlet的基本架构 public class ServletName extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } 4、什么情况下调用doGet()和doPost()? 答:Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。 5、如何现实servlet的单线程模式★★ 答: 面试中会遇到! 6、页面间对象传递的方法 答:request,session,application,cookie等 7、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 答:JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是类servletServlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。 8、四种会话跟踪技术(重要考点)★★★★★ 答:会话作用域ServletsJSP 页面描述 page是代表与一个页面相关的对象和属性。 一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。 这既包括 servlet 又包括被编译成 servlet 的 JSP 页面。 request是代表与 Web 客户机发出的一个请求相关的对象和属性。 一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)。 session是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求。 application是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爪哇小白2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值