JavaWEB总结

目录

1.说下原生 jdbc 操作数据库流程?

2.HTTP有哪些请求方法?

3.如何解决跨域问题?

4.简述Get,Post请求的区别以及他们的传参方式?

5.servlet,filter,listener,interceptor之间的区别和联系?

6.JSP有哪些内置对象和动作?它们的作用分别是什么?

7.forward(请求转发)和redireet(重定向)的区别?

8.JSP中动态INCLUDE与静态INCLUDE 的区别?

9.什么是 xml,使用 xml 的优缺点,xml 的解析器有哪几种,分别有什么区别?

10.Session和Cookie的区别?

11.在单点登录中,如果 cookie 被禁用了怎么办?

12.什么是Ajax异步请求和同步请求?

13.简单说明下request、response、session、application之间的作用域及各自的运行机制?

14.请描述下cookie、sessionStorage、localStorage的区别?

15.关系数据库中连接池的机制是什么?

16.数据库连接池的原理。为什么要使用连接池?

17.什么是反射,反射能干嘛?

18.说几个开发中常见的异常?

19.HTTP 和 HTTPS 的区别?

20.说说事务的概念,在 JDBC 编程中处理事务的步骤?

21.JDBC 的脏读是什么?哪种数据库隔离级别能防止脏读?

22.Http 常见的状态码有哪些?

23.tomcat 容器是如何创建 servlet 类实例?

24.EL表达式的功能,为什么要用EL表达式?

25.什么要使用 PreparedStatement?

26.什么是幻读,哪种隔离级别可以防止幻读?

27.Servlet生命周期?

28.tomcat容器是如何创建servlet类实例?用到了什么原理?

29.谈谈你对 ajax 的认识?

30.说下jsonp 原理?

31.在JS中==和===的区别?

32.http的长连接和短连接区别?

33.描述Servlet调用过程?

34.简述Servlet生命周期?

35.HTTP协议的特点是什么 ?

36.请求乱码产生的原因?

37.如何来处理get请求产生的乱码?

38.如何处理响应乱码?

39.简述ServletContext生命周期?

         40.Session生命周期?

41.session的原理?

42.如何防止SQL注入攻击呢?

43.如何自己实现一个数据库连接池?

44.Filter的作用是什么?

45.Filter的生命周期?

46.Servlet的单例问题?

47.Servlet的多线程同步问题?

48.如何防止表单重复提交?

49.什么是web容器?

50.HTML和xml的区别?

51.Tomcat配置,部署优化?

52.事务有哪些特性?

53.Request和Session的取值区别,以及出现乱码的解决方式(不能在java代码中设置)?

54.对数据库连接池的理解?


1.说下原生 jdbc 操作数据库流程?

  • 第一步:Class.forName()加载数据库连接驱动;

    • 加载数据库连接驱动

  • 第二步:DriverManager.getConnection()获取数据连接对象;

    • 获取数据连接对象

  • 第三步:根据 SQL 获取 sql 会话对象,有 2 种方式 Statement、PreparedStatement ;

    • 根据 SQL 获取 sql 会话对象

  • 第四步:执行 SQL 处理结果集,执行 SQL 前如果有参数值就设置参数值 setXXX();

    • 执行 SQL 处理结果集

  • 第五步:关闭结果集、关闭会话、关闭连接。

    • 关闭结果集、关闭会话、关闭连接

2.HTTP有哪些请求方法?

  • HTTP请求的常用方法有:GET方法、POST方法、HEAD方法、PUT方法、DELETE方法、CONNECT方法、OPTIONS方法、TRACE方法。

3.如何解决跨域问题?

  • Jsonp 和 CORS

  • CORS 是一个 W3C 标准,全称是"跨域资源共享"(Cross-origin resource sharing)。CORS 需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE 浏览器不能低于 IE10。 它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源 使用的限制。整个 CORS 通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来 说,CORS 通信与同源的 AJAX 通信没有差别,代码完全一样。浏览器一旦发现 AJAX 请求跨 源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。 因此,实现 CORS 通信的关键是服务器。只要服务器实现了 CORS 接口,就可以跨源通信。 CORS 请求默认不发送 Cookie 和 HTTP 认证信息。如果要把 Cookie 发到服务器,一方面要服 务器同意,指定 Access-Control-Allow-Credentials 字段。另一方面,开发者必须在 AJAX 请求 中打开 withCredentials 属性。否则,即使服务器同意发送 Cookie,浏览器也不会发送。或者, 服务器要求设置 Cookie,浏览器也不会处理。

