javaWeb之Servlet及常见面试题

Tomcat

Tomcat简单来说是一个运行Java的网络服务器,免费的开源的Servlet和Jsp容器,

在这里插入图片描述

tomcat结构目录在这里插入图片描述

如果端口号有冲突,修改端口号打开server.xml配置文件,大概在70行左右,修改port,保存。

servlet

  • Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
  • javaWeb的三大组件之一(servlet\Filter过滤器\Listener监听器)
  • 接受客户端发送过来的请求,并响应给客户端

在这里插入图片描述

Servlet生命周期

1.Servlet 通过调用 init () 方法进行初始化。
2. Servlet 调用 service() 方法来处理客户端的请求。
3.Servlet 通过调用 destroy() 方法终止(结束)。
4.最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的
在这里插入图片描述

servlet在多线程下其本身并不是线程安全的。

如果在类中定义成员变量,而在service中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全。

Servlet常用Api

HttpServletRequest 类的常用方法

每次只要有请求进入 Tomcat 服务器, Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。然后传递到 service 方法( doGet 和 doPost) 中给我们使用。 我们可以通过 HttpServletRequest 对象, 获取到所有请求的信息。

在这里插入图片描述

  • 如何获取请求参数
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobby = req.getParameterValues("hobby");

URL(统一资源定位符)/URi(统一资源标识符)

在这里插入图片描述

get和post方法的区别

在这里插入图片描述

请求转发与请求重定向

  • 请求转发

      请求转发是指, 服务器收到请求后, 从一次资源跳转到另一个资源的操作叫请求转发
    
 //请求转发
            req.getRequestDispatcher("/error.html").forward(req,resp);

在这里插入图片描述

  • 请求重定向

      请求重定向, 是指客户端给服务器发请求, 然后服务器告诉客户端说。 我给你一些地址。
       你去新地址访问。 叫请求重定向(因为之前的地址可能已经被废弃) 。
    
  //请求重定向
           resp.sendRedirect(req.getContextPath()+"/main.html");

在这里插入图片描述
对比
在这里插入图片描述

Http常见状态码:

  • 1xx:表示请求服务器已接收,请求者继续执行操作
  • 2xx:操作被成功接收并处理
  • 3xx:请求重定向,需要进一步操作以完成处理
  • 4xx:客户端错误,请求包含语法错误或者无法完成请求
  • 5xx:服务器端错误,服务器未能完成完整的请求
    200: OK,客户端请求成功
    301:MovedPermanently 所请求的页面已经转移到一个新的 URL,永久重定向
    302: Found 所请求的页面已经临时转移到一个新的 URL
    303 :See Other 所请求的页面可以在另一个不同的 URL 下被找到。
    307:TemporaryRedirect 所请求的页面已经临时转移到一个新的 URL,临时重定向
    400: Bad Request 客户端请求有语法错误,不能被服务器理解
    401:Unauthorized 请求未经授权,这个状态码必须和www-Authenticate报头域一起使用
    403:Forbidden 服务器收到请求,但拒绝提供服务,比如用户登录权限不足
    404:Not found 请求资源不存在,比如输入错误的URL
    405:URL的方法找到了,但不接受请求方法
    408 :Request Timeout 请求需要的时间比服务器能够等待的时间长,超时
    500:服务器发生不可预期的错误,不如服务器端代码错误
    503:服务器当前不能处理客户的请求,一段时间后恢复
    505:HTTP Version NotSupported 服务器不支持"HTTP协议"版本

设置 HTTP 状态代码的方法

在这里插入图片描述

Cookie和Session

Cookie

  • 定义: Cookies 是存储在客户端计算机上的文本文件,并保留了用户的各种跟踪信息
  • 作用: 会话保持,如完成用户的登录与状态保持
  • 工作原理:客户端向服务区发起登录请求服务器脚本向浏览器发送一组 Cookies。例如:姓名、年龄或识别号码等,浏览器将这些信息存储在本地计算机上,以备将来使用。当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookies 信息发送到服务器,服务器将使用这些信息来识别用户
  • 使用场景:在登录页面勾上记住我/多少天免密登录可以直接登录

在这里插入图片描述

Session

定义: session 是存储在服务器上的文本文件,并保留了用户的各种跟踪信息
作用: 会话保持,如完成用户的登录与状态保持,因为在服务器端,所以相对安全一些

可以通过调用 HttpServletRequest 的公共方法 getSession() 来获取 HttpSession 对象,如下所示:
需要在向客户端发送任何文档内容之前调用 request.getSession()
HttpSession session = request.getSession();

在这里插入图片描述
对比
在这里插入图片描述

常见的面试题

输入一个url怎么找到所在的物理资源位置

比如输入url:http://localhost:8080/test/index.html
在这里插入图片描述
先根据ip定位服务器
通过端口号定位Tomcat
通过工程路径(项目名)确定哪个工程

HTTP请求报头都有什么?(请求头具体都有什么)

请求头
在这里插入图片描述

输入url浏览器都发生了什么?

1、我们在浏览器输入网址(URL)后
2、浏览器查找域名对应ip地址

DNS域名查找过程:
	浏览器缓存-->系统缓存-->路由缓存-->Isp DNs缓存-->递归缓存
	递归搜索过程:从根域名服务器到顶级域名服务器到你查询的域名服务器

3、浏览器打开Tcp连接,向该ip服务器发送一条http请求,如果浏览器存储了该域名下的cookie,那么cookie也会被放入http请求中

4、服务器给浏览器一个301的永久重定向响应,该ip的服务器可能是代理服务器,比如你输入http://baidu.com,按理说这个网址和http://www.baidu.com是同一个网页,此时代理服务器进行重定
向,使这两个网址访问同一个网页。
5、浏览器根据重定向再次进行重定向请求
6、服务器分析http请求,生成http响应,将响应发给客户端。
7、浏览器收到响应后生成主页框架,同时向服务器继续发送请求,请求的内容是主页里的一些资源,视频,文件图片等等。
8、对于静态页面的内容浏览器通常进行缓存,缓存的时间是有期限的。
9、浏览器向服务器发送异步请求,因为有些网页显示完成后客户端仍需要与服务器保持联系。
10、整个过程结束后浏览器关闭TCp连接。

浏览器访问一个页面出错是什么原因,你如何找问题?

可能是 根据状态码具体情况分析对应的问题

Session何时创建何时删除,存放在哪里?

创建:sessionid第一次产生是在直到某server端程序调用
HttpServletRequest.getSession(true)这样的语句时才被创建。
删除:超时;程序调用HttpSession.invalidate();程序关闭。
session存放在哪里:服务器端的内存中。不过session可以通过特殊的方式做持久化管理(memcache,redis)。
 session的id是从哪里来的,sessionID是如何使用的:当客户端第一次请求session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,用来标识该session对象。
session会因为浏览器的关闭而删除吗?不会,session只会通过上面提到的方式去关闭

猜你喜欢

转载自blog.csdn.net/qq_41552331/article/details/105902030