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 相关文章推荐
springboot @ConfigurationProperties和@PropertySource的区别
Jun 11 Java/Android
SpringBoot整合JWT的入门指南
Jun 29 Java/Android
一篇文章带你学习Mybatis-Plus(新手入门)
Aug 02 Java/Android
Jpa Specification如何实现and和or同时使用查询
Nov 23 Java/Android
Spring Security使用单点登录的权限功能
Apr 03 Java/Android
Java GUI编程菜单组件实例详解
Apr 07 Java/Android
java高级用法JNA强大的Memory和Pointer
Apr 19 Java/Android
Java版 单机五子棋
May 04 Java/Android
SpringBoot全局异常处理方案分享
May 25 Java/Android
spring IOC容器的Bean管理XML自动装配过程
May 30 Java/Android
Mybatis-plus配置分页插件返回统一结果集
Jun 21 Java/Android
Android实现获取短信验证码并自动填充
May 21 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
生成sessionid和随机密码的例子
2006/10/09 PHP
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
PHP学习笔记之二 php入门知识
2011/01/12 PHP
一个基于PDO的数据库操作类
2011/03/24 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
用JavaScript实现仿Windows关机效果
2007/03/10 Javascript
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
pycharm激活码有效到2020年11月底
2020/09/18 Python
什么是python类属性
2020/06/10 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
实习指导老师评语
2014/04/26 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
任命书格式范文
2015/09/22 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS