web面试题整理

版权声明:本文为博主原创文章,允许转载,转载时请说明出处 https://blog.csdn.net/qq_41541619/article/details/82413896

谈谈你对http协议的理解,http 常见的状态码有哪些

1. http:超文本传输协议,是无状态协议,对于事务处理没有记忆能力。也就是说,当客户端一次http请求完成后,客户端再发送一次http请求,http并不知道当前客户端是一个“老用户”。使用cookie来解决无状态问题。

2. 常见的http方法有

      GET:通过URL传参给服务器

      POST:用于传输信息给服务器

      PUT:传输文件,保存到对应URI位置

      DELETE:删除文件,删除对应URI位置的文件

      HEAD:获得报头首部,一般用于验证URI是否有效

      OPTIONS:查询相应URI支持的http方法

3. 一次完整的http流程(7个步骤)

  1. 建立TCP连接
  2. web浏览器向web服务器发送请求行

                一旦建立了TCP连接,web浏览器就会向web服务器发送请求命令

                如:GET/sample/hello.jsp

      3. web浏览器发送请求头

              浏览器发送其请求命令后,还要以头信息的形式向web服务器发送一些别的信息,之后浏览器发送一空白行来通知服务器,它已经结束了该头信息的发送。

      4. web服务器应答

                应答的第一部分是协议的版本号和应答状态码

      5. web服务器发送应答头

                正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据。

                web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息发送到此结束。

       6. web服务器向浏览器发送数据

接着,它就以Cotent-Type应答头信息所描述的格式发送用户所请求的实际数据。

       7. web服务器关闭TCP连接

4. URIURL

URI:统一资源标识符,用来唯一的标识一个资源

URL:统一资源定位符,是一种具体的URI。即URL可以用来标识一个资源,而且还指明如何locate这个资源

5. 常见的http相应状态码

200:请求被正常处理

400:请求报文语法有错,服务器无法识别

404:服务器无法找到对应资源

500:服务器内部错误

301:永久重定向

302:临时重定向

1XX系列:代表请求已被接受,需要继续处理;

2XX系列:代表请求已成功被服务器接收、理解并接受;

3XX系列:用来重定向;

4XX系列:表示请求错误;

5XX系列:代表服务器在处理请求过程中有错误或者异常发生。

 

GET 和 POST 的区别

 

GET

POST

请求参数的位置上

请求参数放在URL地址后面,以?的形式进行拼接

请求参数放在http请求包中

数据携带上

在URL地址后附带的参数是有限的,其数据容量通常不能超过1k

在请求的实体内容中向服务器发送数据,传输的数据量无限制

用途上

一般用来获取数据

一般用来提交数据

传输的数据类型

只能传输字符串类型

可以传输各种类型的数据,包括对象

速度

GET方式比POST方式快

 

http 中重定向和请求转发的区别

 

重定向:redirect

请求转发:forward

用法不同

Response.sendRedirect(“地址”)

Request.getRequestDispatcher(“地址”).forward(request,respose);

发送位置不同

发生在浏览器

发生在服务器,转发对浏览器透明,浏览器不知道转发的动作

地址栏

变化

不变

速度

跳转的时间不同

整个页面执行完之后才执行跳转

执行跳转语句时就会立即跳转

是否是同一个请求

否,request域对象无效

能够去往的URL的范围不一样

是服务器跳转,可以去往任何资源

必须在同一台服务器下完成

传输的数据类型不同

只能传递字符串

可以传输各种类型的数据,包括对象

 

Cookie 和 Session
区别

 

Cookie

Session

从存储方式上

只能存储字符串,如果要存储非ASCII字符串还要对其编码

可以存储任何类型的数据,可以把session看作是一个容器

从隐私安全上

cookie存储在浏览器中,对客户端是可见的。信息容易泄露出去,如果使用cookie,最好将其加密

session存储在服务器上,对客户端是透明的。不存在敏感信息泄露问题

从有效期上比较

保存在硬盘中,只要设置maxAge属性为比较大的正整数,即使关闭浏览器,cookie仍然存在

保存在服务器,设置maxInactiveInterval属性值来确定session的有效期。并且session依赖名为JSESSIONID的cookie,该cookie默认的maxAge属性为-1,如果关闭浏览器,session失效

从对服务器的负担比较

不占用服务器资源

像baidu,Sina这样大型的网站,一般使用cookie进行会话跟踪

每个用户都会产生一个session,当很多用户并发访问时,会消耗大量内存

从浏览器的支持上比较

如果浏览器禁用了cookie,那么cookie就是无用的了

如果浏览器禁用了cookie,session可以通过URL地址重写来进行会跟踪

从跨域名上比较

可以设置domin属性来实现跨域名,Servlet中通过setDomain()设置

只在当前域名内有效

大小限制

Cookie最多有50个,一个Cookie 4kb

 

什么是 jsp,什么是 Servlet?jsp 和 Servlet 有什么区别?

1. Jsp:全称为java server pages,是一种动态网页开发技术

它使用JSP标签在HTML网页中插入Java代码,标签通常以<%开始%>结束;

Jsp本质上是一个servlet,jsp编译时,会首先编译成servlet文件,然后编译成class文件。

包含9大内置对象,4大域对象

      内置对象:request,response,session,application,page,pageContext,config,exception,out

      作用域:request,session,application,pageContext

2. Servlet:是一个web容器,是一种独立于平台和协议的服务端的java技术,可以动态生成web页面