4.简述Get,Post请求的区别以及他们的传参方式?

  • get和post的区别首先:从本质上区别

    • 1.GET用于信息获取(查)

    • 2.POST表示可能修改变服务器上的资源的请求(增删改)

  • 再者:从表现形式上区别

    • 1.如果使用GET请求,需要传递参数时,只能通过URL传值

    • 2.如果使用POST请求,需要传递参数时,能够通过表单传值

5.servlet,filter,listener,interceptor之间的区别和联系?

  • 1.servlet:servlet 是一种运行服务器端的 java 应用程序

  • 2.filter:filter 是一个可以复用的代码片段,可以用来转换 HTTP 请求、响应和头信息

  • 3.listener:监听器,通过 listener 可以监听 web 服务器中某一个执行动作,并根据其要求作出相 应的响应。

  • 4.interceptor:是在面向切面编程的,就是在你的 service 或者一个方法,前调用一个方法,或 者在方法后调用一个方法。比如动态代理就是拦截器的简单实现 servlet、filter、listener 是配置到 web.xml 中,interceptor 不配置到 web.xml 中,struts 的拦截 器配置到 struts.xml 中。spring 的拦截器配置到 spring.xml 中。

  • 5.加载顺序 web.xml 的加载顺序是:context- param -> listener -> filter -> servlet

6.JSP有哪些内置对象和动作?它们的作用分别是什么?

  • 1、request对象:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。

  • 2、response对象:response对象包含了响应客户请求的有关信息。

  • 3、session对象:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。

  • 4、out对象:是向客户端输出内容常用的对象

  • 5、page对象:page对象就是指向当前JSP页面本身,有点象类中的this指针。

  • 6、application对象:application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。

  • 7、exception对象:exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。

  • 8、pageContext对象:pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext。

  • 9、config对象:config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)。

7.forward(请求转发)和redireet(重定向)的区别?

  • 本质区别:转发是服务器行为,重定向是客户端行为。

  • 重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源,传输的数据会 丢失。

  • 请求转发特点:一次强求,浏览器地址不变,访问的是自己本身的 web 资源,传输的数据不会 丢失

8.JSP中动态INCLUDE与静态INCLUDE 的区别?

  • 动态INCLUDE

    • 用法:<jsp:include page="included.jsp" flush="true" />

    • 说明:它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数,先编译之后再进行处理。

    • 原因:

      • 1、静态include的结果是把其他jsp引入当前jsp,两者合为一体。

      • 2、静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.而页面设置也可以借用主文件的.

  • 静态INCLUDE

    • 用法:<%@ include file="included.htm" %>

    • 说明:用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面,直接将内容先包含后处理。

    • 原因:

      • 1、动态include的结构是两者独立,直到输出时才合并( 看看jsp生成的java文件就可以知道了)。

      • 2、动态include的jsp文件独立性很强,是一个单独的jsp文件,需要使用的对象,页面设置,都必须有自己创建,当然,还好它和include它的页面的request范围是一致的。

9.什么是 xml,使用 xml 的优缺点,xml 的解析器有哪几种,分别有什么区别?

  • 1.xml 是一种可扩展性标记语言,支持自定义标签(使用前必须预定义)使用 DTD 和 XML Schema 标准化 XML 结构。

  • 2.优点:用于配置文件,格式统一,符合标准;用于在互不兼容的系统间交互数据,共享数据方便;

  • 3.缺点:xml 文件格式复杂,数据传输占流量,服务端和客户端解析 xml 文件占用大量资源且不易 维护Xml

  • 4.常用解析器有 2 种,分别是:DOM 和 SAX;

  • 5.主要区别在于它们解析 xml 文档的方式不同。使用 DOM 解析,xml 文档以 DOM 树形结构加载入内存,而 SAX 采用的是事件模型

10.Session和Cookie的区别?

  • 1.Cookie 是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务 器存储 cookie。 以后浏览器再给特定的 web 服务器发送请求时,同时会发送所有为该服务器存储的 cookie。

  • 2.Session 是存储在 web 服务器端的一块信息。session 对象存储特定用户会话所需的属性及配置 信息。 当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

  • Cookie 和 session 的不同点:

    • 1、无论客户端做怎样的设置,session 都能够正常工作。当客户端禁用 cookie 时将无法使用 cookie。

    • 2、在存储的数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象。

