如此详细的 Servlet 教程,不来看看么?(2)

<?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”>

HelloServlet

com.cunyu.servlet.HelloServlet

HelloServlet

/hello

  1. 启动 Tomcat 在浏览器中访问 http://localhost:8080/servletTest/hello,然后后台就会执行 service() 方法

1.3 Servlet 的生命周期

  1. 执行 Servlet 构造器方法,只在第一次访问时创建 Servlet 程序会调用

  2. 执行 init 初始化方法,只在第一次访问时创建 Servlet 程序会调用

  3. 执行 service() 方法,每次访问均调用

  4. 执行 destory() 销毁方法,Web 工程停止时调用

1.4 如何通过 IDEA 快速创建 Servlet 程序

选中 src 目录或者要生成 Servlet 的包,然后单击鼠标右键,New -> Create New Servlet,接着填写 Servlet 程序名,所属包以及 Servlet 全类名,同时 取消勾选 Java EE 6 即可,勾选则会生成注解式配置,后续学习过程中才会接触到。

点击生成之后,就会生成 Servlet 程序以及在 web.xml 中的配置。

1.5 整个 Servlet 类的继承体系

2. ServletConfig 类


从类名上就可以看出,ServletConfig 是一个配置信息类。Servlet 程序和 ServletConfig 对象均由 Tomcat 创建,而我们只要使用就可以了。此外,Servlet 程序默认是在第一次访问时就创建了,而 ServletConfig 对象则是每个 Servlet 程序创建时所对应创建

2.1 ServletConfig 类的三大作用

  1. 获取 Servlet 程序的别名,即 web.xml 中配置的 servlet-name

  2. 获取初始化参数,即 web.xml 中配置的 init-param

  3. 获取 ServletContext 对象

加入我们的 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”>

HelloServlet

com.cunyu.servlet.HelloServlet

userName

root

HelloServlet

/hello

package com.cunyu.servlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

/**

  • Created with IntelliJ IDEA.

  • Version : 1.0

  • Author : 村雨遥

  • Email : cunyu1024@foxmail.com

  • Website : https://cunyu1943.github.io

  • 公众号 :村雨遥

  • Date : 2020/6/4 下午3:08

  • Project : JavaLearning

  • Package : com.cunyu.servlet

  • Class : HelloServlet

  • Desc : Hello 启动页

*/

public class HelloServlet extends HttpServlet {

/**

  • service 专门用于处理请求和响应的方法

  • @param req 请求

  • @param resp 响应

  • @throws ServletException

  • @throws IOException

*/

@Override

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

System.out.println(“Hello Servlet,My first Servlet App!”);

}

@Override

public void init(ServletConfig config) throws ServletException {

super.init(config);

System.out.println(“初始化方法”);

// 获取 Servlet 程序别名 servlet-name

System.out.println(“别名:” + config.getServletName());

// 获取初始化参数 init-param

System.out.println(“初始化参数:” + config.getInitParameter(“userName”));

// 获取 ServletContext 对象

System.out.println(config.getServletContext());

}

}

3. ServletContext 类


3.1 ServletContext 是啥

  1. ServletContext 是一个接口,用于表示 Servlet 上下文对象

  2. ServletContext 对象是一个 域对象

  3. 每个 Web 工程只对应 一个 ServletContext 对象实例

  4. 每个 ServletContext 在 Web 工程部署启动时创建,然后在 Web 工程停止时销毁

3.2 ServletContext 的作用

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

  2. 获取当前 Web 工程路径,如 /ServletTest

  3. 获取工程部署后在服务器的中的绝对路径,包括各种静态资源等路径

  4. ServletContext 是通过 键值对(Map) 一样存取数据

以下对上述 4 个作用进行实例介绍,首先在 web.xml 加入如下配置,然后通过程序来获取各种参数:

wechat

cunyu1943

ServletContextServlet

com.cunyu.servlet.ServletContextServlet

ServletContextServlet

/servletContext

package com.cunyu.servlet;

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;

