JavaWeb之Servlet

概念

Servlet 是服务端的组件,运行在 Servlet 容器中,而 Servlet 容器负责 Servlet 和 客户的通信以及调用 Servlet 的方法,Servlet 和客户的通信采用“请求/响应”的模式。

可以完成以下功能:

1、创建并返回基于客户请求的动态 HTML 页面

2、创建可以嵌入到现有 HTML 页面中的部分 HTML 页面

3、与其他服务器资源进行通信

使用

当项目里找不到  Servlet 类时,需要在 Project Structure 中的 Libraries 进行添加 jar 包。

创建类 helloServlet 并实现 Servlet:

在 web.xml 文件里配置和映射 Servlet:

注:必须配置和映射,为了让网页直接访问 Java 类

运行 Tomcat,并访问 localhost:8080/hello:

可以看出 Servlet 所执行的生命周期,如果一直刷新网页则会一直执行 service:

当我们关闭 Tomcat 时:

Servlet 生命周期的方法(以下方法都是由 Servlet 容器负责调用)

1、构造器:只被调用一次,只有第一次请求 Servlet 时,创建 Servlet 的实例,调用构造器。说明 Servlet 是单实例的。

2、init 方法:只被调用一次,在创建好实例后立即被调用,用于初始化当前 Servlet。

3、service 方法:被多次调用,每次请求都会调用 service 方法。实际用于响应请求的。

4、destroy 方法:只被调用一次,在当前 Servlet 所在的 WEB 应用被卸载后调用,用于释放当前 Servlet 所占用的资源。

load-on-startup 参数

1、配置在 servlet 的节点中,如下图

2、指定 Servlet 被创建的时机,如果该数值若为负数,则在第一次请求时被创建,若为 0 或者正数,则在当前 WEB 应用被 Servlet 容器加载时创建实例,且数值越小越早被创建。

关于 servlet-mapping

1、同一个 Servlet 可以被映射到多个 URL 上,即多个 <servlet-mapping> 元素 <servlet-name> 子元素的设置值可以是同一个 Servlet 注册名。

2、在 Servlet 映射到 URL 中也可以使用 * 通配符,但是只能有两种固定的格式:

⑴ “ *.扩展名 ”

⑵ “ /* ”

注:带扩展名的不能带斜杆

Servlet 初始化参数

以节点 <init-param> 配置初始化参数,且该节点位置必须在节点 <load-on-startup> 前面。

获取初始化参数:

1、通过 getInitParamter 获取指定参数名称的参数值

2、通过 getInitParameterNames 获取参数名组成的 Enumeration 对象

ServletContext:

Servlet 引擎为每个 WEB 应用都创建一个对应的 ServletContext 对象,一个 WEB 应用中的所有 Servlet 都共享同一个 ServletContext  对象,所以 ServletContext  对象被称之为 application 对象。

ServletContext 由 ServletConfig 来获取,相当于 WEB 应用的一个大管家,可以从中获取 WEB 应用中的各个方面的信息。

配置当前 WEB 应用的初始化参数:

获取当前 WEB 应用的初始化参数:

用法和 Servlet 获取初始化参数一样。

两者区别在于,Servlet 初始化参数是局部参数,针对某个 Servlet 使用,而 ServletContext 初始化参数是全局的,每个 Servlet 都可以使用。

获取当前 WEB 应用的某个文件的的绝对路径(不是部署前的位置):

返回的路径其实是应用的部署后输出的位置:

获取当前 WEB 应用某个文件对应的输入流:

ServletRequest、ServletResponse:

ServletRequest 封装了请求信息,可以从中获取到任何的请求信息。

ServletResponse 封装了响应信息,如果给用户什么响应,具体可以使用该接口的方法实现。

这两个接口的实现类都是服务器给予实现的,并在服务器调用 service 时传入。

案例:

在 webapp 下新建 login.html,并放置一个 <form> 表单,以 POST 方式提交:

新建 LoginServlet 类,在 service 里面接收参数并打印:

在 web.xml 里添加配置:

其中节点 <url-pattern> 的信息对应的是 form 表单里的 action 值。

重启 Tomcat 服务器,访问以下地址:

分别填写信息:

点击 login:

打印了接收参数的值,通过参数可以在 Java 类里面使用 JDBC 去访问数据库。

如果是以 checkbox 的方式提交参数:

应使用如下来接收多个参数:

如果需要获取更多信息,可以将 servletRequest 转换为子接口 httpServletRequest:

servletResponse:

getWriter():返回 PrintWriter 对象,调用 print 或者 write 方法可以将信息打印到网页上

setContentType():设置响应的内容类型

每次新建 Servlet 都得实现 Servlet 的全部方法,而继承 GenericServlet 可以省略到只剩 service 方法,简便很多。

GenericServlet 是 Servlet 接口和 ServletConfig 接口的实现类,也是一个抽象类。

HttpServlet(实际开发用):

1、继承自 GenericServlet,针对于 HTTP 协议所定制

2、在 service 方法中直接把 ServletRequest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse,可以用来获取请求方式

3、实际开发中,使用时直接继承 HttpServlet 并重载里面的 doGet 或者 doPost 方法:

补充

Servlet 3.0 以上可以通过注解的方式来配置 servlet

表单使用



以上为本人的一些学习笔记,如有出错欢迎指正,陆续更新!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容