七、Servlet

七、Servlet

1、Servlet技术

1.1、什么是Servlet

1、Servlet 是JavaEE规范之一。规范就是接口

2、Servlet 是JavaWeb三大组件之一

3、JavaWeb三大组件就是:Servlet程序、Filter过滤器、Listener监听器

4、Servlet是运行在服务器上的员工java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

5、Servlet=Server+applet

6、Servlet:服务端的小程序

7、例子

image-20230408220725800

❤️❤️❤️❤️8、过程

image-20230408220813463

1.2、实现Servlet程序

1、步骤

1、编写一个类去实现Servlet接口

2、实现service方法,处理请求,并响应数据

3、到web.xml中去配置servlet程序的访问地址

2、例子

1、java代码(servlet)

package com.qtServlet;

import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello Servlet 被访问了");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

2、web.xml

<?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>helloServlet</servlet-name>
        <servlet-class>com.qtServlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/helloServlet</url-pattern>
    </servlet-mapping>

</web-app>

3、index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>w我是首页</title>
</head>
<body>
    <h1>我是大刷个!!!</h1>

    <a href="/06_servlet/helloServlet">进入servlet</a>
</body>
</html>

3、路径

image-20230408225921918

1.3、Servlet地址如何定位到Servlet程序

1、图解

image-20230408211113884

1.4、Servlet生命周期

1、方法顺序

image-20230408213918732

1.5、GET和POST请求的分发处理

1、内容

image-20230408214020356

1.6、通过继承HTTPServlet实现Servlelt程序

1、方法

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这里是Get方法");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这里是POST方法");
    }

1.7、使用Idea创建Servlet

1、步骤

1、对src右键,New,Servlet

1.8、整个Servlet类的继承体系

1、继承体系图

image-20230409010255730

2、ServletConfig类

1、是servlet程序的配置信息类

2、Servlet程序和ServletConfig对象都是Tomcat负责创建,我们负责使用

3、Servlet查询默认第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象

4、每个ServletConfig信息在每个Servlet是独立的

2.1、ServletConfig类的三大作用

1、可以获取Servlet程序的别名servlet-name的值

2、获取初始化参数init-param的值

3、获取去ServletContext对象

4、该类一般在 init中使用

5、重写init方法里面,一定要调用弗雷的init(ServletConfig)操作

3、ServletContext类

3.1、什么是ServletContext

1、ServletContext是一个接口,表示Servlet上下文

2、一个web工程,只有一个ServletC对象实例

3、ServletContext对象是一个域对象

4、ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁

1、什么是域对象

1、域对象,是可以像Map一样存取数据的对象,叫域对象

2、这里的域指的是存取数据的操作范围,整个web工程。

2、Map和域对象比较

image-20230410121051908

3.2、ServletContext类的四个作用

1、内容

1、获取web.xml 中的配置上下文参数context-param

2、获取当前的工程路径,格式:/工程路径

3、获取工程部署后在服务器硬盘上的绝对路径

4、像Map 一样存取数据

2、例子

1、xml文件

<servlet>
        <servlet-name>ContextServlet</servlet-name>
        <servlet-class>com.qt.Servlets.ContextServlet</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql:localhost:3306/test</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>root</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>ContextServlet</servlet-name>
        <url-pattern>/context2</url-pattern>
    </servlet-mapping>

2、java文件

package com.qt.Servlets;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ContextServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException {
//        super.init();
        ServletContext context = getServletConfig().getServletContext();

//        获取初始化参数init-param
        System.out.println("初始化参数username的值是:"+context.getInitParameter("username"));
        System.out.println("初始化参数url的值是:"+context.getInitParameter("url"));
//        获取ServletContext对象
        System.out.println(context);

        System.out.println("当前工程路径"+context.getContextPath());

        System.out.println("工程部署的路径:"+context.getRealPath("/"));

//        System.out.println("工程下的css");

        System.out.println("保存之前,获取Context的key1值是:"+context.getAttribute("key1"));

        context.setAttribute("key1","value1");

        System.out.println("获取Context的key1值"+context.getAttribute("key1"));
    }
}