11.在单点登录中,如果 cookie 被禁用了怎么办?

  • 单点登录的原理是后端生成一个 session ID,然后设置到 cookie,后面的所有请求浏览器都 会带上 cookie,然后服务端从 cookie 里获取 session ID,再查询到用户信息。所以,保持登录 的关键不是 cookie,而是通过 cookie 保存和传输的 session ID,其本质是能获取用户信息的数 据。除了 cookie,还通常使用 HTTP 请求头来传输。但是这个请求头浏览器不会像 cookie 一样 自动携带,需要手工处理。

12.什么是Ajax异步请求和同步请求?

  • 1.同步:指发送一个请求,需要等待返回,然后才能够发送下一个请求zhi,有个等待过程;

  • 2.异步:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。 

  • 3.区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。

13.简单说明下request、response、session、application之间的作用域及各自的运行机制?

  • 作用域

    • 1.request:服务器获取用户请求; 其作用域为在当前页面有效

    • 2.response:服务器答复用户请求的资源;其作用域为在当前http请求中有效

    • 3.session:用户使用服务器开始到结束的过程; 其作用域为在当前会话中有效

    • 4.application:网站服务器启动到停止的过程;其作用域为在所有应用程序中有效,应用程序就是访问的网站服务器

  • 运行机制

    • 5.request就是一个HTTP客户端请求,处理request可能需要多个Servlet合作, 几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了

    • 6.response就是一个HTTP服务器答复,将servlet处理结果答复给客户端

    • 7.session与用户是一对一关系,一个web应用程序可以同时有多个用户在线,每个用户都有对应唯一的session,一个session就是一个用户从开始使用客户端到结束使用客户端的过程,这个过程可以有多个request和response。

    • 8.application与用户是一对多关系,类似于一个web应用程序对应于多个用户在线使用,每个web应用程序对应只有一个aaplication,在一起协同工作以完成某项任务的一组 ASP 文件称作应用程序(application)。ASP 中的 Application 对象用于将这些文件捆绑在一起。application就是网站服务器从启动到停止的过程。

14.请描述下cookie、sessionStorage、localStorage的区别?

  • 1.localStorage长期存储数据,浏览器关闭数据后不丢失;

  • 2.sessionStorage数据在浏览器关闭后自动删除;

  • 3.cookie是网站为了标识用户身份而存储在用户本地终端(Client Side)上的数据(通常经过加密)。cookie始终在同源的http请求中携带(即使不需要)都会在浏览器和服务器端间来回传递。session storage和local storage不会自动把数据发给服务器,仅在本地保存;

  • 4.存储大小:cookie数据大小不会超过4K,session storage和local storage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或者更多;

  • 5.有期时间:local storage存储持久数据,浏览器关闭后数据不丢失,除非自动删除数据。session storage数据在当前浏览器窗口关闭后自动删除。cookie 设置的cookie过期时间之前一直有效,即使窗口或者浏览器关闭;

15.关系数据库中连接池的机制是什么?

  • 前提:为数据库连接建立一个缓冲池。

    • 1:从连接池获取或创建可用连接

    • 2:使用完毕之后,把连接返回给连接池

    • 3:在系统关闭前,断开所有连接并释放连接占用的系统资源

    • 4:能够处理无效连接,限制连接池中的连接总数不低于或者不超过某个限定值。

  • 其中有几个概念需要大家理解:

    • 1.最小连接数是连接池一直保持的数据连接。如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费掉。

    • 2.最大连接数是连接池能申请的最大连接数。如果数据连接请求超过此数,后面的数据连接请求将被加入到等待队列中,这会影响之后的数据库操作。

    • 3.如果最小连接数与最大连接数相差太大,那么,最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。

    • 4.上面的解释,可以这样理解:数据库池连接数量一直保持一个不少于最小连接数的数量,当数量不够时,数据库会创建一些连接,直到一个最大连接数,之后连接数据库就会等待。

16.数据库连接池的原理。为什么要使用连接池?

  • 1.数据库连接是一件费时的操作,连接池可以使多个操作共享一个连接。

  • 2.数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数 量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我 们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过 连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发,测试及性能调整提供依据。

  • 3.使用连接池是为了提高对数据库连接资源的管理

  • 常用的数据库连接池:DBCP、C3P0、Druid

