1、Servlet 是 JavaEE 规范之一。规范就是接口 。
2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
Servlet 程序(这里看service方法)
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* servlet方法是专门用来处理请求和响应的
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("HelloServlet被访问了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
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标签给Tomcat配置servlet程序-->
<servlet>
<!--servlet-name标签给Servlet程序起一个别命(一般为类名)-->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class是Servlet程序的全类名-->
<servlet-class>com.xiaoran.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet-mapping标签给servlet程序配置访问地址-->
<servlet-mapping>
<!--servlet-name标签的作用是告诉服务器,我当前配置的地址给了哪个Servlet程序使用-->
<servlet-name>HelloServlet</servlet-name>
<!--
url-pattern标签配置访问地址
/ 斜杠在服务器解析的时候表示地址为:http://ip:port/工程路径
/hello 表示访问地址为:http://ip:port/工程路径/hello
-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
说明:第1、2步是在第一次访问时创建 Servlet 程序的时候调用;第3步每次访问都会调用;第4步在 web 工程停止的时候调用。
public class HelloServlet implements Servlet {
/**
* servlet方法是专门用来处理请求和响应的
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("HelloServlet被访问了");
//类型转换(因为它有getMethod()方法)
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
//获取请求的方式
String method = httpServletRequest.getMethod();
if("GET".equals(method)){
doGet();
}else if ("POST".equals(method)){
doPost();
}
}
/**
* 完成get请求的操作
*/
public void doGet(){
System.out.println("get请求");
}
/**
* 完成post请求的操作
*/
public void doPost(){
System.out.println("post请求");
}
// ……………………其他要求重写方法省略了……………………
一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。
HttpServlet 类的代码:
public class HelloServlet2 extends HttpServlet {
/**
* 在get请求时调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doGet方法");
}
/**
* 在post请求时调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doPost方法");
}
}
web.xml 中的配置:
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.xiaoran.servlet.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
第一步,选【New】,再选【Servlet】。
第二步,给程序命名、配置。
第三步,补全 web.xml 文件。
说明:
ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类。
Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。
Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象。
web.xml 中的配置:
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.xiaoran.servlet.HelloServlet</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>https://www.baidu.com</param-value>
</init-param>
</servlet>
Servlet 代码:
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
// 1. 可以获取 Servlet 程序的别名 servlet-name 的值
System.out.println("HelloServlet程序的别名是:" + servletConfig.getServletName());
// 2. 获取初始化参数 init-param
System.out.println("初始化参数username的值是:" + servletConfig.getInitParameter("username"));
System.out.println("初始化参数url的值是:" + servletConfig.getInitParameter("url"));//org.apache.catalina.core.ApplicationContextFacade@908c4c5
// 3. 获取 ServletContext 对象
System.out.println(servletConfig.getServletContext());
}
// ……………………其他要求重写方法省略了……………………
}
注意:
什么是域对象?
域对象,是可以像 Map 一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,整个 web 工程。
???????????????存数据????????????????取数据?????????????????删除数据
Map????????put() ??????????????????get() ???????????????????remove()
域对象????setAttribute()????getAttribute()????removeAttribute();
public class ContextServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取 web.xml 中配置的上下文参数 context-param
ServletContext context = getServletConfig().getServletContext();
String username = context.getInitParameter("username");
System.out.println("context-param参数username的值是:" + username);
System.out.println("context-param参数password的值是:" + context.getInitParameter("password"));
//2. 获取当前的工程路径,格式:/工程路径
System.out.println("当前工程路径:" + context.getContextPath());// /testServlet
//3. 获取工程部署后在服务器硬盘上的绝对路径
/**
* / 斜杠被服务器解析地址为:http://ip:port/工程名/
* 跟/abc一样
*/
System.out.println("工程部署的路径:" + context.getRealPath("/"));
}
}
public class ContextServlet1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//4.像 Map 一样存取数据
ServletContext context = getServletContext();
context.setAttribute("key", "value");
System.out.println("Context 中获取域数据key的值是:" + context.getAttribute("key"));
}
}
所谓 HTTP 协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫 HTTP 协议。
HTTP 协议中的数据又叫报文。
客户端给服务器发送数据叫请求。(请求又分为 GET 请求,和 POST 请求两种)
GET 请求有哪些:
POST 请求有哪些:
MIME 是 HTTP 协议中数据类型。
MIME 的英文全称是"MultipurposeInternetMailExtensions" 多功能 Internet 邮件扩充服务。MIME 类型的格式是“大类型/小 类型”,并与某一种文件的扩展名相对应。
常见的 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 文件 | .avi??????video/x-msvideo |
GZIP 文件 | .gz??????application/x-gzip |
TAR 文件 | .tar??????application/x-tar |
原文:https://www.cnblogs.com/xiaoran991/p/12659567.html