servlet

servlet:就是一个Java程序,运行在web服务器中,用于接收和响应客户端的http请求。更多是配合动态资源使用。当然静态资源也要使用servlet,只不过Tomcat里面已经定义一个DefultServlet。这是我们安装完tomcat后访问8080端口后有信息的原因。

servlet用于接收响应http请求

Tomcat就是一个http容器

servlet的第一个程序(hello world)

servlet本质就是javax中的一个类,所以想要实现servlet,只需要实现servlet接口,或是继承servlet的实现类即可

1.首先建立一个web工程,并要有一个服务器。

2.测试运行web工程

​ 1.在Java Resources/src目录下新建包,并新建一个类(eg:test/helloservlet.class),实现Servlet接口。并重写方法,只重写,不进行任何操作,可以在重写的service方法中输出一句话检测servlet是否开启成功。

import java.io.IOException;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class h2 implements Servlet {public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {System.out.println("h2的service被调用...");}public void init(ServletConfig config) throws ServletException {return null;  }public void destroy() {return null;}public ServletConfig getServletConfig() {return null;}@Overridepublic String getServletInfo() {return null;}  

​ 2.配置Servlet。目的:告诉服务器,我们的应用中有该Servlet

servlet配置方法。

​ 在webContent/WEB-INF/web.xml里面写上以下内容。

<!-- 向tomcat报告, 我这个应用里面有这个servlet, 名字叫做HelloServlet , 具体的路径是
test/helloservlet.class --><servlet><servlet-name>HelloServlet</servlet-name><servlet-class>test/helloservlet.class</servlet-class></servlet><!-- 注册servlet的映射。  servlet-Name : 找到上面注册的具体servlet, --><servlet-mapping><servlet-name>HelloServlet</servlet-name><!--url-pattern: 在地址栏上的path 一定要以/打头。此处用a代替HelloServlet,a命名随意 --><url-pattern>/a</url-pattern></servlet-mapping>

3.在地址栏上输入 http://localhost:8080/项目名称/a(eg: http://localhost:8080/test/a)。如果服务器正常开启并且,浏览器不显示任何信息,而在eclipse的控制台中有 “h2的service被调用…” 说明程序运行成功。

servlet执行过程

1.输入http://localhost:8080/test/a之后,浏览器先找到tomcat应用。

2.找到项目。

3.找到web.xml,然后找到所有< url-pattern >,查看是否有哪一个的文本内容是/a。

4.找到同一个下的

5.找到其中的HelloServlet

6.找到上面元素中,与中的同名的中的。

7.找到下面定义的开始创建类的实例。

8.继而执行servlet中的service方法。

Servlet的通用写法

Servlet 接口
  • 已知子接口:

HttpJspPage, JspPage

  • 已知实现类:

FacesServlet, GenericServlet, HttpServlet

GenericServlet 类
  • 已知子接口:

Serializable, Servlet, ServletConfig

  • 实现类:

HttpServlet

所以其通用写法为:定义一个类,继承HttpServlet类,并重写doGet()和doPoet(方法)

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class helloServlet extends HttpServlet {private static final long serialVersionUID = 1L;public helloServlet() {super();}//get请求会调用这个方法protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().append("Served at: ").append(request.getContextPath());}//post请求会调用这个方法protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

Servlet的生命周期

生命周期

从创建到销毁的一段时间。

生命周期方法

从创建到销毁所调用的方法

  • init()方法(servlet初始化方法)

    在创建servlet实例时,就会执行此方法,一个servlet只会初始化一次,所以在servlet运行期间,init())方法只会执行一次。

    默认情况是:初次访问该servlet,才会创建实例

  • service()方法(请求处理方法)

    只要客户端发送了一个请求,就会执行该方法。

    该方法会被执行多次。一次请求,对应一次service()方法调用。

  • destroy()方法

    servlet销毁时就会执行该方法。

    两种情况调用destroy()方法

    1.该servlet项目从tomcat在移除时。

    2.正常关闭tomcat时,(执行shutdown.bat,等)

Servlet的创建时机提前

1.默认情况下,只有当初次访问servlet时,才会执行init方法。有时候,我们可能需要在init方法中执行一些初始化工作,甚至比较耗时的逻辑。那么,初次访问可能在init方法中消耗比较长的时间。这时就需要提前初始化时机。

2.提前servlet初始化时机的方法:在配置的时候,在元素中使用load-on-startup元素来指定,给定的数字越小,启动的时机越早。一般不写负数。从2开始即可。因为1已经被tomcat中的DefultServlet。占用。如果两个class的数字相同,则由tomcat确定哪一个先调用。

<servlet><servlet-name>test1</servlet-name><servlet-class>test.test1</servlet-class><load-on-startup>2</load-on-startup></servlet>

ServletConfig 类

先从Servlet的getServletConfig()方法讲起:

public ServletConfig getServletConfig();该方法在
Servlet的实现类中返回一个ServletConfig 的对象。
作用

通过该类的对象,可以获取servlet的配置时的一些信息。哪个类调用servletconfig,就拿哪个类的配置servlet元素中的数据

方法介绍
  • getServletName()
public String getServletName():返回此 servlet 实例的名称

此处getServletName()获取的是配置servlet里面servlet-name的文本内容

<servlet><!--获取的是此处的name--><servlet-name>test2</servlet-name><servlet-class>test.test2</servlet-class></servlet>
  • getInitParameterNames()
public String getInitParameter(String name): 可以根据传
入name获取具体的某一个参数。

其通过的是web.xml配置文件中的servlet元素中的init-param中的param-name寻找param-value值

<servlet><servlet-name>test2</servlet-name><servlet-class>test.test2</servlet-class><!--获取这个元素中的元素对--><init-param><param-name>address</param-name><param-value>hhhhhhhh</param-value></init-param><init-param><param-name>name</param-name><param-value>ggggg</param-value></init-param><init-param><param-name>age</param-name><param-value>463</param-value></init-param></servlet><servlet-mapping><servlet-name>test2</servlet-name><url-pattern>/t2</url-pattern></servlet-mapping>
  • getInitParameterNames()
public java.util.Enumeration<E>
getInitParameterNames():以 String 对象的 Enumeration
的形式返回 servlet 的初始化参数的名称,如果 servlet 没有
初始化参数,则返回一个空的

使用

Enumeration<String> e=  sc.getInitParameterNames();while (e.hasMoreElements()) {String string = (String) e.nextElement();s = sc.getInitParameter(string);System.out.println(string +"===="+ s);}

测试代码

import java.io.IOException;
import java.util.Enumeration;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class test2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletConfig sc = getServletConfig();String s = sc.getServletName();System.out.println("ServletName = "+s);System.out.println("--------");s = sc.getInitParameter("adress");System.out.println("adress = "+s);System.out.println("--------");Enumeration<String> e=  sc.getInitParameterNames();while (e.hasMoreElements()) {String string = (String) e.nextElement();s = sc.getInitParameter(string);System.out.println(string +"===="+ s);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(req, resp);}
}
out:
ServletName = test2
--------
adress = hhhhhhhh
--------
name====ggggg
adress====hhhhhhhh
age====463
ServletConfig的存在意义
  1. 未来我们自己开发的一些应用,使用到了一些技术,或者一些代码,我们不会。 但是有人写出来了。它的代码放置在了自己的servlet类里面。
  2. 刚好这个servlet 里面需要一个数字或者叫做变量值。 但是这个值不能是固定了。 所以要求使用到这个servlet的公司,在注册servlet的时候,必须要在web.xml里面,声明init-params

