【java初学】Servlet进阶

Servlet

1. 请求和响应
1.1 HttpServletRequest
1.1.1 HttpServletRequest介绍
	符合HTTP协议的请求对象,带有HTTP请求头的所有内容!!!作为JavaWEB开发中,我们所关注的是请求的【资源名字,参数】
	Request对象可以得到当前用户的请求方式 GET和POST,根据对应的请求方式采用不同的处理方法。
1.1.2 HttpServletRequest常用方法
方法功能
setCharacterEncoding(String)设置请求编码集
String getParameter(String)根据前端提交数据的name属性获取对应的值
Map<String, String[]> getParameterMap();获取前端提交数据的所有参数Map双边队列
String getRequestURL()获取用户请求资源完整URL
String getRequestURI()资源根目录和当前资源名字
String getMethod()获取用户请求方式
1.1.3 Tomcat乱码问题
Tocmat8乱码 Tomcat9
post请求乱码
	req.setCharacterEncoding("utf-8");
GET没问题
Tomcat7乱码[有毒]
GET请求乱码
	因为Tomcat7在本地服务器运行过程中,编码集方式是ISO8859-1 ==> UTF-8
	 req.getParameter("name").getBytes("ISO8859-1"), "UTF-8"
	 req.getParameter("age").getBytes("ISO8859-1"),"UTF-8"
POST请求乱码
	req.setCharacterEncoding("utf-8");
1.2 HttpServletResponse
1.2.1 介绍
	JavaWEB后台反馈数据给浏览器!!!
	1. 编码集
	2. cookie
	3. 反馈的数据类型
2. 转发和重定向
2.1 转发
2.1.1 什么是转发
你来的翻车磊洗浴中心
	前台小姐姐接待你,先生你今天需要哪一个技师啊
	狗昊 我要46号技师 【发送一次请求】
	前台小姐姐 对讲机呼叫 46号 46号 听到请回复,over 【内部资源处理】
		46号 来了老弟 over
	狗昊 带走了46号技师

转发操作是【服务器行为】
	1. 用户请求有且只有一次!!!
	2. 请求在转发过程中会带有必要的参数!!!
	3. 浏览器没有任何的URL变化
	4. 转发操作只能是当前服务器内部资源处理
2.1.2 转发使用方法和演示
package com.qfedu.c_RequestDispatcher;

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.util.ArrayList;

@WebServlet("/requestDispatcher1")
public class RequestDispatcher1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
         转发操作是通过Request对象完成的!!!
         getRequestDispatcher 设置转发操作路径,必须是内部资源
         forward(req, resp) Request和Response是用户请求当前服务器资源,Tomcat服务器对应创建的请求对象和响应对象
         通过转发传递到下一个资源中。

         转发操作可以带有参数操作,保存参数的对象是Request对象
        */
        req.setAttribute("奥特曼", 10);
        ArrayList<String> list = new ArrayList<>();
        list.add("狗昊");
        list.add("狗昊是个单身狗");
        list.add("狗昊是个SingleDog");
        list.add("狗昊是个PSFP");

        req.setAttribute("list", list);

        req.getRequestDispatcher("requestDispatcher2").forward(req, resp);
    }

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

package com.qfedu.c_RequestDispatcher;

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.util.List;

@WebServlet("/requestDispatcher2")
public class RequestDispatcher2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int i = (int) req.getAttribute("奥特曼");
        List<String> list = (List<String>) req.getAttribute("list");

        System.out.println(i);

        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("转发成功!!!");
    }

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


2.2 重定向
2.2.1 什么是重定向
洗浴中心
	狗昊来到翻车磊洗浴中心
	狗昊 我找46号技师【一次请求】
	前台小姐姐 46号今天去二店了
	狗昊 跑到二店
	狗昊 我找46号技师 【又一次请求】
	......

重定向是浏览器行为:
	1. 用户请求两次或者两次以上
	2. 重定向不会带有上一次请求的参数
	3. 浏览器URL会发送改变
	4. 重定向可以是服务器内部资源也可以是外部资源
package com.qfedu.d_Redirect;

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;

@WebServlet("/redirectTest1")
public class RedirectTest1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("欢迎光临,滚~~~");

//        resp.sendRedirect("http://www.jiayuan.com");
        resp.sendRedirect("responseTest");
    }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值