Servelt生命周期

      加载servlet

         当tomcat第一次访问servlet的时候,tomcat会负责创建servlet实例

     初始化:

         当servlet被实例化后,tomcat会调用init()方法初始化这个对象,只会初始化一次

     处理服务:

         当浏览器访问servlet的时候,调用service()方法处理请求

     销毁:

         释放servlet所占的资源,销毁方式有:手动销毁和关闭服务器销毁

3. 区别

        JSP是servlet技术的扩展,本质上就是servlet的简易方式

        最大的不同点在于

                Servlet的应用逻辑在java文件中,并且完全从表示层中的HTML里分离出来;

                JSP可以是java和html组合成一个扩展名为.jsp的文件

        JSP侧重于视图,servlet主要用于控制逻辑

jsp 有哪些域对象和内置对象及他们的作用

jsp9大内置对象和4大域对象

1. 4大域对象

request,作用于同一个请求之内

session,作用于一个会话的生命周期内

application,作用于整个应用,为所有会话所共享

pageContext,作用于当前页面

作用范围从大到小依次为:application>session>request>pageContext

2. 9大内置对象

request,对应servlet中HttpServletRequest

response,对应servelt中HtppServletResponse

session,对应servelt中HttpSession

application,对应servlet中ServletContext

config,对应servlet中ServletConfig

注:这5个对象和servletAPI是一样的

page,代表当前JSP页面,相当于普通java类的this

pageContext,代表JSP页面编译后的内容,封装了对其他8大内置对象的引用,可通过它获取其他8大内置对象

exception,是java.lang.Exception类的对象,封装了JSP页面抛出的异常信息

out,用于向浏览器输出数据,out对象的类型是JspWriter(可理解为是带缓存的PrintWriter)

过滤器和监听器是什么,有什么用

1. 过滤器(filter)

过滤器是一个驻留在服务器端的web组件,它可以截取客户端和服务器之间请求与响应信息,并对这些信息进行过滤。

                   常见的过滤器用途主要包括:对用户请求进行统一认证,对用户的请求进行记录和审核,对响应内容进行压缩以减少传输量等

2. 监听器(listener)

监听器就是application、session、request三个对象的创建、销毁或者往其中添加修改属性时自动执行代码的功能组件。

常见的有:

监听对象创建于销毁,有:

ServletContextListenerHttpSessionListenerServletRequestListener

监听对象属性添加删除和替换,有:

ServletContextAttributeListener;

HttpSessionAttributeListener;

ServletRequestAttributeListener

常见的监听器用途主要包括:网站在线人数技术以及监听用户的行为(管理员踢人)

3. 区别

过滤器依赖底层web容器

监听器不依赖容器

谈谈你对 ajax 的认识?

Ajax,是异步javascript和xml,是一种创建交互式应用的网页开发技术,实现客户端与浏览器,可以在不必刷新整个浏览器的情况下,与服务器进行异步通讯的技术。

Ajax的底层原理是基于XMLHttpRequest对象

Ajax实现流程:

        1. 创建XMLHttpRequest对象,也就是创建一个异步调用对象

        2.创建一个新的http请求,并指定该http请求的方法、url及验证信息

        3.设置回调函数

        4.发送请求

        5.使用异步调用返回的数据

        6.将数据渲染到页面上,使用javasrcipt和dom实现局部刷新

XMLHttpRequest对象详解

属性

      1. onreadystatechange:请求状态改变事件触发器(readyState变化时会调用此方法),一般用于指定回调函数。

      2. readyState:请求状态readyState一改变,回调函数被调用

      5个状态:0,1,2,3,4

            0:未初始化

            1:open方法成功调用以后

            2:服务器已经成功应答客户端的请求

            3:交互中。http头信息已经接收,响应数据尚未接收

            4:完成,数据接收完成

      3. responseText:服务器返回的文本内容

      4. responseXML:服务器返回的兼容DOM的XML内容

      5. status:服务器返回的状态码

      6. statusText:服务器返回状态码的文本信息

方法(常用)

      1. open(),创建http请求

      2. setRequestHeader(),设置消息头

      3. send(),发送请求给服务器,传递数据

案例

<button id="sub">请求</button>

        <div id="div"></div>

        <script type="text/javascript">

            window.onload = function() {

                var xhr;

                var sub = document.getElementById("sub");

                sub.onclick = function() {

                    console.log("sub");

                    // 1.创建请求对象

                    if(window.XMLHttpRequest) {

                        // ie6以上版本以及其他内核浏览器(mozilla等)

                        xhr = new XMLHttpRequest();

                    } else if(window.ActiveXObject) {

                        // ie6以下版本

                        xhr = new ActiveXObject();

                    }

 

                    // 2.新建一个请求

                    xhr.open("GET", "ajax.action", true);

 

                    // 3. 指定回调函数

                    xhr.onreadystatechange = acceptMsg;

 

                    // 4. 发送请求

                    xhr.send();

                }

 

                // 回调函数

                function acceptMsg() {

                    console.log("acceptMsg");

                    // 判断请求状态码是否为4【数据接收完成】,并且状态码是否为200

                    if(xhr.readyState == 4 ) {

                        console.log("icydate");

                        if(xhr.status == 200){

                            // 5. 得到服务器返回的文本数据

                            var text = xhr.responseText;

                            // 6. 把服务器返回的数据写到页面上

                            var div = document.getElementById("div");

                            div.innerText = text;

                        }

                    }

                }

            }

        </script>

 

@RequestMapping("/ajax.action")

public void ajax(String username,HttpServletResponse response) throws IOException {

    System.out.println("AjaxTest.ajax()");

    PrintWriter writer = response.getWriter();

    writer.write("success");

}

猜你喜欢

转载自blog.csdn.net/qq_41541619/article/details/82413896