- HTTP常见状态码
- GET与POST的区别
- 重定向与转发的区别
- Session与cookie的区别
- Servlet是单例还是多例
- JSP与Servlet的区别
| 状态码 | 说明 |
|---|---|
| 200 | OK,资源请求成功,最常见的状态码 |
| 301 | Moved Permanently,永久重定向。http 转向 https 时,有时会使用 301,例如B站,请求的 URL 已移走。 Response 中应该包含一个Location URL,说明资源现在所处的位置 |
| 302 | Moved Temporarily,临时重定向。http 转向 https 时,有时也会使用 302,如知乎 |
| 400 | Bad Request,客户端请求存在语法错误,不能被服务器所理解 |
| 401 | Unauthorized,当没有权限的用户请求需要带有权限的资源时,会返回 401,此时携带正确的权限凭证再试一次可以解决问题 |
| 403 | Forbidden,服务器收到请求,但是拒绝提供服务 |
| 404 | Not Found,请求资源不存在,例如输入了错误的 URL |
| 500 | Internal Server Error,服务器内部错误,很有可能是应用层未捕获错误而导致整个服务挂掉 |
| 503 | Server Unavailable ,服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
- Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是 GET , POST , PUT , DELETE 。
- URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE 就对应着对这个资源的 查,改,增,删 4个操作。
- GET一般用于 获取/查询 资源信息,POST一般用于更新资源信息。
本质区别:转发是服务器行为,重定向是客户端行为。
- 转 发:一次请求,浏览器地址不变,访问的是自己本身的web资源,传输的数据不会丢失。
- 重定向:两次请求,浏览器地址改变,可以访问自己web之外的资源,传输的数据会丢失。
Servlet容器默认采用单实例多线程的方式处理多个请求:
- 当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在一个 Servlet 实例);
- 容器初始化化Servlet主要就是读取配置文件(例如tomcat,可以通过servlet.xml的设置线程池中线程数目,初始化线程池通过web.xml,初始化每个参数值等等。
- 当请求到达时,Servlet容器通过调度线程(Dispatchaer Thread) 调度它管理下线程池中等待执行的线程(Worker Thread)给请求者;
- 线程执行Servlet的service方法;
- 请求结束,放回线程池,等待被调用。
单例多线程的优点:
- Servlet单实例,减少了产生servlet的开销;
- 通过线程池来响应多个请求,提高了请求的响应时间。
单例多线程的缺点:
- Servlet的线程安全问题只有在大量的并发访问时才会显现出来,并且很难发现,因此在编写Servlet程序时要特别注意。线程安全问题主要是由实例变量造成的,因此在Servlet中应避免使用实例变量。
- 如果应用程序设计无法避免使用实例变量,那么使用同步来保护要使用的实例变量,但为保证系统的最佳性能,应该同步可用性最小的代码路径。
- JSP经编译后就变成了Servlet。(JSP的本质就是Servlet,JVM只能识别java类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
- JSP更擅长于页面显示,Servlet更擅长于逻辑控制。
- Servlet中没有内置对象,JSP中的内置对象都是必须通过HttpServletRequest对象,HttpServlet对象得到。
- JSP是Servlet的一种简化,使用JSP只需完成开发者需要输出到客户端的内容,JSP中的Java脚本由JSP容器镶嵌到一个类中。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类Servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑在Java文件中,并且完全从表示层中的HTML里分离开来;而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。



