2-Servlet详解1

用java去开发web工程,有两个非常重要的组件就是JSPServlet,虽然以后有更简单快捷的方式(ssm),但是这个也很重要,因为这个最基本的方式。

一、Servlet

  • 什么是Servlet
    Servlet 是 Java Web 开发的基石,与平台(操作系统)无关的服务器组件,它是运行在 Servlet 容器(Web服务器,Tomcat),负责与客服端进行通信。
  • Servlet功能
  1. 创建并返回基于客户请求的动态HTML页面。
  2. 可以与数据库进行通信的。
  3. ServletRequest 类图 servlet详解_javaweb

  • 如何使用 Servlet ?
    Servelt 本身是一组接口,接口就是用来描述某一种功能的。如果想让你的程序具备这种功能,那么就创建一个类Class去实现这个接口就可以了。
    存在于Javax.servlet包。实际开发只需要自定义一个类,并且实现Servlet接口,这样这个类就具备了接受客户端请求以及做出显示的功能。

二、Servlet初次体验

scr中创建package–>classcom.southwind.servlet–>MyServlet.class

package com.southwind.servlet;

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

/**
 * @author 田港
 * @version 1.0
 * @date 2021-03-26 10:16
 */
public class MyServlet implements Servlet {
    @Override  // 重写,子类对父类方法进行重写
    public void init(ServletConfig servletConfig) throws ServletException {
        // 初始化操作--->创建
    }

    @Override
    public ServletConfig getServletConfig() {
        // 用来获取Servlet本身的信息的
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        // --->工作
        // 最核心的方法,业务逻辑处理全部写在这里
        System.out.println("我是Servlet,已经接受的客服端发来的请求");
    }

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

    @Override
    public void destroy() {
        // --->销毁
    }
}
  • 如何访问我们的MyServlet.class文件呢 ,index.jsp文件之所以可以被浏览器访问到是因为IDEA已经打包好了文件,就在out\artifacts中,而我们写的类文件被编译之后放在其中的WEB-INF\class中,Tomcat默认浏览器不能根据访问 jsp 文件的方式访问我们的类文件,需要配置。
<?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-->
        <servlet-name>MyServlet</servlet-name>  <!--我们servelt名称,这个可以随便写-->
        <servlet-class>com.southwind.servlet.MyServlet</servlet-class> <!--这是我们写的MyServlet路径,要从头写路径-->
    </servlet>
    <servlet-mapping> <!--servlet映射-->
        <servlet-name>MyServlet</servlet-name> <!--与我们servlet标签中的servlet-name一样-->
        <url-pattern>/myservlet</url-pattern> <!--url路径-->
    </servlet-mapping>
</web-app>
  • 现在访问http://localhost:8080/myservlet,IDEA控制台会输出我们的System.out.println那句话。
  • ServletRequest 类图 servlet详解_servlet_02

  • 为什么页面时空白的呢,是因为浏览器只是请求了,但我们的程序并未做相应。

三、通过servlet返回一些东西

我们具体看一下我们写的MyServlet继承Servlet后,重写的service方法(这个是方法才是我们关注的重点)

@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        
}

先看形参:

  1. servletRequest
    类型为接口ServletRequest,听过这个单词我们就能知道,这个接口写了关于请求的东西。
  2. servletResponse
    类型为接口ServletResponse,这个接口写了关于处理请求之后反映的东西。

那么我们很好理解了,通过servletRequest拿到客户端发来的请求,在自己重写的service方法中进行处理,通过servletResponse返回给客户端。
实战看一下:

@Override
 public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    // --->工作
    // 最核心的方法,业务逻辑处理全部写在这里
    // servletResponse
    System.out.println("我是Servlet,已经接受的客服端发来的请求");
    servletResponse.setContentType("text/html;charset=UTF-8");
    servletResponse.getWriter().write("客户端你好,我已经接受到你的请求");
    // servletRequest
    String requestParameterId = servletRequest.getParameter("id");
    servletResponse.getWriter().write(requestParameterId);
}

Run一下,访问一下两个url,看看浏览器输出

  • http://localhost:8080/myservlet
  • http://localhost:8080/myservlet?id=1

如果要和数据库通信,那么在这里写JDBC代码就ok了。