JAVA Servlet-Request对象 笔记

前言

http://192.168.0.311/sk/s01?name=dd&password=123456
sk 就是站点
s01 访问的服务类

Request对象的常用方法

        //常用方法   例 http://192.168.0.311/站点名称/对外访问路径?name=dd&password=123456

        //获取请求的完整路径(从http开始,到?前面结束)
        log(req.getRequestURL().toString());//注: 这里是 L

        //获取请求的部分路径(从项目站点开始,到最后?前面结束)
        log(req.getRequestURI());//注: 这里是 I

        //获取请求的参数(从?开始,到最后)
        log(req.getQueryString());

        //获取指定的参数
        String uname=req.getParameter("name");
        String upswd=req.getParameter("password");

        //获取重复的参数  一般如复选框的参数他们的参数名都是一样的  例 http://192.168.0.311/站点名称/对外访问路径?name=ddd&password=123456&hobbys=羽毛球&hobbys=足球&hobbys=篮球
        String[] hobbys =req.getParameterValues("hobbys");
        if (hobbys.length>0&&hobbys !=null){
            for (String s:hobbys){
                log(s);
            }
        }
        //获取请求方式(GET和POST)
        log(req.getMethod());

        //获取协议版本(HTTP/1.1)
        log(req.getProtocol());

解决中文乱码问题

/**
 * Tomcat8 及以上
 * GET 不会出现乱码
 * POST 会乱码 服务器是有一个默认的解码编码格式 ISO-8859-1,不能解析中文  ,所以解决方式是,重新设置解码编码格式
 *
 * 解决方式:获取参数前面加 req.setCharacterEncoding("UTF-8");
 *
 *
 * Tomcat7 及以下版本
 *
 *  POST 乱码 
 *  GET 乱码 
 * 无论什么版本 post请求都会乱码  所以重新设置解码编码格式  
 * req.setCharacterEncoding("UTF-8");
 *
 *GET 解决方式
 * 
 * new String(req.getParameter("name").getBytes("ISO-8859-1"),"UTF-8")
 *
 *
 * req.setCharacterEncoding("UTF-8"); 只针对POST请求
 * */

log(new String(req.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"));

请求转发(页面跳转)

跳转页面

package com.xxxx.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;


/**
 * 请求转发
 *    可以让请求由服务端跳转到客户端
 *    服务端行为
 *
 *    特点:
 *         1.服务端行为
 *         2.地址栏不改变
 *         3.
 * */

@WebServlet("/s03")
public class Servlet03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String uname=request.getParameter("name");
        log("Servlet03 uname:"+uname);
        //请求跳转到Servlet04
        //request.getRequestDispatcher("s04").forward(request,response);


        //请求跳转到 jsp页面
        //request.getRequestDispatcher("login.jsp").forward(request,response);

        //跳转到html 页面
        request.getRequestDispatcher("login.html").forward(request,response);
    }
}

被跳转页面

package com.xxxx.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;


/**
 * 请求转发
 *    可以让请求由服务端跳转到客户端
 *    服务端行为
 * */

@WebServlet("/s04")
public class Servlet04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String uname=request.getParameter("name");
        log("Servlet04 uname:"+uname);
    }
}

请求转发(页面跳转):就是有意向的页面跳转,比如输入账号密码登录成功后的跳转
重定向:你没有登录账号,但是却直接访问了登录后的页面地址,服务端检测到你没有登录就会告诉浏览器一个地址,浏览器就会再发一次请求,重定向到登录页面地址让你登陆

请求转发重定向
request.getRequestDispatcher(“s05”).forward(request,response);response.sendRedirect(“s05”);
一次请求,数据在request中共享两次请求,request中的数据不共享
服务端行为客户端行为
地址栏不发生变化地址栏发生变化
地址只能是项目下的资源,如jsp,html,等等文件可以是任意地址(跨域跳转),如www.baidu.com

Servlet 作用域(页面跳转传值)

我是这样理解的,用于页面跳转时传递数据给下个跳转的页面,只在一次请求中有效,即页面跳转中有效

使用方法:

设置域对象内容,传递的值

/*
*req.setAttribute(String name,Object value);
*req.setAttribute(键,值);
*/
req.setAttribute("uname","空白");

获取域对象内容,传递的值

/*
*req.getAttribute(String name);
*req.getAttribute(键);
*/
String name=(String)req.getAttribute("uname");

删除域对象内容,传递的值

/*
*req.removeAttribute(String name);
*req.removeAttribute(键);
*/
req.removeAttribute("uname");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值