一.Servlet简介

  • Servlet为sun公司开发动态web的一门技术
  • Sun公司在这些API中提供了一个接口叫做:Servlet,如果想开发Servlet程序,需要完成两个小步骤:
    • 编写一个类,实现Servlet接口。
    • 把开发好的java类部署到Web服务器中。

我们把实现了Servlet接口的Java程序叫做,Servlet。

二.构建一个Servlet项目

步骤:

  1. 使用Maven搭建父项目,删除src文件用于之后搭建子项目

  2. 在父项目的pom.xml中导入依赖

  3. 在父项目中搭建带有webapp骨架的子项目

  4. 由于子项目中的web.xml版本过低,修改web.xml

  5. 在子项目中添加java和resources目录

  6. 编写第一个Servlet代码:

    1. 建立HelloServlet.java 继承HttpServlet重写doGet和doPost方法

    2. 在web.xml中注册Servlet以及绑定映射的请求路径

    3. 配置Tomcat 启动项目

    4. 学习mapping映射规则,编写ErrorServlet

1.构建一个普通的Maven项目,删掉里面的src目录,目的是以后在其中建立Module产生子模块;这个空的工程就是Maven的主工程;

删除src文件夹

在pom.xml中添加依赖

 <dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
</dependencies>

2.添加子模块

此时可以看到父项目中pom.xml多了modules属性

 <modules>
<module>servlet191127</module>
</modules>

子项目中pom.xml有

 <parent>
<artifactId>LearnServlet</artifactId>
<groupId>edu.ustc</groupId>
<version>1.0-SNAPSHOT</version>
</parent>

3.Maven环境优化

  • 修改web.xml中的web-app属性为4.0
 <?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_4_0.xsd"
version="4.0"
metadata-complete="true"> <display-name>Archetype Created Web Application</display-name>
</web-app>
  • 将maven项目构建完成添加java和resources目录并设置为代码和资源属性的目录

4.编写一个Servlet程序

Servlet接口Sun公司有两个默认的实现类:HttpServlet,GenericServlet

  • 编写一个普通类HelloServlet,我们可以重写doGet和doPost方法。
  • 实现Servlet接口,这里我们直接继承HttpServlet。

 public class HelloServlet extends HttpServlet {

     //由于get/post方式只是请求实现方式不同,可以相互调用,业务逻辑都一样。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter(); //响应流
writer.println("First Servlet Project");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}

5.编写Servlet的映射

  • 我们写的Java程序需要在web服务中注册我们写的Servlet,当用户通过浏览器访问web服务器后,服务器直接映射到我们的Servlet并且我们还要给浏览器一个可以访问的路径。

 <!--注册Servlet-->
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>ustc.wzh.servlet.HelloServlet</servlet-class>
</servlet> <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

6.配置tomcat(看我的其他文章就可学会)

注:配置项目发布的路径就可以了

7.启动测试

第一个Servlet项目完成!

三.Servlet原理

四.Mapping问题

1.一个Servlet可以指定一个映射路径

 <!--注册Servlet-->
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>ustc.wzh.servlet.HelloServlet</servlet-class>
</servlet> <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

2.一个Servlet可以指定多个映射路径,都能访问到

     <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>

3.一个Servlet可以指定通用映射路径:所有/hello下的请求都能访问到

 <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>

4.默认请求路径:任何请求都到这里

     <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

5.指定一些前缀或后缀的路径:都能匹配到并处理

     <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>*.wzh</url-pattern>
</servlet-mapping>

