request对象

request对象①(常用方法)

代码 

<%@ page import="java.util.Enumeration" %><%--
  Created by IntelliJ IDEA.
  User: skype
  Date: 2022/5/26
  Time: 16:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>request对象的常用方法①</title>
</head>
<body>

<!--<%  %>小脚本:嵌入Java代码的部分-->
<%
    request.setCharacterEncoding("utf-8"); // 设置当前请求编码集为utf-8 只针对于post请求  重点
    String method = request.getMethod(); // 获取请求方式
    String serverName = request.getServerName(); // 获取服务器名称
    int serverPort = request.getServerPort(); // 获取服务器端口
    String clientName = request.getRemoteAddr(); // 获取浏览器名称(IP)
    /* request.getRemoteAddr();request.getRemoteUser();request.getRemoteHost();这三个方法是一样*/
    int clientPort = request.getRemotePort(); // 获取浏览器端口
    String uri = request.getRequestURI(); // 获取到浏览器要请求的页面路径
    Enumeration<String> enumer = request.getHeaderNames(); // 获取到头部信息
    String contentType = request.getContentType(); // 获取页面格式和编码集
    String encoding = request.getCharacterEncoding(); // 获取到编码集
    String protocol = request.getProtocol(); // 获取到协议

    out.print("请求方式:"+method + "<br/>");
    out.print("服务器名称:"+serverName + "<br/>");
    out.print("服务器端口:"+serverPort + "<br/>");
    out.print("浏览器名称(IP):"+clientName + "<br/>");
    out.print("浏览器端口:"+clientPort + "<br/>");
    out.print("浏览器要请求的页面路径:"+uri + "<br/>");
    out.print("头部信息:"+enumer + "<br/>");
    out.print("页面格式和编码集:"+contentType + "<br/>");
    out.print("编码集:"+encoding + "<br/>");
    out.print("协议:"+protocol + "<br/>");
%>

</body>
</html>

运行结果 

这里发现ip显示的是localhost,如果想要显示 ip的是ip地址,大家可以把 网页搜索栏里的localhost改成自己的本机ip地址,想要获取自己电脑的IP地址可以在cmd命令里直接输入ipconfig就可以看到。

 这里的print报红是没有错的,代码运行完全没有问题,想要去掉这个报红,可以在idea的项目设置--->项目结构--->模块--->依赖--->添加--->库,选择tomcat,添加所选项并应用就好了,如果还是解决不了,可以把要输出的部分放在一个函数里,函数在<%!%>里面定义,然后在<% %>中调用,就不会再报红了

JSP中out.print()和out.printIn()为什么是一样的效果 

 另外,这里的out.print()和out.printIn(),是一样的效果,如果想要换行,可以在后面+“<br/>”来实现换行,因为,printIn()是java的换行,这里就涉及到jsp的流程,用户将1.jsp传给tomcat服务器,服务器首先将1.jsp翻译为1.Java,1.java会编译成1.class,然后运行(从1.Java到1.class printIn()其实实现了换行),但是在tomcat服务器经过编译后展示给用户的是1.html,

HTML的换行是<br/>,所以,哪怕通过编译将内容换行变成两行显示,最终的1.html在响应用户的时候由于两行内容没有用<br/>进行换行,所以它仍会合并为一行显示。举例如图所示

 这是两行字,但是没有<br/>进行换行,运行就会显示为一行,这也是在jsp中,为什么

 out.print()和out.printIn(),是一样的效果,都无法实现换行。

 request对象②(接收浏览器请求信息)

代码

2-1.jsp

<%--
  Created by IntelliJ IDEA.
  User: skype
  Date: 2022/5/26
  Time: 17:51
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<form action="2-2.jsp" method="post">
    账号:<input type="text" name="name"/><br/>
    密码:<input type="password" name="pass"/><br/>
    年龄:<input type="number" name="age"/><br/>
    爱好: <input type="checkbox" name="love" value="足球"/>⚽
    <input type="checkbox" name="love" value="篮球"/>🏀
    <input type="checkbox" name="love" value="乒乓球"/>🏓
    <input type="checkbox" name="love" value="网球"/>🎾<br/>
    <button>发送</button>
</form>

</body>
</html>

 2-2.jsp

<%@ page import="java.util.Map" %>
<%@ page import="java.util.Arrays" %><%--
  Created by IntelliJ IDEA.
  User: skype
  Date: 2022/5/26
  Time: 17:51
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>如何接收浏览器的请求信息</title>
</head>
<body>
<%
    //设置请求的编码集,处理乱码
    request.setCharacterEncoding("utf-8");
    //接收浏览器的请求信息
    String name=request.getParameter("name");//根据名字(name)获取到相应的值
    String pass=request.getParameter("pass");//根据名字(pass)获取到相应的值
    int age=Integer.parseInt(request.getParameter("age"));//getParameter()获取到的值是String,根据需要自行强转
    String [] love=request.getParameterValues("love");//接收一个参数多个值的情况(复选框,下拉菜单等)
    String sex=request.getParameter("sex");//没有参数名为sex的值,会显示为null
    Map<String,String[]> allParam=request.getParameterMap();//获取所以请求信息
    out.print(name+"<br/>");
    out.print(pass+"<br/>");
    out.print(age+"<br/>");
    out.print(Arrays.toString(love)+"<br/>");
    out.print(sex+"<br/>");
    out.print("<hr/>");
    out.print("所以传过来的参数名:"+allParam.keySet()+"<br/>");
    out.print("所以传过来的参数值:"+allParam.values()+"<br/>");