4、HTTP协议

4.1、什么是HTTP协议

1、内容

1、协议是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议。

2、HTTP协议,是指客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫HTTP协议

3、HTTP协议中的数据也叫报文。

4.2、请求的HTTP协议的格式

1、客户端给服务器发送的数据叫请求

2、服务器给客户端回传数据叫响应

3、请求又分为GET请求和POST请求

1、GET请求内容格式

1、内容

image-20230410134507608

2、图解

image-20230410134545951

2、POST请求内容格式

1、内容

image-20230410134635989

2、图解

image-20230410134654055

3、常用的请求头说明

请求头 说明
Accept 表示客户端可以接受的数据类型
Accept-Language 表示客户端可以接收的语言类型
User-Agent 表示客户端浏览器的信息
Host 表示请求时的服务器ip和端口号

4、哪些是GET请求,哪些是POST请求

1、GET请求

Get请求有:
form标签 method=get
a标签
link标签引入css
Script标签引入js文件
img标签引入图片
iframe引入html页面
在浏览器地址栏中输入地址后回车

2、POST请求

POST请求有:
form标签 method=post

4.3、响应的HTTP协议格式

1、内容

image-20230410135234572

2、图例

image-20230410135254968

4.4、常用的响应码说明

响应码 说明
200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)
500 表示服务器已经收到请求,但服务器内部错误(代码错误)

4.5、MIME类型说明

1、说明是MIME

1、MIME是HTTP协议中的数据类型

2、MIME的英文全称是“Multipurpose Internet Mail Extensions”多功能的Internet邮件扩充服务。

3、MIME类型的格式是"大类型/小类型",并与某一种文件的扩展名相对应

2、常见的MIME类型

文件 扩展名 MIME类型
超文本标签语言文本 .html,htm text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 .mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra,.ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件
GZIP文件
TAR文件

3、谷歌如何查看HTTP协议

1、谷歌

image-20230410140927172

5、HTTPServletRequest

5.1、HTTPServletRequest类有什么作用

1、内容

1、每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析封装到Request对象中。然后传递到servlet方法(doGet和doPost)中给我们使用,我们可以通过HTTPServletRequest对象,获取所有请求的信息

5.2、HTTPServletRequest类的常用方法

1、内容

image-20230410151803323

2、例子

1、java代码

package com.qt.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RequestAPIServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        获取请求的资源路径
        System.out.println("URI=="+req.getRequestURI());
//        呼气请求的同意资源定位符(绝对路径)
        System.out.println("URL=="+req.getRequestURL());
//        获取客户端的ip地址
        System.out.println("地址ip:"+req.getRemoteHost());
//        获取请求头
        System.out.println("请求头:"+req.getHeader("User-Agent"));
//        获取请求的方式get或者post
        System.out.println("请求方式:"+req.getMethod());
    }

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

2、web.xml代码

    <servlet>
        <servlet-name>RequestAPIServlet</servlet-name>
        <servlet-class>com.qt.servlet.RequestAPIServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RequestAPIServlet</servlet-name>
        <url-pattern>/requestAPIServlet</url-pattern>
    </servlet-mapping>

5.3、如何获取请求参数

1、例子

1、java代码

package com.qt.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.util.Arrays;

public class ParameterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String[] hobby = req.getParameterValues("hobby");

        System.out.println("用户名:"+username);
        System.out.println("密码"+password);
        System.out.println("兴趣爱好:"+ Arrays.asList(hobby));
    }
}

2、html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="http://localhost:8080/07_servlet/parameterServlet" method="get" >
        用户名:<input type="text" name="username"><br/>
        密码:<input type="text" name="password"><br/>
        兴趣爱好:<input type="checkbox" name="hobby" value="cpp">c++
                <input type="checkbox" name="hobby" value="java">java
                <input type="checkbox" name="hobby" value="js">JavaScript<br/>
        <input type="submit" >

    </form>

</body>
</html>

3、web.xml代码