17.什么是反射,反射能干嘛?

  • 反射是:指程序可以访问、检测和修改它本身状态或行为的一种能力在java中就是:反射将加载后的类中的各个组成部分封装为其他对象;

  • 我们平时用反射主要做:

    • 1.获取类型的相关信息

    • 2.动态调用方法

    • 3.动态构造对象

    • 4.从程序集中获得类型

18.说几个开发中常见的异常?

  • 1.StackOverFlower(栈溢出错误)

  • 2.OutOfMemoryError(JVM内存空间不足)

  • 3.NullPointerException(空指针异常)

  • 4.ArrayIndexOutOfBoundsException (下标越界异常)使用数组,尤其是做for循环判断条件的时候,很容易引发的一个问题。

  • 5.UnkownTypeException (不知道类型异常) 有时候不强制转换,会报这个异常。

  • 6.ClassNotFoundException (类)报错是确实是常见的

19.HTTP 和 HTTPS 的区别?

  • 1.HTTP 协议传输的数据都是未加密的,也就是明文的,因此使用 HTTP 协议传输隐私信息非常不 安全,为了保证这些隐私数据能加密传输,于是网景公司设计了 SSL(Secure Sockets Layer) 协议用于对 HTTP 协议传输的数据进行加密,从而就诞生了

  • 2.HTTPS。 简单来说,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要 比 http 协议安全

  • 主要区别:

    • 1、https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。 2、http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。

    • 3、http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。

    • 4、http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、 身份认证的网络协议,比 http 协议安全

20.说说事务的概念,在 JDBC 编程中处理事务的步骤?

  • 1.事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务。

  • 事务处理步骤:

    • 1.conn.setAutoComit(false);设置提交方式为手工提交

    • 2.conn.commit()提交事务

    • 3.出现异常,回滚 conn.rollback()

21.JDBC 的脏读是什么?哪种数据库隔离级别能防止脏读?

  • 脏读:有一行数据刚更新,与此同时另一个查询读到了这个刚更新的值。

  • 防止脏读的隔离级别:

    • Read committed (读已提交)

    • Serializable (串行化)

    • Repeatable read (可重复读)

22.Http 常见的状态码有哪些?

  • 200 OK //客户端请求成功

  • 301 Moved Permanently(永久移除),请求的 URL 已移走。Response 中应该包含一个 Location URL, 说明资源现在所处的位置

  • 302 found 重定向

  • 400 Bad Request //客户端请求有语法错误,不能被服务器所理解

  • 401 Unauthorized //请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用

  • 403 Forbidden //服务器收到请求,但是拒绝提供服务

  • 404 Not Found //请求资源不存在,eg:输入了错误的 URL

  • 500 Internal Server Error //服务器发生不可预期的错误

  • 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

23.tomcat 容器是如何创建 servlet 类实例?

  • 1.当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对 xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过 反射的方式实例化。(有时候也是在第一次请求时实例化)

  • 2.在servlet注册时加上1如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

24.EL表达式的功能,为什么要用EL表达式?

  • 1.EL(Expression Language) 是为了使JSP写起来更加简单。减少java代码,便于开发和维护。

  • 功能作用:

    • 1.获取数据:EL表达式主要用于du替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取dao数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

    • 2.执行运算:利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}

    • 3.获取web开发常用对象:EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

    • 4.调用Java方法:EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

    • 5.使用EL表达式获取数据语法:“${标识符}”EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、requestsession、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。

25.什么要使用 PreparedStatement?

  • 1、 PreparedStatement 接口继承 Statement, PreparedStatement 实例包含已编译的 SQL 语句, 所以其执行速度要快于 Statement 对象。

  • 2 、 作 为 Statement 的 子 类 , PreparedStatement 继 承 了 Statement 的 所 有 功 能 。 三 种 方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数

  • 3、在 JDBC 应用中,在任何时候都不要使用 Statement

  • 原因如下:

    • 一、代码的可读性和可维护性.Statement 需要不断地拼接,而 PreparedStatement 不会。

    • 二、PreparedStatement 尽最大可能提高性能.DB 有缓存机制,相同的预编译语句再次被调用不 会再次需要编译。

    • 三、最重要的一点是极大地提高了安全性.Statement 容易被 SQL 注入,而 PreparedStatementc 传入的内容不会和 sql 语句发生任何匹配关系

