栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

请求、请求转发、response、重定位

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

请求、请求转发、response、重定位

一、请求行数据

1.获取谞求行数据

Get /web01/demo1?name=zhangsan Http/1.1

方法: 1.获取谓求方式:GET String getMethod()

2.获取虚拟目录: String getContextPath();

3.获取 Servlet路径:/demo1 string getServletPath();

4.获取get方式参数:name= zhangsan String getQueryString()

5.获取请求URI: string getRequestURI(): /web01/demo1 Stringbuffer getRequestUrl(): http://localhost/web01/demo1

6.获取协议及版本:HTTP/1.1 String getProtocolo()

7.获取客户机的IP地址 String getRemoteAddr()

例子:

package com.zhujiantao;
​
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
​
import javax.jws.WebService;
import java.io.IOException;
//*为任意符
@WebServlet("*.do")
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(req.getMethod());
        System.out.println(req.getContextPath());
        System.out.println(req.getServletPath());
        System.out.println(req.getQueryString());
    }
}
​
//输入123.do?name=hello

结果:

 

请求头数据
  1. String getHeader(String name);通过请求头的名称 获取请求头的值

  2. Enumeration getHeaderNames(); 获取所有请求头数据

    Enumeration headerNames = request.getHeaderNames();
    while(headerNames.hasMoreElements()){
        String name = headerNames.nextElement();
        String value = request.getHeader(name);
        System.out.println(name+" "+value);
    }

获取请求体数据(重点)

获取传递过来的参数

请求体: 只有post请求方式,才有请求体,在请求体中分装了post请求的请求参数

获取流对象

BufferedReader getReader();获取字符输入流,只能操作字符数据

ServletInputStream getInputStream();获取字节输入流,可以操作所有类型的数据(使用在文件上传中)

例子:

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
​
import javax.jws.WebService;
import java.io.BufferedReader;
import java.io.IOException;
@WebServlet("*.do")
public class UserServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        String age = req.getParameter("age");
        System.out.println(name);
        System.out.println(age);
    }
}
​
//传入name=hello参数

传参

 

结果:

 

注意:传数据要用Post,比较安全,Get会直接暴露数据在地址栏

其他(get和post都可以使用)
   
 1. String getParameter(String name):根据参数名称获取参数值  username=zs&password=123
    2. String[] getParameterValues( String name):根据参数名称获取参数值数组 username=zs&username=ls
    3. Map  getParameterMap():获取所有参数的map集合
乱码问题

get方式: tomcat 已经处理了get的中文乱码问题

post方式: doPost中设置 request.setCharacterEncoding("utf-8");

二、请求转发

一种服务器内部资源跳转的方式,servlet之间的跳转

步骤:

1.通过request对象获取请求转发器对象

RequestDispatcher

request.getRequestDispatcher(String path)

  1. 通过RequestDispatcher对象来进行转发:

    RequestDispatcher.forward(ServletRequest request,ServletResponse response);

特点:

// 使用示例:
req.getRequestDispatcher("/SchoolServlet").forward(req,resp);
1. 地址上显示的是请求servlet的地址,返回200ok。
2. 请求次数只有一次,因为是服务器内部帮客户端执行了后续的工作。 
3. 只能跳转自己项目的资源路径。  
4. 效率上稍微高一点,因为只执行一次请求。 
5. 可以使用上一次的request对象。
共享数据

1. 域对象: 一个有作用范围的对象,可以在范围内共享数据

2. request域: 代表一次请求的范围,一般用于请求转发的多个资源数据

方法

1. req.setAttribute(String name,Object object);存储数据
2. Object getAttribute(String name);通过键获取数据
3. Void removeAttribute(String name); 通过键移除键值对
三、response 响应行
  1. 组成: 协议/版本 响应状态码 状态码描述

  2. 响应状态码: 服务器告诉客户端浏览器本次请求和响应的一个状态。

    状态码都是3位数字

    分类: 1XX:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1XX状态码

2XX:成功。代表:200

3XX:重定向。代表:302(重定向),304(访问缓存)

4XX:客户端错误。(404找不到后台的地址)

5Xx:服务器端错误。代表:500(服务器内部出现异常)

响应头

常见的响应头

1.Content-type: 服务器告诉客户端本次响应体数据格式以及编码格式

2.Content-disposition: 服务器告诉客户端以什么格式打开响应体数据

In-line: 默认值,在当前页面打开

attachment;filename=xxx: 以附件的形式打开响应体,文件下载

 

响应行

设置status、version

响应体

传输的数据

HttpServletResponse

功能: 设置响应消息

设置响应行

1.格式:HTTP/1.1 200 ok

2.设置状态码: setStatus(int sc)

设置响应头: setHeader( string name, string value)

设置响应体:

使用步骤:

1.获取输出流 ​ 字符输出流: Printwriter getwriter() ​ 字节输出流: ServletOutputStream getOutputStream()

2.使用输出流,将数据输出到客户端浏览器

 response.setContentType("text/html;charset=utf-8");
        response.getWriter().write("执行成功");
            //因为中文是乱码,需要加入setContentType

注意:图片需要用file去获取输出流,末尾还要关闭流

四、重定向

重定向特点:

1.地址栏发生变化

  1. 重定向可以访问其他站点(服务器)的资源

  2. 重定向是两次请求,不能使用request对象来共享数据

转发特点:

1.转发地址栏路径不变

2.转发只能访问当前服务器下的资源

  1. 转发是一次请求,可以使用request对象来共享数据

五、路径

相对路径: 通过相对路径不能确定唯一资源,如: ./myservlet3,不以/开头,以.开头

规则: 找到当前资源和目标资源之间的相对位置 http://localhost:8081/javaweb01/userServlet, http://localhost:8081/javaweb01/shopServlet

绝对路径: 通过绝对路径可以确定唯一资源,如http://localhost:1888/web01/index.html /web01/index.html,以/开头

规则:

如果给客户端浏览器使用,需要添加项目的虚拟目录(比如表单的提交)

如果给服务器使用: 不需要加项目的虚拟目录(比如:重定向)

六、动态获取虚拟目录
String contextPath = request.getContextPath();

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007746.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号