注:可以使用通配符的两种格式

  • *.扩展名: *.do 或 *.xxx

  • /* : hello/*
  • 但不可以混合使用 hello/*.do 是非法的

6.优先级问题:

  指定了固有的映射路径优先级最高,找不到就会走默认的处理请求

例子:添加ErrorServlet

 public class ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8"); PrintWriter writer = resp.getWriter();
writer.println("<h1>404</h1>");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

web.xml中添加Servlet的映射

     <!--注册Servlet-->
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>ustc.wzh.servlet.ErrorServlet</servlet-class>
</servlet> <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

请求就不会进入index.jsp,所有错误请求都会进入ErrorServlet中处理,如果输入/hello则会进入HelloServlet中处理。

2.Servlet入门的更多相关文章

  1. HTTP协议 Servlet入门 Servlet工作原理和生命周期 Servlet细节 ServletConfig对象

    1 HTTP协议特点   1)客户端->服务端(请求request)有三部份     a)请求行--请求行用于描述客户端的请求方式.请求的资源名称,以及使用的HTTP协议版本号 请求行中的GET ...

  2. 浅谈JavaWEB入门必备知识之Servlet入门案例详解

    工欲善其事.必先利其器,想要成为JavaWEB高手那么你不知道servlet是一个什么玩意的话,那就肯定没法玩下去,那么servlet究竟是个什么玩意?下面,仅此个人观点并通过一个小小的案例来为大家详 ...

  3. java之servlet入门操作教程一续

    本节主要是在java之servlet入门操作教程一  的基础上使用myeclipse实现自动部署的功能 准备: java之servlet入门操作教程一 中完成myFirstServlet项目的创建: ...

  4. servlet入门与进阶

    servlet入门与进阶 1.servlet基础认知 Servlet(Server Applet):全称Java Servlet,是用Java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据, ...

  5. JavaWeb之Servlet入门(二)

    1. 准备 在JavaWeb之Servlet入门(一)中,我们完成了第一个Servlet程序,完成了从URL到后台控制器的中转过程,接下来我们延续JavaWeb之Servlet入门(一)学习下如何传参 ...

  6. Servlet视频学习笔记 57-58 (servlet入门和调用过程)

    网易云课堂<30天轻松掌握JavaWeb视频>servlet部分 课时57 servlet开发入门 servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术.S ...

  7. Servlet入门和ServletConfig、ServletContext

    Servlet是一门用于开发动态web资源的技术. 若想开发一个动态web资源,需要完成以下2个步骤: 1)编写一个Java类,实现servlet接口: 2)把开发好的Java类部署到web服务器中. ...

  8. servlet入门学习之工作原理解析

    从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...

  9. Servlet入门实践

    本文主要介绍servlet,包括入门到升入,基本上可以对servlet有一个很好的认识: 1servlet介绍:   Servlet(Server Applet),全称Java Servlet,未有中 ...

  10. Servlet入门和HTTP。

    Servlet: 1.概念:Servlet:server applet  ,运行在服务器端的小程序.   浏览器在访问服务器的动态资源时,访问的是具有逻辑性的Java代码(Java类),而这里的Jav ...

随机推荐

  1. [CF24A]Ring road(2019-11-15考试)

    题目大意 给你一个\(n\)个点的环,每条边有方向,改变第\(i\)条边的方向代价为\(w_i\),问将其改为强连通图的最小代价.\(n\leqslant100\) 题解 求出把边全部改为顺时针和全部 ...

  2. MVC学习笔记(六)---遇到的小问题汇总

    一.MVC中Controller中返回两个对象的写法如下: , msg = "成功", user = user, userInfo = person }); 二.前台向后台传入带有 ...

  3. 浏览器标签页切换时jquery动画的问题

    最近公司在做大屏设备上的页面,其中动画的部分居多,开始的时候是用的jquery做的动画,在做完后无意中发现jquery动画存在一个问题,就是浏览器在切换标签页后,过段时间切换回来页面中的动画会出现连续 ...

  4. 解决javaScript在不同时区new Date()显示值不同问题

    在日期格式化时遇到的问题,日期格式化方法在最下面 如果在中国时区    formatDate('2019-07-09')  结果是 ‘2019-07-09’ 如果 在夏威夷时区 utc-10:00 或 ...

  5. vue+element-ui上传图片时压缩大小

    第一种方法:需要安装一个模块 yarn add image-conversion --save <el-upload ref="upload" :data="dat ...

  6. sweetalert 弹框简单使用

    sweetalert网站 简单使用教程 拷贝文件 放到项目中 使用 页面效果 修改代码应用到事件中 成功删除演示(后台数据也会删除) 作 者:郭楷丰 出 处:https://www.cnblogs.c ...

  7. 2019最新Android常用开源库总结(附带github链接)

    前言 收集了一些比较常见的开源库,特此记录(已收录350+).另外,本文将持续更新,大家有关于Android 优秀的开源库,也可以在下面留言. 一 .基本控件 1.TextView HTextView ...

  8. Golang: 读取文件并统计内容

    上次我们从命令行接收用户输入,并统计了每次输入内容出现的次数,今天对程序加以改造,使其能够读取文件内容,并统计每行文本出现的次数. 首先,我们把接收输入的逻辑封装成一个函数: // scan.go p ...

  9. 【干货】gitlab-11.10.4版本汉化

    目录 1.YUM安装gitlab-11.10.4 2.gitlab汉化技能 1.YUM安装gitlab-11.10.4 下载gitlab-ce的repo [root@localhost ~]# cur ...

  10. 使用jmeter 设计流程发起测试

    业务场景 需要实现用户在登录后,能够持续的发起流程. 需要注意的点: 1.使用不同的用户登录. 2.登录后发起可以持续的发起流程. 实现步骤 1.先使用badboy 录制脚本. 2.使用jmeter ...