26.什么是幻读,哪种隔离级别可以防止幻读?

  • 幻读是指一个事务多次执行一条查询返回的却是不同的值。假设一个事务正根据某个条件进行数 据查询,然后另一个事务插入了一行满足这个查询条件的数据。之后这个事务再次执行了这条查 询,返回的结果集中会包含刚插入的那条新数据。这行新数据被称为幻行,而这种现象就叫做幻 读。

  • 只有 TRANSACTION_SERIALIZABLE 隔离级别才能防止产生幻读。

27.Servlet生命周期?

  • 1、Servlet 通过调用 init () 方法进行初始化。

  • 2、Servlet 调用 service() 方法来处理客户端的请求。

  • 3、Servlet 通过调用 destroy() 方法终止(结束)。

28.tomcat容器是如何创建servlet类实例?用到了什么原理?

  • 当容器启动时,会读取在 webapps 目录下所有的 web 应用中的 web.xml 文件,然后对 xml 文 件进行解析,并读取 servlet 注册信息。然后,将每个应用中注册的 servlet 类都进行加载,并通 过反射的方式实例化。(有时候也是在第一次请求时实例化)

  • 在 servlet 注册时加上<load-on-startup>1</load-on-startup>如果为正数,则在一开始就 实例化,如果不写或为负数,则第一次请求实例化。

29.谈谈你对 ajax 的认识?

  • Ajax 是一种创建交互式网页应用的的网页开发技术

  • Ajax 的最大特点:可以实现局部刷新,在不更新整个页面的前提下维护数据,提升用户体验度。

30.说下jsonp 原理?

  • jsonp 的最基本的原理是:动态添加一个<script>标签,使用 script 标签的 src 属性没有跨域的 限制的特点实现跨域。首先在客户端注册一个 callback, 然后把 callback 的名字传给服务器。此 时,服务器先生成 json 数据。 然后以 javascript 语法的方式,生成一个 function , function 名 字就是传递上来的参数 jsonp。最后将 json 数据直接以入参的方式,放置到 function 中,这样 就生成了一段 js 语法的文档,返回给客户端。

  • 客户端浏览器,解析 script 标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了 客户端预先定义好的 callback 函数里。

31.在JS中==和===的区别?

  • ==:叫相等运算符

  • ===:叫严格运算符

  • 区别:

    • == :表示值相等则都为true

    • ===:表示 不仅要值相等,双方类型也要相等才为true

