浏览器请求与HttpServlet响应

1. XML文件中配置全局配置信息

  <!-- ************************** -->
  <!-- 1.初始化参数 -->
  <context-param>
     <param-name>key</param-name><!-- 设定上下文参数唯一名称  -->
     <param-value>value</param-value><!-- 设定参数名称的值 -->
  </context-param>
  <!-- ************************** -->
  <servlet><!-- 1.创建一个Select -->
     <servlet-name>demo01</servlet-name><!-- 2.给select起名 -->
     <servlet-class>com.lanou3g.Demo01</servlet-class><!-- 3.设置select地址 -->
<!--      <init-param>filter中的参数
        <param-name>username</param-name>参数的名字
        <param-value>wang</param-value>参数的值
     </init-param> -->
  </servlet>
  <!-- ************************** -->
  <servlet-mapping><!-- 注册配置访问路径 -->
     <servlet-name>demo01</servlet-name><!--配置这个组件的名称要与前面的一致 -->
     <url-pattern>/demo01</url-pattern><!-- 配置这个组件的访问地址 -->
  </servlet-mapping>
  <!-- ************************** -->
1.getServletConfig()方法返回一个ServletConfig对象,该对象中包含servlet启动配置信息.
  这个信息中包括了所有初始化参数和一个ServletContext对象. 
