1.自定义 servlet 的三种方式,及区别?

- 方式一:编写一个类去实现Servlet接口(必须重写Servlet接口里面所有的抽象方法)
- 方式二:编写一个类去继承GenericServlet抽象类(重写生命周期的service方法(抽象法))GenericServle抽象类它实现了Servlet接口,还实现了ServletConfig接口(这个接口中提供了一个getServletContext方法)可以在编写一个类中直接调用getServletContext方法就可以获得ServletContext对象。(开发中不常用)
- 方式三:编写一个类去继承HttpServlet抽象类(没有抽象方法!根据页面的提交方式决定重写doGet或者doPost方法,也可以重写service方法,因为servlet执行顺序先初始化,执行service方法在执行get或post方法)
2.写出 Servlet 中的三大作用域,并分别说明各自的特点?
- rerequest
解释:它表示一个请求,只要发出一个请求就会创建一个request,
作用域:仅在当前请求中有效。
用处:常在同一服务器件同一请求不同页面之间的参数传递,常用于表单控件值传递。
方法:request.setAttribute()-修改,request.getAttribute()-获取,request.removeAttribute()-删除 - session
解释:服务器会为每个会话创建一个session对象,所以session中的数据可供当前会话中所有servlet共享。
会话:用户打开浏览器会话开始,直到关闭浏览器会话才会结束,一次会话期间只会创建一个session对象。
用处:常用于wep开发中登陆验证界面(当用户登陆成功后浏览器分配其一个session键值对。)
方法:session.setAttribute()-修改,session.getAttribute()-获取,session.removeAttribute()-删除
获得session对象的方法:
(1).在servlet中:HttpSession=requset.getSession();
(2).由于session属于jsp的九大内置对象之一,也可以直接使用,例:<%session.setAttribute(“name”,“admin”)%>
session销毁:
(1).session超时
(2).客户端关闭后,
(3)调用session.invalidate(); - .Application(ServletContext)
作用范围:所有用户都可以获得此信息,此信息在整个服务器上被保留,Application属性范围值,只要设置一次,则所有网页窗口都可以获得数据。
获取方法:ServletContext app1=this.getServletContext();
https://blog.csdn.net/qq_42527923/article/details/81192478
3.filter 和 servlet 在生命周期上的区别 
Servlet1)Servlet通过调用init()方法进行初始化;该方法只会被调用一次,会在创建Servlet实例时被调用;而Servlet创建于第一次调用该Servlet的URL时,也可以指定为在服务器启动时被加载2)Servlet调用service()方法处理客户端的请求;该方法调用次数由客户端请求次数决定,是在Servlet接收到用户请求时被调用。service()方法根据客户端请求类型(POST、GET、PUT、DELETE)来分别调用doPost()、doGet()、doPut()、doDelete()等方法3)Servlet调用destroy()方法结束;该方法只会被调用一次,是在Servlet生命周期结束时被调用。方法被调用后,该Servlet会被标记为垃圾回收4)Servlet被JVM垃圾回收器回收。Filter:1)调用init()方法初始化该方法只会被调用一次。Web应用程序启动时,创建Filter实例对象,并调用init()方法,读取web.xml配置,完成对象的初始化。2)调用doFilter()方法拦截请求该方法调用次数根据用户请求决定。该方法能够完成实际的过滤操作3)调用destroy()方法销毁当Web应用移除或者服务器停止时,调用destroy()方法进行销毁。
4.表单提交的 2 种方式?及区别?
- GET请求:请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的 是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。 POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数 据。因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。
- 传输数据的大小 在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器 和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行 限制,Apache、IIS都有各自的配置。
5.jsp 有哪些内置对象? 作用分别是什么?
- request对象:request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
- response对象:response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。所属类型:HttpServletResponse
- session对象:session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。类型为HttpSession
- application对象:application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量” ServletContext 区别: request:单次请求 session:浏览器访问期间(会话期间) application:服务器启动期间,所存的数据可以跨浏览器
- out 对象:用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时, 可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要 及时关闭输出流。
- pageContext对象:作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、 session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
- config对象:的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取 一个config对象。当一个Servlet 初始化时,容器把某些信息通过config对象传递给这个 Servlet。 开发者可以在 web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
- page对象:代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变 量,类似于Java编程中的 this 指针。
- exception对象:作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的 JSP页面中使用该对象将无法编译JSP文件。
在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP 页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误 页面中,然后在错误页面中处理相应的 exception 对象。
(1)先在可能发生错误的页面中添加errorPage属性:
(2) 在error.jsp页面中设置isErrorPage=“true” 的属性 (使用exception对象之前,需要先将当前页面设置成错误页面)
jsp的作用域: pageContext -> request -> session -> application
当前页面 单次请求有效 当前会话期间 服务器运行期间有效
6.谈谈你对 MVC 的理解
Web MVC中的M(模型)-V(视图)-C(控制器)概念和标准MVC概念一样,我们再看一下Web MVC标准架构,如下图所 示:

