Servlet常用类剖析

发布于:2024-06-24 ⋅ 阅读:(54) ⋅ 点赞:(0)

通过继承HttpServlet实现Servlet程序

==========================

实际开发中,一般使用继承HttpServlet类的方法去实现Servlet程序。

步骤:

1、编写一个类去继承HttpServlet类

2、根据业务需要重写doGet或doPost方法

3、到web.xml中配置Servlet程序

1、编写一个类,Alt+insert快捷键重写里一些需要的方法

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

public class HelloServlet2 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// super.doGet(req, resp);

System.out.println(“HelloServlet2的 get请求”);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// super.doPost(req, resp);

System.out.println(“HelloServlet2的 post请求”);

}

}

到web.xml文件中配置访问路径

HelloServlet2

com.servlet.HelloServlet2

HelloServlet2

/hello2

将表单中的访问地址hello改变为hello2

运行提交后:

使用idea创建Servlet程序

==================

选择要实现的包→Servlet程序

配置信息

勾选上用的就是3.0的注解配置

只需要在web.xml中加上路径即可(其他的已经自动生成了)

HelloServlet3

/hello3

Servlet的继承体系

============

doGet和dopost源码


protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String msg = lStrings.getString(“http.method_get_not_supported”);

this.sendMethodNotAllowed(req, resp, msg);

}

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String msg = lStrings.getString(“http.method_post_not_supported”);

this.sendMethodNotAllowed(req, resp, msg);

}

servlet方法部分源码


protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String method = req.getMethod();

long lastModified;

if (method.equals(“GET”)) {

lastModified = this.getLastModified(req);

if (lastModified == -1L) {

this.doGet(req, resp);

} else {

long ifModifiedSince;

try {

ifModifiedSince = req.getDateHeader(“If-Modified-Since”);

} catch (IllegalArgumentException var9) {

ifModifiedSince = -1L;

}

if (ifModifiedSince < lastModified / 1000L * 1000L) {

this.maybeSetLastModified(resp, lastModified);

this.doGet(req, resp);

} else {

resp.setStatus(304);

}

}

}

ServletConfig类

==============

  • ServletConfig是Servlet程序的配置信息类。
  • Servlet程序和ServletConfig对象都是有Tomcat负责创建,我们负责使用。
  • Servlet程序默认是一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象

ServletConfig类的三大作用


1、可以获取Servlet程序的别名(servlet-name的值)

2、获取初始化参数init-param

3、获取ServletContent对象

所处位置init方法

**1、**获取servlet别名

public void init(ServletConfig servletConfig) throws ServletException {

System.out.println(“HelloServlet 的别名是”+servletConfig.getServletName());

}

**2、**获取初始化参数init-param,其他的前面谢过了

现在web.xml文件中配

HelloServlet

com.servlet.HelloServlet

username

root

url

jdbc:mysql://localhost:3306/text

在实现Servlet接口的类中的init()下

// 2、获取初始化参数init-param

System.out.println(“初始化参数username的值是”+servletConfig.getInitParameter(“username”));

System.out.println(“初始化参数url的值是”+servletConfig.getInitParameter(“url”));

**3、**获取ServlertContent对象

// 3、获取ServletContent对象

System.out.println(“servletcontent对象是”+servletConfig.getServletContext());

以上运行结果:

每一个ServletConfig程序独立 ,在web.xml 中每个类中信息不共享,

重写init方法时得加上super.init(config),得访问父类的init初始化方法,否则报错

继承体系可以得知ServletConfig在GenericServlet类中,该类中的init定义:

public void init(ServletConfig config) throws ServletException {

this.config = config;

this.init();

}

所以如果重写init方法,必须加上super.init(config),否则父类的init方法不会执行(父类中中的保存操作执行不了)

ServletContext类

===============

什么是ServletContext?


1、ServletContent是一个接口,他表示Servlet上下文对象

2、一个web工程,只有一个ServletContext对象实例。

3、ServletContent对象是一个域对象。

4、在web工程启动后创建,在web工程结束后销毁

什么是域对象?


域对象,是可以像Map一样存取数据的对象,叫做域对象。

这里的域指的是存取数据的操作范围。

对照示意表:

存数据 取数据 删除数据
Map put() get() remove()
域对象 setAttribute() getAttribute() removeAttribute()

ServletContext类的四个作用


1、获取web.xml中的配置的上下文参数context-param

2、获取当前的工程路径你,格式:/工程路径

3、获取部署后在服务器硬盘上的绝对路径

4、像Map一样存取数据

用快捷方式创建一个类ContextServlet,在web.xml中配置路径(   其余的已经自动生成了)

ContextServlet

com.servlet.ContextServlet

最后

==
就答题情况而言,第一问100%都可以回答正确,第二问大概只有50%正确率,第三问能回答正确的就不多了,第四问再正确就非常非常少了。其实此题并没有太多刁钻匪夷所思的用法,都是一些可能会遇到的场景,而大多数人但凡有1年到2年的工作经验都应该完全正确才对。
只能说有一些人太急躁太轻视了,希望大家通过此文了解js一些特性。

并祝愿大家在新的一年找工作面试中胆大心细,发挥出最好的水平,找到一份理想的工作。