%>

</body>
</html>

 运行结果

request对象③(页面跳转---->转发)

代码 

3-1.jsp

<%--
  Created by IntelliJ IDEA.
  User: skype
  Date: 2022/5/27
  Time: 15:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>3-1.jsp</h1>
<%
    System.out.println("3-1.jsp");//方便在控制台观察页面跳转的情况
    //页面跳转---转发
    request.getRequestDispatcher("3-2.jsp").forward(request,response);
    //3-2.jsp 新跳转的页面,除此之外,其余写死
%>

</body>
</html>

3-2.jsp 

<%--
  Created by IntelliJ IDEA.
  User: skype
  Date: 2022/5/27
  Time: 15:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>3-2.jsp</h1>
<%
    System.out.println("3-2.jsp");
%>

</body>
</html>

运行结果 

可以发现,我去的是3-1.jsp,但是页面加载出来显示的内容实际上却是3-2.jsp的内容 ,在输出台上明显可以看出,运行了3-1.jsp,3-2.jsp也会运行。这就是通过request.getRequestDispatcher("3-2.jsp").forward(request,response);实现了3-1.jsp到3-2.jsp的一个页面跳转。

 

request对象④(request容器)

request容器,每次用户请求服务器的时候web容器就会自动创建request容器对象,它们是共存亡的。 

代码 

<%--
  Created by IntelliJ IDEA.
  User: skype
  Date: 2022/5/27
  Time: 15:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>4.jsp</title>
</head>
<body>
<%
    // request容器操作
    // 向request对象自带容器中添加内容
    request.setAttribute("A", 123); // 向request容器中存放了一个内容-->123,起名为A
    request.setAttribute("B", "admin");
    String[] array = {"aa", "bb", "cc"};
    request.setAttribute("C", array);
    request.setAttribute("D", "admin"); //Value可以重复
    request.setAttribute("B", true);// Key不能重复 会覆盖原有内容
    // 删除request对象自带容器中内容
    request.removeAttribute("C");
    // 从request对象自带容器中获取内容
    Object v1 = request.getAttribute("A");
    Object v2 = request.getAttribute("B");
    Object v3 = request.getAttribute("C");
    Object v4 = request.getAttribute("D");
    Object v5 = request.getAttribute("E");
    out.print(v1 + "<br/>");
    out.print(v2 + "<br/>");
    out.print(v3 + "<br/>");
    out.print(v4 + "<br/>");
    out.print(v5 + "<br/>");
%>

</body>
</html>

运行结果 

这里第三个也就是key为C的值是被删除了,所以显示null,而最后一个也就是E,我们没有放内容,所以也显示的是null

  request对象⑤(request的生命周期or作用域)

前面提到,每次用户请求服务器的时候web容器就会自动创建request容器对象,那我们未能在4.jsp里向request容器中放了写内容,现在我们在5.jsp里去取存放在request容器里的内容,5.jsp和4.jsp会有不同吗?

代码

<%--
  Created by IntelliJ IDEA.
  User: skype
  Date: 2022/5/27
  Time: 15:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>5.jsp</title>
</head>
<body>
<%
    Object v1 = request.getAttribute("A");
    Object v2 = request.getAttribute("B");
    Object v3 = request.getAttribute("C");
    Object v4 = request.getAttribute("D");
    Object v5 = request.getAttribute("E");
    out.print(v1 + "<br/>");
    out.print(v2 + "<br/>");
    out.print(v3 + "<br/>");
    out.print(v4 + "<br/>");
    out.print(v5 + "<br/>");
%>

</body>
</html>

运行结果

通过运行结果,可以明显发现,5.jsp去取request容器里的内容显示空的,也就是说什么也没有取到,既然request容器在每次用户请求服务器的时候自动创建,和服务器共存亡,那么,我在4.jsp里往request容器里存放的内容按理说5.jsp应该是可以拿到的,但事实却与之相反,这是为什么呢?这里就牵扯到一个request生命周期也就是作用域的问题

Request 作用域,它的作用域只是一次用户的请求内,即用户发送一个请求的时候Request 创建,当用户被响应这次请求的时候 Request 就会消亡。通俗来讲,就是用户请求页面加载的时候Request创建,页面展示出来时Request 消亡。

所以在这里,5.jsp拿不到4.jsp存放在容器里的内容 。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值