【沉浸式求职学习day41】【Servlet】

沉浸式求职学习

Servlet

1.Servlet简介

  • Servlet就是sun公司开发动态web的一门技术。

  • Sun在这些API中提供一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤:

    • 编写一个类,实现Servlet接口。
    • 把开发好的Java类部署到web服务器中。
  • 把实现了Servlet接口的Java程序叫做,Servlet

2.HelloServlet

Serlvet接口Sun公司有两个默认的实现类:HttpServlet,GenericServlet。

接下来我们编写一个Servlet程序:

  1. 编写一个普通类。

  2. 实现Servlet接口,这里我们直接继承HttpServlet

java 复制代码
package com.hh.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class helloServlet extends HttpServlet {
    // 由于get或者Post只是请求实现的不同方式,可以相互调用,业务逻辑都一样
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("进入doGet方法");
        PrintWriter writer = resp.getWriter();   //响应流
//        ServletOutputStream outputStream = resp.getOutputStream();
        writer.print("hello,servlet");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

然后编写servlet映射:

xml 复制代码
<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"
         metadata-complete="true">
<!--    注册Servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.hh.servlet.helloServlet</servlet-class>
    </servlet>
    <!-- Servlet请求路径-->
<!--    localhost:8080/s3/hello/hello-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello/hello</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

<!--    注册404-->
<!--    <servlet>-->
<!--        <servlet-name>error</servlet-name>-->
<!--        <servlet-class>com.hh.servlet.errorServlet</servlet-class>-->
<!--    </servlet>-->
<!--    <servlet-mapping>-->
<!--        <servlet-name>error</servlet-name>-->
<!--        <url-pattern>/*</url-pattern>-->
<!--    </servlet-mapping>-->




</web-app>

运行Tomcat:

Servlet原理

首先浏览器发送Http请求给web容器(可以理解为Tomcat)然后Requset通过Servlet去调用Service方法,产生一个Response,这个请求赋给响应体,然后在给Web容器。其中Servlet这里是我们自己取编写的实现类,并且重写这些方法,比如接受并处理请求,且给出响应的信息。

3.ServletContext

web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用;

共享数据

在这个Servlet中保存的数据,可以在另外一个servlet中拿到;

java 复制代码
package com.hh.servlet;

import javax.servlet.ServletContext;
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 HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//        this.getInitParameter()  初始化参数
//            this.getServletConfig();  Servlet配置
//            this.getServletContext(); Servlet上下文
        // Web容器启动的时候,会为每个WEB程序创建一个对应的ServletContext对象,代表当前WEB应用
        ServletContext context = this.getServletContext();

        String username = "哈哈哈哈哈";

        context.setAttribute("username",username); // 将一个数据保存在context中


        System.out.println("hello");
    }


}

首先先通过setAttribute把数据保存在context中

接着从另外一个Servlet中取数据:

java 复制代码
package com.hh.servlet;

import javax.servlet.ServletContext;
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 GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String username = (String) servletContext.getAttribute("username");

        //

        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html");
        resp.getWriter().print("名字"+username);


    }
}

结果:

拿到初始化信息

java 复制代码
package com.hh.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Properties;

public class servlet_test3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String url = servletContext.getInitParameter("url");

        resp.getWriter().print(url);


        Properties properties = new Properties();

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}


结果:

请求转发

java 复制代码
package com.hh.servlet;

import javax.servlet.ServletContext;
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 servlet_test4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


        System.out.println("进入了test4");
        ServletContext servletContext = this.getServletContext();
        servletContext.getRequestDispatcher("/gp").forward(req,resp);  //转发的请求路径



    }
}

结果:

读取资源文件

Properties

  • 在java目录下新建properties
  • 在resources目录下新建properties
java 复制代码
package com.hh.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropertiesServlet extends HelloServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InputStream resourceAsStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/hh/servlet/aa.properties");// /代表当前项目位置

        Properties properties = new Properties();
        properties.load(resourceAsStream);
        String username = properties.getProperty("username");
        String password= properties.getProperty("password");

        resp.getWriter().print(username+":"+password);

    }

}

结果:

相关推荐
哦虎!3 小时前
【JavaEE】网络初识
java
2603_965148113 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
for_ever_love__3 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
我是人✓4 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
欣栀♡4 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室5 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项5 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog5 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
秋饼5 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发
摇滚侠5 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记