Java Servlet是运行在服务器端上的程序,Servlet是Java Servlet包中的一个接口,能够直接处理和相应客户端的请求,也可以将工作委托给应用的其他类。

public interface Servlet {
void init(ServletConfig var1) throws ServletException; ServletConfig getServletConfig(); void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException; String getServletInfo(); void destroy();
}

  这是Java Servlet包中的Servlet接口的源代码,init方法用于初始化,service用于响应请求,destroy用于销毁该Servlet。

public abstract class HttpServlet extends GenericServlet {
public HttpServlet() {
} protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ } protected long getLastModified(HttpServletRequest req) {} protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException} protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{} protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ } protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{} private Method[] getAllDeclaredMethods(Class<? extends HttpServlet> c) {} protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {} protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {} protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {} private void maybeSetLastModified(HttpServletResponse resp, long lastModified) {} public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {}
}

  这是Java Servlet包中的HttpServlet的所有方法(具体实现我删掉了),

  • 可以看到HttpServlet继承自GenericServlet,GenericServlet是一个实现了Servlet接口的抽象类,不过GenericServlet只是添加了一些用于日志操作的和从应用和Servlet配置中获取信息的方法。
  • HttpServlet提供了响应每种Http方法类型的实现。

1、使用maven引入Java Servlet包

    <!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

2、实现一个基本的HttpServlet类。

  创建一个继承自HttpServlet的HelloServlet类,这里调用参数HttpServletResponse中的getWriter方法,获得一个Java.io.PrintWriter.接下来再调用PrintWriter的println方法向输出流中输入文本“helloworld”+Serlet的名字

  这里的初始化仅仅只是添加了输出几句话而已,平常我们可以选择什么都不做。

public class HelloServlet extends HttpServlet {

    @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("helloworld" + this.getServletName());
} @Override
public void init() throws ServletException {
System.out.println("Servlet " + this.getServletName() + "has started");
} @Override
public void destroy() {
System.out.println("Servlet " + this.getServletName() + "has stopped");
}
}

3、部署Servlet

  打开Web.xml。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" id="data-fabric-web-tool"> <display-name>Hello World Application</display-name> <servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping> </web-app>

  其中<servlet></servlet>和<servlet-mapping></servlet-mapping>是部署的关键,而且它两是一一对应的。

  <servlet-name>是Servlet的名字,这里是任意设定的。

  <servlet-class>是使用的类

  <load-on-startup>的用处是,如果多个Servlet包含了该标签那么它们将按照标签内的大小顺序启动,数字越大启动得越晚。

  所以<servlet></servlet>就是将一个<servlet-class>中的servlet类命名为<servlet-name>这样应用程序运行的时候就会启动这个servlet

  <servlet-mapping></servlet-mapping>中的<servlet-name>和<url-pattern>配置之后,所有访问应用程序的URL/first都将由firstServlet处理。

  <servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>secondServlet</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/first</url-pattern>
<url-pattern>/third</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>/second</url-pattern>
</servlet-mapping>

  我们甚至可以这么来设置部署,这里的意思是一个Servlet可以使用不同的URL进行访问,如果两个Servlet有着相同的逻辑,但链接到不同的数据库,我们可以使用相同的类。

  所以最后实现了两个Servlet的实例,它们使用的是相同的Servlet类,名字不同,被映射到了不同的URL上,而且这里有两个不同的URL指向firstServlet。

4、使用Tomcat+IDEA运行测试

  点击Run,添加Tomcat Server,在Deployment中点击+号,点击Aetifact添加项目,修改Application context,下图这样运行项目的时候浏览器可以通过这个"http://localhost:8080/hello-world/"URL进行访问

5、效果

