Servlet的使用你掌握多少?

Posted 你这家伙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet的使用你掌握多少?相关的知识,希望对你有一定的参考价值。

servlet定位图以及核心作用

当用户输入url的时候,他的访问步骤依次如下
在这里插入图片描述
Servlet标准 API核心包
Servlet API有以下3个Java包:

  • javax.servlet(重点):其中包含定义Servlet和Servlet容器之间的类和接口
  • javax.servlet.http(重点):其中包含定义HTTP Servlet和Servlet容器之间的类和接口
  • javax.servlet.annotation:其中包含标注Servlet,Filter,Listener的注解

servlet客户端HTTP请求

  • 客户端Request常见报头
    当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP请求的头的一部分进行传输的
    在这里插入图片描述
  • 操作HTTP Request头的方法
    下面的方法可用早servlet程序读取HTTP头,这些方法通过 HttpServletRequest 对象使用

在这里插入图片描述
代码示例
1.首先在webapp下创建一个静态文件requestTest.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--创建一个form表单,用于给servlet发送请求-->
<!--请求动作可以是get也可以是post,然后我们这里请求到request,那么我们就需要创建一个request路由-->
<form action="Get" action="request">
    <input name="uname" placeholder="请输入用户名">
    <input type="submit" value=" 提  交 ">
</form>
</body>
</html>

2.写动态的servlet,那么就需要在两个地方进行写入

  • 创建一个servlet后端类
  • 在web.xml配置一组路由信息

2.1首先写后端类requestServlet

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;

//必须继承HttpServlet
public class requestServlet extends HttpServlet {
    //重写doGet()方法和doPost()方法

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //拿到参数的值
        String uname = req.getParameter("uname");
        //拿到request的方法
        String methed = req.getMethod();
        //得到url
        String url = req.getContextPath();
        //获取协议的名称
        String pocl = req.getProtocol();
        //获取编码
        String encoding = req.getCharacterEncoding();

        //然后把这些内容写回给客户端,首先设置编码格式和类型,然后再是返回的内容
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        PrintWriter writer = resp.getWriter();
        writer.println(String.format("<h1>请求参数: %s</h1>",uname));
        writer.println(String.format("<h2>method: %s</h2>",methed));
        writer.println(String.format("<h3>url: %s</h3>",url));
        writer.println(String.format("<h4>协议名称pocl: %s</h4>",pocl));
        writer.println(String.format("<h5>编码encoding: %s</h5>",encoding));
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //我们让doPost方法直接调用doGet方法
        this.doGet(req,resp);
    }
}

2.2 在web.xml配置一组路由信息

    <servlet>
        <servlet-name>reqServlet</servlet-name>
        <servlet-class>requestServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>reqServlet</servlet-name>
        <url-pattern>/request</url-pattern>
    </servlet-mapping>

验证结果
在这里插入图片描述

Servlet服务器HTTP响应

服务器端Response常见报头

在这里插入图片描述

操作HTTP Response头的方法

在这里插入图片描述
代码案例:
如拿到当前的时间,然后每隔一秒进行一次刷新操作
步骤:
1.创建一个servlet后端类
2.在web.xml配置一组路由信息
后端类代码

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;
import java.util.Date;

public class MyResponseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //刷新操作,设置成1s刷新一次
        resp.setIntHeader("Refresh",1);
        //设置响应类型
        resp.setContentType("text/html");
        //设置编码格式,如果不设置会出现乱码
        resp.setCharacterEncoding("utf-8");
        //写入body信息
        PrintWriter writer = resp.getWriter();
        writer.println(String.format("<h1>当前时间: %s</h1>",new Date()));
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

配置web.xml

<servlet>
    <servlet-name>myResponseServlet</servlet-name>
    <servlet-class>MyResponseServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>myResponseServlet</servlet-name>
    <url-pattern>/response</url-pattern>
  </servlet-mapping>

然后进行打包部署到Tomcat上,进行访问
在这里插入图片描述

简单实现一个404页面

在当我们访问一个页面的时候,输入的url是无效的就会出现404错误,比如最简单的就是出现一个
在这里插入图片描述
比如上图中右边的404页面如何显示在我们的servlet中呢?
步骤:

  • 因为这张图面是一个静态页面,而所有静态的资源都放在webapp下,那么我们就在webapp下创建一个包(imgs)来存放你的这张静态页面
  • 然后创建一个servlet后端类
  • 配置web.xml文件
  • 打包部署到Tomcat上
    1.首先将这张静态页面保存在webapp下
    在这里插入图片描述
    2.创建一个servlet后端类
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;

public class NotFountServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setStatus(404);
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        writer.println("<img src = 'http://localhost:8080/responseTest/imgs/404.png' />");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
}

3.配置web.xml文件

 <servlet>
    <servlet-name>notFountServlet</servlet-name>
    <servlet-class>NotFountServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>notFountServlet</servlet-name>
    <url-pattern>/404</url-pattern>
  </servlet-mapping>

4.打包部署,然后验证结果
在这里插入图片描述
感兴趣的话可以通过抓包工具进行抓包查看

以上是关于Servlet的使用你掌握多少?的主要内容,如果未能解决你的问题,请参考以下文章

关于服务连接器(Servlet)你了解多少?

Java看看关于代码块的这些知识,你掌握了多少?

第9章WEB09-Servlet篇

UIKit框架使用总结--看看你掌握了多少

根据要求完成表单以及使用servlet处理表单 任务要求 掌握Servlet输出表单和接收表单数据(多值组件的读取)。

以下代码片段的时间复杂度是多少?