/**

  • Created with IntelliJ IDEA.

  • Version : 1.0

  • Author : 村雨遥

  • Email : cunyu1024@foxmail.com

  • Website : https://cunyu1943.github.io

  • 公众号 :村雨遥

  • Date : 2020/6/5 上午8:36

  • Project : JavaLearning

  • Package : ${PACKAGE_NAME}

  • Class : ${CLASS_NAME}

  • Desc : ServletContext 功能

*/

public class ServletContextServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 1. 获取上下文参数 context-param

ServletContext servletContext = getServletContext();

String url = servletContext.getInitParameter(“url”);

System.out.println(“URL 的值是:” + url);

// 2. 获取工程路径

System.out.println(“工程路径:” + servletContext.getContextPath());

// 3. 获取工程部署后服务器上的绝对路径

// 其中 / 被解析为:http://ip:port/工程名/ ,映射到 IDEA 代码的 web 目录

System.out.println(“工程部署绝对路径:” + servletContext.getRealPath(“/”));

// 4. 通过 键值对 存取数据,注意:ServletContext 属于 Web 工程,所以只要工程启动创建之后,Servlet 程序都能访问,直到关停 Web 工程

System.out.println(“ServletContext 对象:” + servletContext);

// 存数据

servletContext.setAttribute(“password”, “1234567”);

// 取数据

System.out.println(“password 的值是:” + servletContext.getAttribute(“password”));

}

}

4. HTTP 协议


4.1 什么是 HTTP 协议

协议 即指两方或多方通过一定协商约定后,大家都要遵守的规则,叫做协议。

HTTP 协议 ,即指 客户端和服务器之间互相通信时,发送数据时所需要遵守的规则,HTTP 协议中的数据又叫做 报文

4.2 请求的 HTTP 协议格式

客户端向服务器发送数据的行为叫做 请求,而服务器向客户端回传数据的行为叫做 响应

GET 请求

请求行 + 请求头 组成,其中 请求行 包括 请求的方式、请求的资源路径以及请求的协议版本号,而 请求头 则是由 key-value 对组成,不同键值对对应不同含义,具体请看如下图实例。GET 请求最常用的地方:

  1. form 标签 method=get

  2. a 标签

  3. link 标签引入 css

  4. Script 标签引入 js

  5. img 标签引入图片

  6. iframe 引入 HTML 页面

  7. 浏览器中地址栏输入地址后回车

POST 请求

POST 请求和 GET 的最大区别在于 请求头(即发送给服务器的数据),POST 由 请求行 + 请求头 + 请求体 组成,其中请求行与请求头的含义和 GET 请求的含义相同,而 请求头则是 POST 方式独有,具体含义如下,最常用的地方:

  1. form 标签 method=post

4.3 响应的 HTTP 协议格式

响应主要由 响应行 + 响应头 + 响应体 共同组成,响应行中又包括 响应的协议和版本号、响应状态码以及响应状态描述符,而 响应头则是同样由不同的键值对组成响应体中则是回传给客户端的数据,具体看下边的示例:

4.4 常用响应码

| 响应码 | 说明 |

| — | — |

| 200 | 请求成功 |

| 302 | 请求重定向 |

| 404 | 请求服务器已经收到,但需要的数据不存在(请求地址错误) |

| 500 | 服务器已经收到请求,但服务器内部错误(代码错误) |

4.5 MIME 类型说明

MIME 全称 多功能 Internet 邮件扩充服务 (Multipurpose Internet Mail Extension) ,是 HTTP 协议中的数据类型,格式是 大类型/小类型,并与某种文件扩展名相对应,最常见的 MIME 类型如下:

| 文件类型 | 文件扩展名 | MIME 类型 |

| — | — | — |

| 超文本标记语言文本 | .html、.htm | text/html |

| 普通文本 | .txt | text/plain |

| RTF 文本 | .rtf | application/rtg |

| 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 文件 | .avi | video/x-msvideo |

| GZIP 文件 | .gz | application/x-gzip |

| TAR 文件 | .tar | application/x-tar |

5 HttpServletRequest 类


5.1 HttpServletRequest 类的作用

当每次 Tomcat 服务器接收到来自浏览器的请求时,Tomcat 服务器都会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中,然后传递到 service 方法(doGetdoPost)供浏览器使用。而我们则可以通过 HttpServletRequest 对象获取到 所有请求的信息

