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

相关文章
|
1月前
|
Oracle Java 关系型数据库
浅谈Servlet
浅谈Servlet
14 0
|
7月前
|
IDE Java 应用服务中间件
Servlet3.0
Servlet3.0
|
10月前
|
应用服务中间件
Servlet2(2)
Servlet2(2)
50 0
|
8月前
|
JSON 前端开发 Java
Servlet详解(下)
Servlet详解
54 0
|
10月前
|
前端开发 JavaScript 应用服务中间件
Servlet1(2)
Servlet1(2)
47 0
|
10月前
|
XML JavaScript 前端开发
servlet详解
servlet详解
|
10月前
|
应用服务中间件
Servlet的详细使用(上)
Servlet的详细使用(上)
69 0
|
Java 应用服务中间件
Servlet详解
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
140 1
|
存储 缓存 网络协议
Servlet(一)
关于Servlet的相关介绍
248 0
Servlet(一)
Servlet(三)
关于Servlet的相关介绍
125 0
Servlet(三)