<servlet>
    <servlet-name>ParameterServlet</servlet-name>
    <servlet-class>com.qt.servlet.ParameterServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ParameterServlet</servlet-name>
    <url-pattern>/parameterServlet</url-pattern>
</servlet-mapping>

2、doGet请求的中文乱码解决

1、内容

image-20230410152214350

3、doPost请求的中文乱码解决

1、内容

image-20230410152236382

2、注意:该方法要写在请求最前面,否则不管用

5.4、请求的转发

1、什么是请求转发

1、请求转发是指,服务器收到请求后,从一次资源跳到另一个资源的

2、请求转发的特点

1、浏览器地址栏没有变化

2、他们是一次请求

3、他们共享Request域中的数据

4、可以转发到WEB-INF目录下

5、不可以访问工程以外的资源

3、图解转发请求

1、内容

image-20230410160700514

5.5、base标签的作用

1、base标签

1、\:可以设置当前页面中所有相对路径工作时,参照哪个路径来进行跳转。

2、格式:\其中xxx为地址

2、图解作用

image-20230410224440401

5.6、Web中的相对路径和绝对路径

1、相对路径

1、

image-20230410225154091

2、绝对路径

1、

image-20230410225512136

3、实际开发中

1、绝对路径

2、base+相对路径

5.7、web中的 / 斜杠的不同含义

1、在web中

1、是一种绝对路径

2、在浏览器解析中

1、得到的地址是:http://ip:port/

2、\斜杠\

3、在服务器解析中

1、得到的地址是:http://ip/port/工程路径

2、

image-20230410225817224

3、特殊情况:response.sendRediect("/"); 把斜杠发送给浏览器解析。得到的http://ip:port/

6、HTTPServletResponse类

6.1、HTTPServletResponse类的作用

1、HttpServletResponse类和HttpServletResquest类一样,每次请求进来,Tomcat都会创建一个Response对象传递给Servlet程序去使用。HttpServletResquest表示请求过来的信息,HttpS而vletResquest表示所有响应的信息。

2、如果我们需要设置返回给客户端的信息,都可以通过HTTPServletResponse对象来进行设置。

6.2、两个输出流说明

1、内容

image-20230410232634544

2、注意

1、两个流同时只能使用一个

2、使用了字节流,就不能再使用字符流,反之亦然,否则就会报错

6.3、如何往客户端回传数据

1、例子

image-20230411001550121

6.4、响应的乱码解决

1、方式一(不推荐使用)

1、设置服务器字符集为UTF-8

2、通过响应头,设置浏览器也使用UTF-8

3、例子

image-20230411001649734

2、方式二(推荐使用)

1、同时设置客户端和服务器的字符集,还设置了响应头

2、该方法也必须在获取流对象之前使用

3、例子

image-20230411001744845

6.5、请求重定向

1、什么是重定向

1、请求重定向,是指客户端给服务器发送请求,服务器接收到请求后,在给客户端发送一个地址,客户端去重新访问地址。叫重定向(因为客户端第一次访问的地址可能废弃了 )

2、重定向图解

image-20230411001945338

3、重定向的特点

1、浏览器地址栏会发生变化

2、两次请求

3、不共享Request域中的数据

4、不能访问WEB-INF下的资源

5、可以访问工程以外的资源

4、重定向方法一

1、步骤

(1)设置响应状态码

(2)设置响应头,说明新的地址在哪

2、例子

image-20230411002137749

5、重定向方法二(推荐使用)

1、使用sendRedirect方法

2、例子

image-20230411002209111

7、JavaEE项目的三层架构

7.1、图示

1、内容

image-20230412231645559

2、分层

image-20230412231713843

7.2、补充:idea断点使用

1、Debug调试代码,两个元素:断点+Debug启动服务器

image-20230412235225735

2、测试工具栏

image-20230412235332430

3、窗口变量

1、介绍:可以查看当前方法范围内所有有效的变量。

2、图示

image-20230412235415406

4、方法栈调用

image-20230412235434750

5、其他相关按钮

image-20230412235449847

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