在开发当中比较少用。

JavaWeb之servlet(1)相关推荐

  1. javaweb利用servlet与struts2实现可点击刷新的基础图片验证码

    javaweb利用servlet实现图片验证码 验证码是登录验证的技术,可以一定程度防止恶意脚本刷网站,造成服务器压力. 具体实现思想很简单: 首先利用servlet产生一个随机的验证码, 保存在se ...

  2. java web 请求跟踪_IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie技术

    原标题:IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie技术 Cookie使用HTTPHeader传递数据.Cookie机制定义了两种报头,Set-Cookie报头和Cookie报 ...

  3. html与java接口,JavaWeb学习——Servlet相关的接口和类

    JavaWeb学习--Servlet相关的接口和类 摘要:本文主要学习了Servlet相关的接口和类. Servlet的接口和类 三种方式 实现Servlet有三种方式: 实现javax.servle ...

  4. javaweb(07) Servlet详解

    javaweb(07) Servlet详解 什么是Servlet 简介 从广义上来讲,Servlet规范是Sun公司制定的一套技术标准,包含与web应用相关的一系列接口,是web应用实现方式的宏观解决 ...

  5. 基于javaweb+JSP+Servlet简单购物车

    基于javaweb+JSP+Servlet简单购物车 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 public ...

  6. 基于javaweb+JSP+Servlet电影票售票管理系统

    基于javaweb+JSP+Servlet电影票售票管理系统 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 } ...

  7. 基于javaweb+JSP+Servlet在线商城鲜花花卉商城(前台、后台)

    基于javaweb+JSP+Servlet在线商城鲜花花卉商城(前台.后台) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习, ...

  8. 基于javaweb+JSP+Servlet在线商城购物商城服装商城(前台、后台)

    基于javaweb+JSP+Servlet在线商城购物商城服装商城(前台.后台) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练 ...

  9. 基于javaweb+JSP+Servlet学生成绩管理系统(管理员、教师、学生)

    基于javaweb+JSP+Servlet学生成绩管理系统(管理员.教师.学生) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练 ...

  10. 【JavaWeb开发-Servlet】拾起海中的漂流瓶超强版

    目录 原版: 一.思路: 二.实现: 三.资源分享 四.部署服务器时记得修改文件路径 原版: [JavaWeb开发-Servlet]拾起海中的漂流瓶增强版_代码骑士的博客-CSDN博客[代码][Jav ...

最新文章

  1. python 浏览器显示本地文件夹_从浏览器中打开本地文件文件夹
  2. tungsten开机启动及进程开启停止
  3. SaltStack实战之数据系统-Grains
  4. DOM中的onbeforeunload函数
  5. 解决placeholder兼容性问题
  6. JavaSE(二十一)——栈和队列、栈和堆
  7. 每天一道LeetCode-----计算二叉树的最大路径和,路径只需要从一个节点到达另一个节点,无其他要求
  8. python反转列表解析_Python语法糖之:列表解析、集合解析和字典解析
  9. python常见的运算符有哪些_python基础知识--4常见运算符
  10. css+div排版如何支持所有浏览器
  11. CentOS通过进程ID查询运行文件的路径方法
  12. 决策树生成算法流程图
  13. nodeJS中express+busboy实现文件上传
  14. 小记(1)偷影子的人
  15. 深蓝英文字幕助手(一款看原声影片和英文字幕学英语的小软件)发布
  16. 01背包问题——大背包:
  17. Android开机启动流程
  18. 免费微信批量公众号采集文章方法
  19. android webview 播放视频总结,Android WebView 播放视频总结~
  20. ViewPagerIndicator

热门文章

  1. CodeForces - 1485D Multiples and Power Differences (构造+lcm)
  2. [EuroPython2021笔记] Python反面模式 -- 用空格的比用tab的收入高
  3. Windows10 Windows Store安装 应用商店重新安装
  4. 服务器未能识别网络,服务器无法识别url中特殊字符的处理方式
  5. filter grok 判断_logstash grok使用案例
  6. 孔雀东南飞用mysql存储_孔雀东南飞的故事简介800字(孔雀东南飞主要内容介绍)...
  7. jt808终端鉴权_GitHub - SmallChi/JT808: JT808协议、GB808协议、道路运输车辆卫星定位系统-北斗兼容车载终端通讯协议(支持2013、2019版本)...
  8. 图解通信原理与案例分析-2:如何用电信号来表示和传输0和1,远远比我们想象的要复杂得多
  9. iphonex蓝牙打不开转圈_iphonex蓝牙一直在转圈
  10. apache ab linux 下载,linux 下ab压力测试