JavaWeb 入门:Hello Servlet


Posted in Java/Android onJuly 16, 2021

Servlet 概述

  • serlvet sun公司 开发动态web 的一门技术。
  • Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
  • 广义的Servlet是指任何实现了这个Servlet接口的类,。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
  • sun公司在api 中提供了一个接口 如果我们想要开发一个servlet程序 我们只需要做到两点

1、写一个普通类实现servlet 这个接口

2、把写好的servlet 放进服务器。

sun公司给出了两个默认的实现类 HttpServlet 和 GenericServlet

Hello Servlet

工程结构

JavaWeb 入门:Hello Servlet

1、创建一个maven 项目 添加web框架(将web.xml 换成最新的4.0 后面有完整配置文件) 配置tomcat

2、导入依赖

dependencies>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
    </dependency>
  </dependencies>

3、编写一个Servlet程序 编写一个普通类实现HttpServlet接口

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
 * @author crush
 *  idea 提示快捷键  alt + enter
 *  重写快捷键 是 ctrl + o
 */
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.print("hello Servlet");
        System.out.println("");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

4、编写Servlet 的映射

为什么需要映射?我们是不是需要通过浏览器去访问,而浏览器需要连接web服务器,需要在web 服务器注册我们写的servlet,还需要给它一个浏览器能够访问的路径。

<?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">
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

测试:

JavaWeb 入门:Hello Servlet

Servlet的运行过程

Servlet程序是由Web服务器调用的,Web服务器收到客户端的Servlet访问请求后:

  • ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步;
  • ②装载并创建该Servlet的一个实例对象;
  • ③调用Servlet实例对象的init()方法;
  • ④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去;
  • ⑤Web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

JavaWeb 入门:Hello Servlet

5、Mapping 问题:

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

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

2、一个Servlet 可以指定多个映射路径

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
</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>

3、一个Servlet 可以指定通用映射路径

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello.*</url-pattern>
</servlet-mapping>

4、默认请求路径

<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.crush.servlet.HelloServletDays</servlet-class>
</servlet>    
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

5、可以指定一些前缀或者后缀

<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.crush.servlet.HelloServletDays</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>*.crush</url-pattern>
</servlet-mapping>

6、优先级问题

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

模拟指定error 页面

1、写一个ErrorServlet 类

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
 * @Author: crush
 * @Date: 2021-05-07 23:03
 * version 1.0
 */
public class ErrorServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.print("404");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

2、配置映射路径

<servlet>
    <servlet-name>error</servlet-name>
    <servlet-class>com.crush.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

测试:访问不存在的路径 会直接到访问我们自己写的ErrorServlet 访问其他的具体的路径仍然不变

JavaWeb 入门:Hello Servlet

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!

Java/Android 相关文章推荐
在Java中Collection的一些常用方法总结
Jun 13 Java/Android
解决Maven项目中 Invalid bound statement 无效的绑定问题
Jun 15 Java/Android
使用Springboot实现健身房管理系统
Jul 01 Java/Android
Java实现给Word文件添加文字水印
Feb 15 Java/Android
Java十分钟精通进阶适配器模式
Apr 06 Java/Android
Spring Data JPA框架的核心概念和Repository接口
Apr 28 Java/Android
Java 轮询锁使用时遇到问题
May 11 Java/Android
mybatis 获取更新记录的id
May 20 Java/Android
详解Spring Bean的配置方式与实例化
Jun 10 Java/Android
Android Gradle 插件自定义Plugin实现注意事项
Jun 16 Java/Android
Spring Boot优化后启动速度快到飞起技巧示例
Jul 23 Java/Android
Spring boot实现上传文件到本地服务器
Aug 14 Java/Android
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
mybatis 获取无数据的字段不显示的问题
Jul 15 #Java/Android
Lombok的详细使用及优缺点总结
Jul 15 #Java/Android
Java Socket实现多人聊天系统
看完这篇文章获得一些java if优化技巧
解决Jenkins集成SonarQube遇到的报错问题
java固定大小队列的几种实现方式详解
Jul 15 #Java/Android
You might like
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
PHP stripos()函数及注意事项的分析
2013/06/08 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
Avalonjs 实现简单购物车功能(实例代码)
2017/02/07 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
js实现随机点名小功能
2017/08/17 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
小程序实现多选框功能
2018/10/30 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
python套接字流重定向实例汇总
2016/03/03 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
python requests 测试代理ip是否生效
2018/07/25 Python
解读python如何实现决策树算法
2018/10/11 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
护士自荐信范文
2013/12/15 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
高中生物教学反思
2016/02/20 职场文书
Java 数组的使用
2022/05/11 Java/Android