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. ecshop面包屑修改

    找到includes 找到lib_main.php 大约163样左右 /* 处理有分类的 */这段代码下面的一行修改成的对应的自己网站的分类,类似这样: 注释掉180行到194行左右,然后添加自己的分 ...

  2. 基于C#的机器学习--微基准测试和激活功能

    本章我们将学习以下内容: l  什么是微基准测试 l  如何将它应用到代码中 l  什么是激活函数 l  如何绘制和基准测试激活函数 每个开发人员都需要有一个好的基准测试工具.质量基准无处不在;你们每 ...

  3. 【分治】黑白棋子的移动-C++

    题目描述 有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况: ○○○○○●●●●● 移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也 ...

  4. TCP、UDP和HTTP简述整理

    http:是用于www浏览的一个协议.tcp:是机器之间建立连接用的到的一个协议. 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.在网络层有IP协议.ICMP协议.ARP协议.R ...

  5. Python 3.5学习笔记(第一章)

    本章内容: 1.安装python 3.5 和 PyCharm 社区版 2.第一个python程序 3.变量 4.字符编码 5.用户输入 6.字符串格式化输出 7.if .else .elif 8.fo ...

  6. javascript之正则表达式(一)

    正则表达式:定义一套规则,检查字符串的用的.换句话说,就是记录文本规则的代码.适用于进行文字匹配工具,例如:(1)测试字符串的某个模式(2)替换文本(3)根据模式匹配从字符串中提取一个子字符串.语法: ...

  7. 洛谷P2172 [国家集训队]部落战争 题解

    题目链接:https://www.luogu.org/problemnew/show/P2172 分析: 不要被[国家集训队]的标签吓到,其实这题不是很难. 本题可以对比P4304 [TJOI2013 ...

  8. 分布式Streaming Data Processing - Samza

    ​ 现在的主流的互联网应用越来越依赖streaming data来提供用户一些interesting statistics insights.以linkedin为例,最近90天有多少人看过你的link ...

  9. 博客一键保存本地exe可视化界面文件

    说明 非常感谢nick老师的提点老师博客:https://home.cnblogs.com/u/nickchen121/ 项目连接 1.码云:https://gitee.com/wjup/html_t ...

  10. TCP概述\三次握手四次挥手\报文首部,常用熟知端口号

    06.26自我总结 1.TCP概述 TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为 ...