Servlet1(1)

简介: Servlet1(1)

Servlet学习笔记
【尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版-哔哩哔哩】
https://b23.tv/YSlRBr

1. Servlet 技术

a) 什么是 Servlet

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

2、Servlet就JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。

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

b)手动实现 Servlet 程序

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

1.新建一个简单的java工程06_servlet

2.导入web application

3.在src下新建一个包com.servlet,包下新建类HelloServlet


2.实现Servlet方法,处理请求,并响应数据

4.HelloServlet后implements Servlet,实现方法

5.如果Servlet标红,在web/WEB-INF下新建lib文件夹,导入servlet-api.jar包(在Tomcat/lib下有)右键选择add as library

HelloServlet

package com.servlet;
import javax.servlet.*;
import java.io.IOException;
public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    /**
     * service 方法是专门用来处理请求和响应的
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @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() {
    }
}
6.创建Tomcat实例,点击Edit Configurations...


点击+


名字命名为06_servlet

  1. 到web.xml中配置Servlet程序的访问地址

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.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> <!--注意hello前面有 / -->
    </servlet-mapping>
</web-app>
  1. 点击运行“绿三角”

    在地址后加hello,回车

    在IDEA控制台上可以看到如下输出语句


    常见的错误1:url-pattern 中配置的路径没有以斜杠打头。


    常见错误2: servlet-name配置的值不存在:


    常见错误3: servlet-class标签的全类名配置错误:



c) url 地址到Servlet 程序的访问



d) Servlet 的生命周期

  1. 执行Servlet 构造器方法
  2. 执行init 初始化
    第一、二步,是在第一次访问的时候,创建Servlet程序会调用。
  3. 执行 service 方法
    第三步,每次访问都会调用
  4. 执行 destroy 销毁方法
    第四步,在web工程停止的时候调用
    验证
    HelloServlet
package com.servlet;
import javax.servlet.*;
import java.io.IOException;
public class HelloServlet implements Servlet {
    public HelloServlet() {
        System.out.println("1 构造方法");
    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2 执行init 初始化");
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    /**
     * service 方法是专门用来处理请求和响应的
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3 service === hello Servlet 被访问了");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
        System.out.println("4 执行 destroy 销毁方法\n");
    }
}




e) GET 和 POST 请求的分发处理

HelloServlet

package com.servlet;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class HelloServlet implements Servlet {
    public HelloServlet() {
        System.out.println("1 构造方法");
    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2 执行init 初始化");
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    /**
     * service 方法是专门用来处理请求和响应的
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3 service === hello Servlet 被访问了");
        //类型转换(因为它有getMethod()方法)
        HttpServletRequest httpServletRequest= (HttpServletRequest) servletRequest;
        //获取请求的方式
        String method = httpServletRequest.getMethod();
//        System.out.println(method);
        if ("Get".equals(method)){
            doGet();
        }else if("POST".equals(method)){
            doPost();
        }
    }
    /**
     * 做get请求的操作
     */
    public void doGet(){
        System.out.println("get请求");
        System.out.println("get请求");
    }
    /**
     * 做post请求的操作
     */
    public void doPost(){
        System.out.println("post请求");
        System.out.println("post请求");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
        System.out.println("4 执行 destroy 销毁方法\n");
    }
}

在web下建a.html

a.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <from action="http://localhost:8080/06_servlet_war_exploded/hello" method="GET">
    <input type="submit">
  </from>
</body>
</html>

f) 通过继承HttpServlet 实现 Servlet 程序

一般在实际项目开发中,都是使用继承HttpServlet类的方式去实现Servlet程序。

  1. 编写一个类去继承HttpServlet类
  2. 根据业务需要重写doGet或doPost方法
  3. 到web.xml中的配置Servlet程序的访问地址

HelloServlet2

package com.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 HelloServlet2 extends HttpServlet {
    /**
     *  doGet() 在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方法");
    }
    /**
     * doPost() 在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.servlet.HelloServlet2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet2</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>

g) 使用IDEA创建Servlet程序



配置一下servlet-mapping

相关文章
|
XML Java 应用服务中间件
Servlet详解(上)
Servlet详解
84 0
|
6月前
|
XML 前端开发 Java
servlet使用
servlet使用
|
6月前
|
Oracle Java 关系型数据库
浅谈Servlet
浅谈Servlet
29 0
|
小程序 Java 应用服务中间件
Servlet这些你可能还不知道
Servlet这些你可能还不知道
63 0
|
6月前
|
XML Java 应用服务中间件
一文了解Servlet
Servlet是用于开发基于Java的Web应用程序的Java类。Servlet在Web服务器上运行,接收来自客户端(通常是Web浏览器)的请求并生成响应。 Servlet提供了一种动态生成网页内容的方法。它可以接收HTTP请求,读取请求参数,与数据库进行交互,生成动态内容,并返回响应给客户端。 Servlet通常被部署在Java Web容器(如Apache Tomcat)中。
63 1
一文了解Servlet
|
Java 应用服务中间件
Servlet2(1)
Servlet2(1)
67 0
|
JSON 前端开发 Java
Servlet详解(下)
Servlet详解
75 0
|
前端开发 JavaScript 应用服务中间件
Servlet1(2)
Servlet1(2)
69 0
|
XML JavaScript 前端开发
servlet详解
servlet详解
|
存储 应用服务中间件
Servlet(二)
关于Servlet的相关介绍
191 0
Servlet(二)