Java Web之Servlet与Jsp

Java Web之Servlet与Jsp

1.什么是servlet?

在官方的介绍中:Servlet 是运行在Web服务器的Java小程序。Servlet可以获取并针对Web客户端的请求作出响应。一般情况下,通过HTTP,即超文本传输协议,进行传输通信。

我们再来看看它的继承体系图:
在这里插入图片描述

  • Servlet是个顶级接口,定义了所有Servlet需要实现的方法
  • ServletConfig是接口,在Servlet初始化过程中获取配置信息
  • GenericServlet是个抽象类,提供了Servlet与ServletConfig接口方法的默认实现(service( )方法除外)
  • HttpServlet是我们创建的servlet的抽象父类,继承自GenericServlet,处理HTTP协议的请求和响应
  • WebServlet是个注解,一般我们现在都习惯于注解配置,而不用xml配置了

其实说到底,Servlet就是一个普通的程序,只不过和我们javase时期写的程序不一样,它没有main方法,那么它怎么运行呢?来看下它的运行机制和生命周期吧!

2.servlet的生命周期

在这里插入图片描述

  • 当客户端发起HTTP请求时,tomcat容器会将该请求定位到对于的servlet里,因为每个servlet都会有至少一个urlPattern。
  • 然后,servlet的init()初始化方法被调用,只执行一次
  • 再调用servlet的service方法(这个方法会执行多次),这个方法会根据客户端发起的请求,进行判断是get提交还是post提交,然后,找到对应的doGet()和doPost()方法下,响应给客户端
  • 最后,当服务器正常关闭时,调用destroy()销毁方法,也是只执行一次

其实呢,这个过程远比我这写的要复杂,因为还要牵涉到tomcat容器的架构,我这里只是简单版的

3.servlet是线程安全的吗?

servlet实例是由服务器在第一次请求时创建,它是单例的,也就是说一个servlet实现类只会有一个实例对象,如果你自己在servlet类里定义了全局变量和静态变量,是会引发线程安全问题的。因此,我们要避免在servlet里定义全局变量和静态变量

4.什么是Jsp?

jsp 本质上就是一个 Servlet,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 jsp 页面都是一个 servlet
实例。它是为了解决servlet的输出html代码的不方便性,因为jsp是个html文件,所以由它来显示html信息是最合适不过的了,以下是jsp执行的流程图:

在这里插入图片描述

每个jsp都会被编译一个.class字节码文件,用于在服务器容器中运行,因为JVM只识别java代码

5.jsp 有哪些域对象和内置对象及它们的作用?

  • 四大域对象:
    • (1)pageContext page 域-指当前页面,在当前 jsp 页面有效,跳到其它页面失效
    • (2)request request 域-指一次请求范围内有效,从 http 请求到服务器处理结束,返回响应的整个过程。在这个过程中使用 forward(请求转发)方式跳转多个 jsp,在这些页面里你都可以使用这个变量
    • (3)session session 域-指当前会话有效范围,浏览器从打开到关闭过程中,转发、重定向均可以使用
    • (4)application context 域-指只能在同一个 web 中使用,服务器未关闭或者重启,数据就有效
  • 九大内置对象:

6.Cookie和Session的区别

  • Cookie 是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。以后浏览器再给特定的 web 服务器发送请求时,同时会发送所有为该服务器存储的 cookie。
  • Session 是存储在 web 服务器端的一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
  • Cookie 和 session 的不同点:
    • 1、无论客户端做怎样的设置,session 都能够正常工作。当客户端禁用 cookie 时将无法使用 cookie
    • 2、在存储的数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象

7.干货推荐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值