5.2 HttpServletRequest 类常用方法

| 方法 | 说明 |

| — | — |

| getRequestURI() | 获取请求的资源路径 |

| getRequestURL() | 获取请求的统一资源定位符(绝对路径) |

| getRemoteHost() | 获取客户端的 ip |

| getHeader() | 获取请求头 |

| getParameter() | 获取请求的参数 |

| getParameterValues() | 获取请求的参数(多个值) |

| getMethod() | 获取请求的方式 GET 或 POST |

| setAttribute(key, value) | 设置域数据 |

| getAttribute(key) | 获取域数据 |

| getRequestDispatcher() | 获取请求转发对象 |

5.3 POST 和 GET 请求方式的中文乱码问题

当以 POST 或 GET 方式请求时,遇到中文可能会出现乱码,对应解决方法如下:

  • POST 方式:直接将请求体的字符集设置为 UTF-8 即可

  • GET 方式:先以 iso8859-1 进行编码,然后再以 UTF-8 进行解码

package com.cunyu.servlet;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

/**

  • Created with IntelliJ IDEA.

  • Version : 1.0

  • Author : 村雨遥

  • Email : cunyu1024@foxmail.com

  • Website : https://cunyu1943.github.io

  • 公众号 :村雨遥

  • Date : 2020/6/6 下午9:18

  • Project : JavaLearning

  • Package : ${PACKAGE_NAME}

  • Class : ${CLASS_NAME}

  • Desc : 获取请求参数中文乱码问题

*/

public class ParameterServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// POST 中文乱码,设置请求体字符集 UTF-8,要在获取参数前调用

req.setCharacterEncoding(“UTF-8”);

System.out.println(req.getParameter(“hobby”));

}

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String username = request.getParameter(“username”);

String password = request.getParameter(“password”);

// GET 中文乱码

// 先以 iso8859-1 进行编码

// 然后以 UTF-8 进行解码

username = new String(username.getBytes(“ISO-8859-1”), “UTF-8”);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。

以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考

一份还热乎的蚂蚁金服面经(已拿Offer)面试流程4轮技术面+1轮HR

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
的负担。**[外链图片转存中…(img-a07XOPQW-1713637187863)]

[外链图片转存中…(img-WGjdTcJO-1713637187864)]

[外链图片转存中…(img-Y2PGdnM6-1713637187864)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。

以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考

[外链图片转存中…(img-g5rCKFCE-1713637187865)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

Servlet 第一天 一、简述 1、Servlet,服务器端的小程序,它是相对于Applet 而言的,Applet 是客户端小程序。 Servlet,是接受来自网络的请求(form 表单,以及其他的请求),并对不同请求作出不同的响应 Servlet,是基于Http 协议的,是运行在web 服务器中的程序。这里要提出一个容器的概念。 servlet 是运行在web 容器中,在后面会详细地讲解,这个web 容器可以控制Servlet 对象的生命周期,控制请 求由Servlet 对象处理。 2、web 服务器,这里的服务器不是硬件概念,而是软件,常用的web 服务器有Tomcat,Jboss 等,我们所用到的 Tomcat 是一个开源的服务器, Tomcat 是一个用java 语言编写的web 服务器,所以需要有相应的java 运行环境,也就是JVM,还要配置tomcat 的具体路径。 二、Tomcat 的配置 JAVA_HOME=/XXX/XXX/(JDK 路径,bin 的上一层目录) CATALINA_HOME=/XXXX/XXX(tomcat 的绝对路径windows 中X:\xxx\xxx) 在启动Tomcat 时,是运行Tomcat 的bin 目录下的startup.sh(windows 中使用startup.bat) 判断Tomcat 是否启动成功,可以在浏览器的地址栏中使用http://localhost:8080/或http://127.0.0.1:8080/可以访问到 tomcat 的主页就是启动成功了。 要想停止tomcat 服务器要使用shutdown.sh(windows 中使用shutdown.bat),如果直接关闭启动窗口,就会造成 8080 端口占用错误,这时可以在使用shutdown.sh 关闭一下服务器。 startup.sh,shutdown.sh,shutdown.bat,startup.bat 这些文件其实是一些脚本文件用来执行大量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值