32.http的长连接和短连接区别?

  • 1.HTTP协议有HTTP/1.0版本和HTTP/1.1版本。HTTP1.1默认保持长连接(HTTP persistent connection,也翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。

  • 2.在 HTTP/1.0 中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。从HTTP/1.1起,默认使用的是长连接,用以保持连接特性。

33.描述Servlet调用过程?

  • (1)在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址。

  • (2)浏览器根据ip地址和端口号访问服务器,组织http请求信息发送给服务器。

  • (3)服务器收到请求后首先根据Host请求头判断当前访问的是哪台虚拟主机。

  • (4)服务器根据http请求头中的请求URI判断当前访问的是哪个web应用。

  • (5)服务器根据http请求头中的请求URI判断当前访问的是web应用中的哪个web资源。

  • (6)检查web应用的web.xml文件,如果根据路径找到具体的servlet处理类的全路径名交给该servlet处理,如果找不到就交给缺省servlet处理。

  • (7)这个过程中浏览器只知道自己发出来http请求,不久就收到了http响应,浏览器不知道也不关心服务器内部是如何处理的。浏览器和服务器之间的关系是非常单纯的,只有HTTP协议。

  • (8)解析请求、封装RequestResponse对象、创建Servlet、调用Service方法都是服务器自动进行的,开发人员只需要写好Servlet配置进容器中即可,无需操心具体的底层实现。

34.简述Servlet生命周期?

  • (1)Servlet第一次被访问到时创建对象,创建出来后立即执行init方法执行初始化的操作。

  • (2)从此以后该对象一直驻留在内存中为后续的对这个Servlet的请求进行服务。

  • (3)直到服务器关闭或web应用移除出容器时,随着web应用的销毁Servlet对象销毁掉,在销毁之前调用destory方法执行善后工作。

  • (4)在存活期间,每次对Servlet 的调用都会导致Service方法的执行。

35.HTTP协议的特点是什么 ?

  • (1) 它是一个无状态的协议,服务器端在处理相应请求后不会保留任何客户端的信息,每次请求都是独立的

  • (2) 客户端与服务器端的每一次数据交互,都要经过一次请求/响应的过程。

  • (3) 服务器端无法识别能够出发客户端请求的方法。

  • (4) 一个典型的HTTP请求分为 一个请求行 若干请求头 一个空行 实体内容。

36.请求乱码产生的原因?

  • 浏览器用什么码表来打开表单页面就用什么编码来发送数据。当前我们的注册页面指定了用utf-8来打开。这就决定了浏览器是用utf-8打开的页面,浏览器在提交表单时是用utf-8编码的。而tomcat默认情况下会使用iso8859-1来进行解码。我们知道全世界的码表都兼容iso8859-1,所以英文处理是没有问题的。但是iso8859-1中并没有中文,iso8859-1对于无法处理的字节都使用?(问号)替代,所以我们看到的都是?(问号)

37.如何来处理get请求产生的乱码?

  • 由于客户端发送时使用的是utf-8编码而服务器用iso8859-1解码造成了乱码,虽然字符已经乱掉了,但底层的字节仍然是正确的,我们只要将乱码字符getBytes(“iso8859-1”)转换为字节,就是正确的字节,再将这些字节new String(bytes,“utf-8”)按照正确的码表编码,就可以转换回正确的字符了。从而解决了乱码。

38.如何处理响应乱码?

  • 通过response.setHeader("Content-Type", "text/html;charset=utf-8")方法,通知服务器发送数据时的码表;通过response.setCharacterEncoding("utf-8")方法,通知浏览器解析时使用的码表。两码相同就不会有乱码了。

  • response提供了setContentType("text/html;charset=UTF-8")快捷方法,在它的底层,会同时做上面两件事,所以可以一行代码解决response产生的乱码问题。

39.简述ServletContext生命周期?

  • ServletContext对象代表当前web应用。当服务器启动时,服务器在启动时会依次加载web应用,每一个web应用加载完成后都会创建一个ServletContext对象唯一代表该web应用,这个对象一直存活,直到web应用移除出容器或服务器关闭时,随着应用销毁,ServletContext对象跟着销毁。

40.Session生命周期?

  • 当程序第一次调用到request.getSession()代码时,服务器明确的知道了需要用到session了,此时创建session。

  • 如果session超过30分钟(可以在web.xml中配置的)没人使用,服务器认为这个session超时了,销毁session。

  • 明确的调用session.invalidate(),session立即销毁。

  • 服务器被非正常关闭或web应用被移除出容器,此时随着web应用的销毁session销毁.如果是正常关闭,session会被钝化.当下次服务器正常启动时,没有超时的session还会被活化回来。

41.session的原理?

  • session的原理:在服务器第一次调用request.getSession()方法的时候,会在内存中创建一个session对象,此对象具有一个独一无二的id值,此id值将会以cookie(JSESSIONID)的形式发送给浏览器,浏览器以后每次访问都会带着此cookie,服务器就利用此cookie区分浏览器找到对应的session空间。

42.如何防止SQL注入攻击呢?

  • SQL注入:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

  • 防止的办法:

    • (1) 永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。

    • (2) 永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。

    • (3) 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

    • (4) 不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。

    • (5) 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。

43.如何自己实现一个数据库连接池?

  • 1:利用class实现DataSource接口

  • 2:在class的构造器一次性创建指定的链接将链接保存LinkedList中

  • 3:实现getConnection从LinkedList返回一个链接

  • 4:提供将链接放回方法

44.Filter的作用是什么?

  • init为初始化方法,在Filter对象被创建出来时,Servlet容器会调用该方法对filter进行初始化。

  • destory为销毁的方法,在过滤器对象被销毁之前,服务器会调用这个方法执行善后工作。

  • doFilter为过滤器中最核心的方法,对访问的请求和响应进行拦截,当过滤器拦截到对资源的访问时,服务器会自动调用该方法执行过滤代码。 我们只需要在这个方法中设计过滤器的逻辑代码即可。

45.Filter的生命周期?

  • 当服务器启动,web应用加载后,立即创建出这个web应用中的所有过滤器对象,创建出来后立即调用过滤器的init方法执行初始化操作.从此这些过滤器对象驻留在内存中为后续的拦截进行服务.每当拦截到资源时,都会导致dofilter方法执行.最终直到服务器关闭或web应用移除出容器时,随着web应用的销毁,过滤器对象销毁,销毁之前调用destory方法执行善后工作。

46.Servlet的单例问题?

  • Servlet是一个供其他java程序调用的类,它不能独立运行,针对客户端的多次请求,通常状况下,Servlet只会创建一个Servlet实例对象,一旦创建它就会驻留在内存中,为后续的请求提供服务,直至退出web应用为止,也就是当我们关闭了浏览器之后我们的Servlet就终止了。

  • 当Servlet第一次访问的时候,就被加载到内存中,以后该实例对各个请求服务,没次情况会调用一次service方法。

  • 这样会出现什么问题:因为Servlet是单例的,所以会出现线程安全问题

47.Servlet的多线程同步问题?

  • Servlet本身是单实例的,这样当有多个用户同时访问某个Servlet时,会访问该唯一的Servlet实例中的成员变量,如果对成员变量进行写入操作,那就会导致Servlet的多线程问题,即数据不一致。

  • 1.解决Servlet多线程同步问题的最好方式:去除实例变量,使用局部变量。不使用成员变量,而使用局部变量,因为局部变量在每个线程中都有各自的实例。所以对Servlet来说,如果要对某个变量做写入操作,一定不要使用成员变量,而要使用局部变量。

  • 2.使用同步代码块  synchronized{}

  • 3.Servlet实现javax.serlvet.SingleThreadModel,Servlet2.4中已经废弃了该接口,此时Servlet容器将保证Servlet实例以单线程方式运行,也就是说,同一时刻,只会有一个线程执行Servlet的service()方法。

48.如何防止表单重复提交?

  • 使用session技术:

    • a、在regist.jsp页面中生成一个为一个随机值,将其保存到session中,同时将其保存为表单的隐藏域的值。

    • b、在处理注册的请求时,获取session中的值,获取请求参数的值,比较两者是否相同,如果相同说明不是重复提交,请求通过同时删除session中保存的的值,如果不相同则是重复提交,不能通过。

49.什么是web容器?

  • 给处于其中的应用程序组件(JSP、Servlet)提供一个环境,是JSP、Servlet直接跟容器中的变量交互,不必关注其他系统问题。

  • 主要有web服务器来实现。例如:tomcat、weblogic、sphere、JBoss等。该容器提供的接口严格遵守J2EE规范中的web application标准。

  • 我们把遵守以上标准的web服务器叫做J2EE的web容器。

50.HTML和xml的区别?

  • XML是可扩展标记语言,而HTML超文本标记语言。不同之处:

  • 1、语法有所不同。XML语法比较严谨而HTML语法比较松散。

  • 2、用途不同。XML主要用于数据格式化存储而HTML主要用于网页的编辑。

51.Tomcat配置,部署优化?

  • 1.内存优化:Tomcat依赖于JVM,可以配置JVM的内存配置

  • 2.最大连接数配置(并发能力)

  • 通常搭配Nginx提升Tomcat的并发性能

52.事务有哪些特性?

  • 事务的特性:ACID

    • A - 原子性 Atomic

      • 数据操作的最小单元是事务,而不是SQL语句

    • C - 一致性 Consistency

      • 转账前 a+b = 100

      • 转帐后 a+b = 100

    • I - 隔离性 Isolation

      • 一个事物进行中时,另一事物不能操作数据

    • D - 持久性 Durancy

      • 提交事务之后,数据持久生效

53.Request和Session的取值区别,以及出现乱码的解决方式(不能在java代码中设置)?

  • 1、Request可以通过getAttribute()方法直接取值,也可通过getParameter()取值

  • 2、Session需要通过request.getSession().getAttribute()才能取值

  • 3、Request是针对一次请求,Session是针对整个会话

  • 4、在页面通过contentType,pageEncoding,content设置编码格式,必须要一致

54.对数据库连接池的理解?

  • 用来提高程序的效率,创建一个容器,容器中存放已经获取到了的数据库连接对象,对外提供获取连接和还回连接的方法,外界需要时就从容器中获取,用完就还回容器中。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xinyi_java

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

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

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

打赏作者

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

抵扣说明:

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

余额充值