JavaWeb 入门:Hello Servlet

目录
  • Servlet 概述
  • Hello Servlet
  • 总结

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

工程结构

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>

测试:

Servlet的运行过程

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

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

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 访问其他的具体的路径仍然不变

总结

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

(0)

相关推荐

  • javaweb servlet生成简单验证码

    本文实例为大家分享了javaweb servlet生成验证码的具体代码,供大家参考,具体内容如下 package com.serv; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.s

  • JavaWeb中Servlet的深入讲解

    Servlet 1 Servlet 简介 Servlet就是Sun 公司开发动态web的一门技术 Sun在这些API中提供一个接口叫做:Servlet ,如果你向开发一个Servlet程序,只需要完成两个小步骤 编写一个类,实现Servlet接口 把开发好的Java类部署到web服务器中 把实现Servlet接口的Java程序叫做 Servlet 2 HelloServlet 构建一个普通的Maven项目,删除里面的src目录.这个空的工程就是Maven主工程 关于Maven父子工程的理解: 父

  • JavaWeb Servlet实现网页登录功能

    上次写了一篇JDBC工具类实现登录功能,但是只能在控制台实现输入用户名密码.这次使用了Servlet来实现登录功能,可以通过在页面上输入账号密码,然后提交表单,查询数据库,从而实现登录功能. 1.配置文件,导入jar包 2.创建数据库环境 use student; create table user( id int primary key auto_increment, username varchar(32), password varchar(32) ); insert into user

  • JavaWeb servlet实现下载与上传功能的方法详解

    本文实例讲述了JavaWeb servlet实现下载与上传功能的方法.分享给大家供大家参考,具体如下: 本文内容: servlet实现下载功能 servlet实现上传功能 首发日期:2018-07-21 servlet实现下载功能 实现流程 1.首先制作一个jsp页面,主要是用来触发下载的.这里可以根据你的想法来做,当然servlet那边就要相应的更改了.我这里使用一个简单的a标签来触发. 2.设置响应信息,告诉浏览器要将传过来的数据识别成下载:根据提交上来的数据找到对应文件,转成流,返回给浏览

  • Servlet实现共享数据JavaWeb组件的几种方法

    目录 一.Servlet简介 二.Servlet的运行过程 Servlet组件: 多个Servlet之间共享数据实现方案 转发与重定向 全局作用域对象 Servlet JavaWeb三大组件包括,Servlet组件(接受请求,响应数据),Filter组件(过滤,拦截请求),Listener组件(监听器),这三大组件构成了javaWeb核心内容,也是作为后端来说,JavaWeb最重要的内容. 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其

  • JavaWeb 入门:Hello Servlet

    目录 Servlet 概述 Hello Servlet 总结 Servlet 概述 serlvet sun公司 开发动态web 的一门技术. Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容. 广义的Servlet是指任何实现了这个Servlet接口的类,.Servlet运行于支持Java的应用服务器中.从原理上讲,Servle

  • JavaWeb入门教程之分页查询功能的简单实现

    一.MySql实现分页查询的SQL语句 1.分页需求: 客户端通过传递pageNo(页码),counter(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下: 比如: 查询第1条到第10条的数据的sql是:select * from table limit 0,10;   ->对应我们的需求就是查询第一页的数据:select

  • JavaWeb案例讲解Servlet常用对象

    概述 本次文章基于第三章的ServletConfig,ServletContext,HttpServletRequest,HttpServletResponse对象完成一个图书订阅系统的购买图书和查看图书购买记录功能. 搭建项目主页面 创建一个动态网站项目,在src中新建包com.book.servlet. 在包中,新建HomeServlet作为主页.效果图如下: 为了让一访问项目根路径地址就默认进入HomeServlet,这里需要将 HomeServlet的虚拟地址写入web.xml文件中作为

  • JavaWeb入门:ServletContext详解和应用

    目录 1.获取web 程序启动时初始化参数 2.实现多个Servlet 对象共享数据 测试: 3.读取web应用下的资源 4.请求转发 总结 当Servlet 容器启动的时候 会为每个web应用创建一个ServletContext 对象代表当前的web应用. 在web.xml 文件中不止可以配置Servlet的初始化信息 还可以给整个web应用配置初始化信息. 1.获取web 程序启动时初始化参数 web.xml 设置需要初始化的参数 <!--1.获取web应用程序初始化参数--> <c

  • JavaWeb入门:HttpResponse和HttpRequest详解

    目录 HttpResponse 讲解 HttpServletResponse概述: Response运行流程 设置响应行 设置响应头 一个小demo 实现刷新 页面累加 设置字符编码 解决中文乱码问题 重定向 redirect request转发 重定向和转发的区别 文件下载 HttpRequest 讲解 HttpServletRequest概述 Request 运行流程 获取请求携带的参数 获取多个参数的值 获得请求行的信息 request实现转发 request是一个域对象 ServletC

  • JavaWeb 入门篇:创建Web项目,Idea配置tomcat

    目录 创建一个maven项目 项目结构 添加框架 在pom.xml 中添加如下依赖 配置tomcat 添加完如下图: 解决导入包问题: 启动测试: 总结 创建一个maven项目 项目结构 添加框架 在pom.xml 中添加如下依赖 dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <versi

  • IDEA新建javaWeb以及Servlet简单实现小结

    刚开始用IDEA开发,还不太熟悉,因此写一个教程,加深印象 1.新建一个Web项目 两种方法:java 和Java Enterprise(推荐) 第一种)通过Java工程创建,这个方法需要手动导入Tomcat的servlet包才能使用servlet 导入包的方法是创建项目并配置好Tomcat后,File->Project Structure,点击 Modules --> 选中项目"JavaWeb" -->切换到 Dependencies 选项卡 --> 点击右边

  • 解决Javaweb 提交表单到servlet时出现空白页面,但网站不报错问题

    目录 问题描述 截图如下 解决方法 立马见效 javaweb后端调用servlet出现空白 例如 问题描述 提交表单到servlet时出现空白页面,但又网站不报错 截图如下 遇到这个问题查找了很多,仍没有解决,刚开始接触IDEA,以为是路径配置问题,去看@WebServlet和XML,捣了半天,发现没问题,就只有这一个servlet访问不了,其他都能行,最后发现是自己doGet方法没加 this.doPost(request, response); (之前使用eclipse是这段代码自动生成的,

  • Java Web编程之Servlet技术详解

    Java Web编程之Servlet技术,知多少? 1.Servlet基础 针对Servlet技术开发,Sun公司提供了一些列接口和类,其中最重要的是javax.servlet.Servlet接口,两个重要的包是javax.servlet和javax.servlet.http,Servlet就是一种实现了Servlet接口的类,它由Web容器(Tomcat/Jetty等)负责调用并创建,用于接收和响应用户请求.Servlet接口中定义了5个抽象方法: Servlet顶层类结构如下所示: 2.第一

  • JavaWeb中HttpSession中表单的重复提交示例

    表单的重复提交 重复提交的情况: ①. 在表单提交到一个 Servlet,而 Servlet 又通过请求转发的方式响应了一个 JSP(HTML)页面,此时地址栏还保留着 Servlet 的那个路径,在响应页面点击 "刷新". ②. 在响应页面没有到达时,重复点击 "提交按钮" ③. 点击返回,再点击提交 不是重复提交的情况:点击 "返回","刷新" 原表单页面,再点击提交. 如何避免表单的重复提交:在表单中做一个标记,提交到

随机推荐