使用Servlet技术开发动态资源

目录

为什么需要动态资源

Servlet

大体的开发流程

Tomcat内部的大概过程

Tomcat的定位

浏览器中输入URL并回车,直到看到网页内容,期间发生了什么?

接受请求

根据请求计算响应

返回响应

DNS的请求过程

业务根据请求,填充响应的过程

结合网络知识

Servlet的使用

HttpServletRequest  req对象的简单使用

读取请求头:

读取请求体:

HttpResponseServlet Resp对象的使用

HttpServlet是什么?

Servlet的生命周期

 Servlet的日常开发(基于场景描述)


为什么需要动态资源

在某些资源路径固定的情况下,我们需要对应不同的环境、条件,产生不同的内容。

如:各个网站的个人中心页面,博客详情页;

Servlet

Servlet 就是 Tomcat 这个 HTTP 服务器提供给 Java 的一组 API, 来完成构建动态页面这个任务。

大体的开发流程

  1. 通过继承HTTPServlet抽象类,完成我们自己的类(每个都是一个独立的Web资源)
  2. 重写其中的一些方法(get、post、...),输出资源内容的过程
  3. 把动态资源和路径建立绑定关系:可以通过web.xml,或者使用Java中的注解语法完成@WebServlet。

整个过程都需要遵守标准,否则Tomcat不认。 

不需要自己实例化HTTPServlet对象(Tomcat内部在实例化);

也不会调用我们写好的get、post方法(Tomcat内部会在合适的时机去调用);

HTTP请求<->HttpServletRequest(这里的方法以getXXX为主)

HttpServletResponse<->HTTP响应(这里的方法以setXXX为主)

通过web.xml实现绑定:

package com.wh.servlet;

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.io.PrintWriter;

//1、声明这个类是一个web资源,via让类继承HTTPServlet这个抽象类
//2、看我们的动态资源支持那些HTTP方法(支持get方法via重写doGet方法)
public class FirstServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //3、读取request对象中的信息(都是来自HTTP请求中的信息)
        //4、根据当下的条件
        //5、准备相应数据 , 通过填写response对象来做到

        //设置状态码是201
        resp.setStatus(201);
        //字符集编码
        resp.setContentType("text/plain;charset=utf-8");
        PrintWriter writer=resp.getWriter();
        writer.printf("你好世界");
        //通过web.xml实现绑定
    }
}

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_3_1.xsd"
         version="3.1"
         metadata-complete="false">

    <servlet>
        <servlet-name>MyFirstServlet</servlet-name>
        <servlet-class>com.wh.servlet.FirstServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>MyFirstServlet</servlet-name>
        <!-- ServletPath -->
        <url-pattern>/first</url-pattern>
    </servlet-mapping>
</web-app>

状态码:

 使用Java中的注解语法完成@WebServlet:

package com.wh.servlet;

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

//通过使用@WebServlet注解修饰类,来实现绑定
@WebServlet("/second")
public class SecondServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setStatus(202);
        resp.setContentType("text/css");
        resp.setContentType("text/plain;charset=utf-8");
        PrintWriter writer=resp.getWriter();
        writer.printf("你好中国");
    }
}

  1.  通过继承HTTPServlet,表示这个类已经是一个有效的Web资源(动态)了。
  2. 重写doGet方法,表示这个资源支持HTTP的 GET方法访问。隐含着:其他的HTTP方法,是不支持的,如果非要使用别的方法(非405)访问这个资源,会405。
  3.    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值