http协议&Servlet的快速入门掌握。

Servlet入门

基本概述

servlet=server+applet:运行在服务器端的java程序
Servlet是一个接口,一个类要想通过浏览器被访问到,那么这个类必须直接或间接的实现Servlet接口

Servlet快速入门

代码实现Servlet的步骤

  1. 创建web项目
  2. 编写普通java类,实现接口
  3. 配置web.xml文件
  4. 部署web项目
  5. 启动测试
package cn.itcast.a_quick;


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

//编写普通的java类,实现servlet接口
public class QuickServelt implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /*对外提供服务
    request:请求
    response:响应
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //向浏览器输出一句话
        servletResponse.getWriter().write("QuickServlet");
    }

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

    @Override
    public void destroy() {

    }
}

<?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_3_1.xsd"
         version="3.1">
    <!--
    把刚刚写的QuickServelt交给tomcat管理
    <servlet-name>:当前servlet的别名(使用类名即可)
    <servlet-class>:全限定类名
    -->
    <servlet>
        <servlet-name>QuickServelt</servlet-name>
        <servlet-class>cn.itcast.a_quick.QuickServelt</servlet-class>
    </servlet>

    <!--
     给servlet设置一个网络的访问地址(路径)
    <servlet-name>:给指定别名的servlet配置映射
    <url-pattern>:网络访问地址(必须以/开头)
    -->
    <servlet-mapping>
        <servlet-name>QuickServelt</servlet-name>
        <url-pattern>/quickServelt</url-pattern>
    </servlet-mapping>
</web-app>

Servlet执行原理图

在这里插入图片描述

Servlet的生命周期

生命周期:指的是一个对象从生(创建)到死(销毁)的一个过程

Servlet生命周期相关的方法

// 1. servlet对象创建时,调用此方法
public void init(ServletConfig servletConfig);

// 2. 用户访问servlet时,调用此方法
public void service(ServletRequest servletRequest, ServletResponse servletResponse);

// 3. servlet对象销毁时,调用此方法
public void destroy();

代码实现

  1. LifeServlet
public class LifeServlet implements Servlet {


    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("LifeServlet创建了....");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("LifeServlet的service方法执行了");
    }

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

    @Override
    public void destroy() {
        System.out.println("LifeServlet销毁了...");
    }
}
  1. 配置web.xml文件
<!--servlet的生命周期-->
<servlet>
    <servlet-name>LifeServlet</servlet-name>
    <servlet-class>cn.itcast.b_api.LifeServlet</servlet-class>
    <!--tomcat启动时,创建servlet对象,执行init方法 -->
    <load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>LifeServlet</servlet-name>
    <url-pattern>/lifeServlet</url-pattern>
</servlet-mapping>

Servlet的体系结构

在这里插入图片描述

GenericServlet

① 编写普通java类,继承GenericServlet抽象类

public class ServletDemo1 extends GenericServlet {

    @Override
    public void init() throws ServletException {
        System.out.println("ServletDemo1 创建了...");
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        super.getServletConfig();  // 调用父类的配置对象
        servletResponse.getWriter().write("ServletDemo1 extends GenericServlet");
    }

    @Override
    public void destroy() {
        System.out.println("ServletDemo1 销毁了..");
    }
}

② 配置web.xml

<!--servlet继承genericServlet-->
<servlet>
    <servlet-name>ServletDemo1</servlet-name>
    <servlet-class>cn.itcast.c_inherit.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServletDemo1</servlet-name>
    <url-pattern>/servletDemo1</url-pattern>
</servlet-mapping>

HttpServlet

在这里插入图片描述

① 编写前端html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>login</title>

</head>
<body>
<h3>用户登录</h3>
<form action="http://localhost:8080/day08_servlet_xml/servletDemo2" method="get">
    <input type="submit" value="提交表单..">
</form>
</body>
</html>

② 编写普通java类,继承HttpServlet抽象类

public class ServletDemo2 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("get....");
    }

    @Override
    protcted void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("post...");
    }
}

③ 配置web.xml

<!--servlet继承httpServlet-->
<servlet>
    <servlet-name>ServletDemo2</servlet-name>
    <servlet-class>cn.itcast.c_inherit.ServletDemo2</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServletDemo2</servlet-name>
    <url-pattern>/servletDemo2</url-pattern>
</servlet-mapping>

响应状态码405

请求方法没有重写,如果子类没有重写doPost方法,那么父类也不知道怎么办,所以会抛出一个错误信息

响应状态码500

java代码写错了,根据异常信息提示,找到修改即可

Servlet的路径

url-pattern配置

作用:将一个请求网络地址和servlet类建立一个映射关系
在这里插入图片描述

Servlet3.0

通过注解配置Servlet,简化web.xml配置Servlet复杂性,提高开发效率,几乎所有的框架都在使用注解

创建web工程【注解】

编写普通java类,继承HttpServlet

public class QuickServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("QuickServlet....3.0");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("QuickServlet....3.0");
    }
}

配置@WebServlet

// @WebServlet(name = "QuickServlet",urlPatterns = "/quickServlet")
// @WebServlet(urlPatterns = "/quickServlet")
// @WebServlet(value = "/quickServlet")
@WebServlet("/quickServlet") // 注解中有且仅有一个属性,名为value时,属性名可以省略...
public class QuickServlet extends HttpServlet {
    
}
发布了34 篇原创文章 · 获赞 9 · 访问量 1267

猜你喜欢

转载自blog.csdn.net/weixin_43616750/article/details/105503884