2.getServletContext()返回一个ServletContext对象,该对象包含关于servlet运行环境的信息
3.httpservlet的父类GenericServlet的方法getInitParameter()
String getInitParameter()  
返回具有指定名称的初始化参数值。通过凋用config.getInitParameter()实现。
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Demo01 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletConfig myConfig = this.getServletConfig();
        String value = this.getInitParameter("username");
        System.out.println(value);
    }
    private void fun1() {
        // 获取config对象
        ServletConfig config2 = this.getServletConfig();
        // 取出servlet中的配置信息
        String value = config2.getInitParameter("username");
        System.out.println(value);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
package com.lanou3g;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Demo02 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext application = this.getServletContext();
        String path = application.getRealPath("WEB-INF/classes/com/lanou3g/b.properties");
        System.out.println(path);
        Properties properties = new Properties();
        properties.load(new FileInputStream(path));
        System.out.println(properties.getProperty("key"));
    }
    private void fun1() throws IOException, FileNotFoundException {
        ServletContext application = this.getServletContext();
        String path = application.getRealPath("WEB-INF/classes/a.properties");
        System.out.println(path);
        Properties properties = new Properties();
        properties.load(new FileInputStream(path));
        System.out.println(properties.getProperty("key"));
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
package com.lanou3g;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
1.请求转发

/*
 * 请求转发
 * 注意:浏览器只是发起了一次请求
 * servlet内部做的转发 浏览器 并不知道
 */
public class Demo03 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("我要借钱");
        System.out.println("我可没有 你找demo04试试");
        // 获取context域对象
        ServletContext application = this.getServletContext();
        // 从context中获取转发器
        RequestDispatcher dispatcher 
        = application.getRequestDispatcher("/demo04");
        // 进行请求转发
        dispatcher.forward(request, response);
        System.out.println("钱我已经搞定了");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
2.HttpServletResponse 服务器的响应对象
package com.lanou3g;

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

public class Demo04 extends HttpServlet {

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

        System.out.println("我有钱 我叫迎接 因为名字 所有替换");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
/*
 * HttpServletResponse 服务器的响应对象
 * 响应对象中都有什么?
 * 响应行 http/1.1  状态码200
 * 响应头 告诉浏览器我要做什么
 * 例如响应给你的文件需要下载 以什么编码格式解析数据
 * 响应体 响应回浏览器的数据
 */
public class Demo05 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置服务器的编码格式
        // 默认tomcat  iso-8859-1.
        //response.setCharacterEncoding("UTF-8");
        // 告诉浏览器要使用什么编码格式来查看
        // 添加响应头
        //response.setHeader("Content-type", "text/html;charset=UTF-8");

        // 这句代表以上两句的方法
        response.setContentType("text/html;charset=UTF-8");

        // 给浏览器响应一句话
        // 从响应对象中HttpServletResponse中获取流对象
        // 注意:这个流对象不是你自己创建 要从响应中获取
        PrintWriter out = response.getWriter();
        out.write("liuy心");
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

4.下载文件

package com.lanou
;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

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

/*
 * 从服务器中下载图片
 * 需要告诉浏览器(添加响应头)
 * 1.我给你的图片是下载用的
 * 2.文件名字 文件类型
 *  content-disposition   attachment;filename=
 *  content-type  image/jpg
 * 3.
 */
public class Demo08 extends HttpServlet {

    @SuppressWarnings("resource")
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取图片路径
        ServletContext context = this.getServletContext();
        String path = context.getRealPath("/WEB-INF/classes/少女时代.jpg");
        //截取文件名
        File file = new File(path);
        String filename = file.getName();
        //修改文件名的编码格式
        filename = new String(filename.getBytes(), "iso-8859-1");

        //添加响应头
        response.setHeader("content-disposition", "attachment;filename="+filename );
        response.setHeader("content-type ", "image/jpg");

        //读文件
        FileInputStream fis = new FileInputStream(path);
        ServletOutputStream sos = response.getOutputStream();
        //读写
        byte[] b = new byte[1024];
        int len = 0;
        while (((len = fis.read(b))!=-1)) {
            //将图片写回服务器
            sos.write(b, 0, len);
        }
        fis.close();
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
4.请求重定向
package com.lanou3g;
/*
 * 请求重定向
 * 浏览器发起请求(请求Servlet)
 * Servlet给浏览器一个响应 
 * 在响应中会携带一个重定向响应头(头中有重定向的访问网址)
 * 浏览器接到这个响应后 发现重定向头 
 * 再一次发起请求 去访问重定向头中的地址
 * 
 * 请求重定向和请求转发的区别
 * 请求重定向是发起了两次请求(网址发生了变化)
 * 请求转发只是一次请求
 * 
 * 响应时要注意的细节
 * 从response中获取的字符流和字节流 
 * 在同一个servlet中不能同时使用
 */
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Demo07 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //fun1(response);   
        //fun2(response);
        //fun3(response);
    }
    private void fun3(HttpServletResponse response) throws IOException {
        // 设置响应的字符集
        response.setContentType("text/html;charset=UTF-8");
        // 3秒后 跳转一个请求地址
        response.setHeader("refresh", "3;url=/sh-web-servlet03/demo08");
        response.getWriter().write("3秒后跳转很开心");
    }
    private void fun2(HttpServletResponse response) throws IOException {
        // 添加刷新头(每秒刷新一次)
        response.setIntHeader("refresh", 1);
        // 添加随机数
        response.getWriter().write(Math.random() + "");
    }
    // 通过请求头的方式 请求重定向
    private void fun1(HttpServletResponse response) {
        System.out.println("我要借钱");
        System.out.println("我没有,去找demo08");
        // 注意:添加头信息请求地址的时候 需要写工程名
        // 添加重定下个响应头   配置       
        response.setHeader("location", "/sh-web-servlet03/demo08");
        // 添加重定向状态码
        response.setStatus(302);
        System.out.println("我去了");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
5.HttpServletRequest 请求对象
package com.lanou3g;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
 * HttpServletRequest 请求对象
 * 包含
 * 请求行
 * 请求头
 * 请求体
 */
public class Demo08 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 打印获取请求网址
        // http://localhost:8080/sh-web-servlet03/demo08
        System.out.println(request.getRequestURL());
        // /sh-web-servlet03/demo08
        System.out.println(request.getRequestURI());
        // 获取请求的类型  GET
        // 用浏览器直接请求的都是get请求
        System.out.println(request.getMethod());
        // 获取请求路径(相对路径) /sh-web-servlet03
        System.out.println(request.getContextPath());

        // 获取请求中携带的参数 
        // 参数是 你提交表单的时 表单的name属性
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println(username + "  " + password);

        // 判断浏览器
        // 可以通过请求头中的信息获取用户使用的浏览器
        // Firefox chrome
        String header = request.getHeader("User-Agent");
        System.out.println(header);
        if(header.toLowerCase().contains("firefox")) {
            System.out.println("用的是火狐");
        }else if(header.toLowerCase().contains("chrome")) {
            System.out.println("谷歌");
        }else {
            System.out.println("其他浏览器");
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值