Servlet处理用户请求和响应(二)

(一)浏览器访问Servlet过程示意图

这里写图片描述

1.Servlet主要作用就是处理客户端请求和响应。浏览器每一次请求Servlet,服务器Tomcat在调用Service()方法之前,都会创建两个对象,分别是HttpServletRequest对象和HttpServletResponse对象。

3.HttpServletResponse的作用:封装HTTP响应消息。


(二)HttpServletRequest对象

1.作用:

  • 封装HTTP请求消息
  • 获取请求头、请求行、请求消息体

2.获取请求行的一些方法

  1. String getMethod():获取HTTP请求消息的请求方式。
  2. String getRequestURI():获取URL的主机和端口号之后,参数部分之前的部分。
  3. String getQueryString():获取资源路径以后的所有内容。
  4. String getProtacol():获取请求行的协议名和版本。
  5. String getContextPath():获取web应用程序的路径。
  6. String getServletPath():获取Servlet映射的路径。
  7. String getRemoteAddr():获取客户端的IP地址。
  8. String getRemoteHost():获取完整主机名。
  9. String getLocalName():获取web服务器上接收当前网络连接IP对应的主机名。
  10. String getLocalAddr():获取web服务器上接收当前网络连接IP地址。
  11. String getServletName():获取当前请求 所指向的主机名。
  12. int getServletPort():获取当前请求所连接的服务器端口号。
  13. String getScheme():获取请求协议名。
  14. StringBuffere getRequestURL():获取客户端发出请求的完整URL.

4.输出结果 :

这里写图片描述


5.HttpServletRequest获取请求消息头的一些方法

  1. String getHeader(String name):获取指定头字段值
  2. Emumeration getHeaders(String name):获取Emumeration集合
  3. Emumeration getHeaderNames():获取一个包含所有请求头字段的Emumeration
  4. int getIntHeader(String name):获取指定名称的头字段。
  5. long getDateHeader(String name):获取指定头字段的值。
  6. String getContentType():获取Content-type头字段值。
  7. int getContentLength():获取Content-Type头字段的值。
  8. String getCharacterEncoding():获取编码。

6.利用Referer请求头防止“盗链”

package com.haha;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Properties;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/TestServlet088")
public class TestServlet088 extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html,charser=utf-8");
        // 1.创建PrintWriter对象 用于向页面打印数据
        PrintWriter out = response.getWriter();
        //2.获取referer头字段的值
        String referer=request.getHeader("referer");
        //3.获取访问路径
        String path="http://"+request.getServerName();
        //4.判断referer头是否为空
        if(referer!=null&&referer.startsWith(path)){
            out.println("dead downloading...");
        }else{
            RequestDispatcher rd=request.getRequestDispatcher("/download.html");
            rd.forward(request, response);
        }


    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doGet(request, response);
    }

}


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>ServletDemo</display-name>

  <servlet>
    <servlet-name>qwe</servlet-name>
    <servlet-class>com.haha.TestServlet088</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>qwe</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app> 

(三)HttpServletResponse的使用

作用 :

  1. 封装HTTP响应消息(响应状态行、响应消息头、响应消息体)

2.发送状态码的一些方法

  1. setStatus(int status):设置HTTP消息响应的状态码,并生成消息的相应行。
  2. sendError(int sc):发送表示错误消息的状态码。

3.发送响应消息头的一些方法

  1. void addHeader(String name,String value)
  2. void setHeader(String name,String value):设置HTTP协议响应头字段。
  3. void addIntHeader(String name,int value):
  4. void setIntHeader(String name,int value):设置包含整数值得消息头
  5. void setContentType(String type):设置Servlet输出内容的MIME类型
  6. void setContentLength(int len):设置响应消息体的内容大小,单位为字节。
  7. void setLocale(locale loc):设置响应消息体的本地化消息。
  8. void setCharacterEncoding(String charset):设置输出内容使用的编码。

4.发送响应消息的一些方法

1.Servlet中的数据要呈现到浏览器界面,需要通过IO流来实现

  1. getOutputStream():直接输出字节数组中的二进制数据。(ServletOutputStream)
  2. getWriter():输出的内容全部为字符文本的网页文档。(PrintWriter)

5.实例演示

package com.haha;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Properties;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/TestServlet123")
public class TestServlet123 extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html,charser=utf-8");
        String str="Hello World";
        //1.创建ServletOutputStream对象
        ServletOutputStream out = response.getOutputStream();
        //2.将字符数组转换为字节数组输出去
        out.write(str.getBytes());
        //3.或调用PrinWriter对象的write()方法



    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doGet(request, response);
    }

}


----------


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>ServletDemo</display-name>

  <servlet>
    <servlet-name>123</servlet-name>
    <servlet-class>com.haha.TestServlet123</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>123</servlet-name>
    <url-pattern>/123</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app> 

输出结果 :

这里写图片描述


(四)解决中文输出乱码问题

方法一:
    response.setContentType("text/html,charser=utf-8");
方法二:
   response.setCharacterEncoding("utf-8");
   response.setHeader("Content-Type","text/html;charset=utf-8")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值