JavaWeb——Servlet开发1的更多相关文章

  1. 【Java123】JavaWeb Servlet开发

    http://www.runoob.com/servlet/servlet-intro.html https://www.cnblogs.com/xdp-gacl/tag/JavaWeb学习总结/de ...

  2. JavaWeb——Servlet开发

    什么是Servlet? Servlet运行的过程 Servlet的生命周期 生命周期的各个阶段 Servlet的配置 使用Web.xml配置 使用注解配置 Servlet相关接口 ServletCon ...

  3. JavaWeb——Servlet开发3

    1.使用初始化参数配置应用程序 初始化参数的方式有两种 在Web.xml文件中使用<context-param>标签声明上下文初始化参数 <context-param> < ...

  4. JavaWeb——Servlet开发2

    1.HttpServletRequest的使用 获取Request的参数的方法. 方法getParameter将返回参数的单个值 方法getParameterValues将返回参数的值的数组 方法ge ...

  5. javaweb学习之Servlet开发(二)

    javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...

  6. JavaWeb学习总结第四篇--Servlet开发

    Servlet开发 用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种请 ...

  7. JavaWeb开发之四:servlet技术 黑马程序员_轻松掌握JavaWeb开发之四Servlet开发 方立勋老师视频教程相当的经典

    总结: 记住:servlet对象在应用程序运行的过程中只创建一次,浏览器每次访问的时候,创建reponse对象 request对象,然后调用servlet的service方法,reponse对象和re ...

  8. javaweb学习总结(五)——Servlet开发(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  9. javaWeb中servlet开发(5)——WEB开发模式:Mode I与Mode II

    1.servlet开发 2.model I模式 客户端通过访问JSP,调用里面的javabean,而通过javabean调用处理数据库的操作,javabean中有专门处理数据库的操作,数据库主要以DA ...

随机推荐

  1. 基于Django框架 CRM的增删改查

    思路: 创建表------从数据库读出数据展示出来------配置路由-----写视图函数------写对应页面 练习点: 数据库建表 ORM 数据库数据读取 数据 ModelForm  (form组 ...

  2. Keep It Simple

    The KISS principle, or Keep It Simple, Stupid, spans many trades, industries, and professions. The m ...

  3. 究竟什么是Windows句柄

    图解说明——究竟什么是Windows句柄     这里需要说明: 1.这里将句柄所能标识的所有东西(如窗口.文件.画笔等)统称为“对象”. 2.图中一个小横框表示一定大小的内存区域,并不代表一个字节, ...

  4. Java面试题 equals()与"=="的区别?

    面试官:请问 equals() 和 "==" 有什么区别? 应聘者: equals()方法用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object ...

  5. Docker笔记(二):Docker管理的对象

    原文地址:http://blog.jboost.cn/2019/07/14/docker-2.html 在Docker笔记(一):什么是Docker中,我们提到了Docker管理的对象包含镜像.容器. ...

  6. c++学习书籍推荐《C++ Primer(中文版)(第5版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer(中文版)(第5版)>编辑推荐:一书在手,架构无忧:三十位一线架构师真知实践:百位架构师献计献策:十万文字尽显架构精华. 媒 ...

  7. tomcat问题解决

    tomcat问题解决 运行tomcat环境下,idea中出现 error running 项目名address localhost1099 is already in use 的时候,如何解决? 1, ...

  8. Windows下GIT的使用方法

    文章引用自:Git使用教程    https://www.cnblogs.com/tugenhua0707/p/4050072.html 本文章只限用于Windows,敬请参考 注意:操作命令纯属手敲 ...

  9. C# 使用Quartz简单实例以及备忘

    一.导入NuGet  二.创建一个类并实现接口Ijob,并实现该接口中的方法. using Buday.Gold.Cusumer.Lib; using Quartz; using System; us ...

  10. Socket编程(C语言实现):bind()函数英文翻译

    本篇翻译的bind()函数,我参考的国外网站是: bind 朋友们可以自由转载我对英文的中文翻译,但是对于"作者注:"的描述,转载时请注明出处和作者,否则视为侵权. 下面是翻译的正 ...