在Web MVC模式下,模型无法主动推数据给视图,如果用户想要视图更新,需要再发送一次请求(即请求-响应模 型)。
M:(Model) 模型 : 应用程序的核心功能,管理这个模块中用的数据和值(bean,dao);
JavaBeans :
是Java中一种特殊的类(换言之:JavaBean就是一个Java类). 一个Java类满足以下要求,则可称为一个JavaBean
a. public修饰的类,提供public 无参构造方法
b. 所有属性 都是private
C. 提供getter和setter方法 从使用层面来看,
JavaBean分为2大类:
a.封装业务逻辑的JavaBean(eg:LoginDao.java 封装了登录逻辑)
b.封装数据的JavaBean(实体类:eg:Student.java Vadio.java 。往往对应于数据库中的一张表,即数据库
中有个Student表,项目中就有个Student.java类)通常:表名=类名,列名=属性名
JavaBean是一个可以重复使用的组件,通过编写一个组件来实现某种通用功能,“一次编写、任何地方执行、任何地方重 用”。
V(View )视图: 视图提供模型的展示,管理模型如何显示给用户,它是应用程序的外观;(jsp/html)
C(Controller)控制器: 对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽。 (servlet/service) MVC用于将web(UI)层进行职责解耦
7.表单的 action 属性,method 属性,name 属性值有什么作 用?
- action:用来提交表单要提交到的页面或者路径
- method:用来设置表单的提交方式是get、post
- name:可以在跳转到的页面或者servlet中通过name值来获取表单中的内容
8.同步与异步的区别
在Javaweb中,同步是指用户每发送一次请求都需要刷新整个页面,而通过ajax实现异步之后,不用刷新整个页面,之后在局部进行更新,比如微博点赞,点赞后点赞数加一,但是并没有进行刷新页面
9.JSP 请求是如何被处理的
当浏览器访问jsp文件时,服务器发现后缀为.jsp,它会根据路径找到index.jsp文 件,会将index.jsp翻译成index_jsp.java文件,对这个java文件进行编译,产生一个index_jsp.class文件,将class 文件加载运行。将JSP翻译成java文件,它是将JSP中的所有的HTML代码通过流进行输出,也就是说最终翻译成 class,被虚拟机加载,它本质是servlet,它就会往回响应,响应回去就是把JSP中的HTML代码以流的方式写回浏 览器。所以在JSP中展示出了HTML代码
10.说说你对 Cookie 与 Session 技术的理解?
(1) Cookie数据保存在客户端,Session数据保存在服务器端。
(2) Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的 SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。
而SessionID这一数据则是保存到客户 端,用Cookie保存的,用户提交页面时,会将这一SessionID提交到服务器端,来存取Session数据。这一过程,是 不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。
(3) Cookies是属于Session对象的一种。但有不同,Cookies不会占服务器资源,是存在客服端内存或者一个 Cookie的文本文件中;而Session则会占用服务器资源。所以,尽量不要使用Session,而使用Cookies。但是我们 一般认为Cookie是不可靠的,Cookies是保存在本机上的,但是其信息的完全可见性且易于本地编辑性,往往可以 引起很多的安全问题Session是可靠地。但是目前很多著名的站点也都用Cookie。

















