本文主要介绍了如下几个内容:
1.3种共享变量的区别以及SetAttribute()和GetAttribute()函数
2.request.getAttribute()和request.getParameter()的区别
3.request.getParameter()和request.getParameterValues()的区别
4.两种页面跳转的方式:request.getRequestDispatcher()和 response.sendRedirect()的具体含义和区别
该笔记在编写的时候参考了几个文章,在文末已经贴出了链接,需要的朋友可以去参考。
1.3种共享变量
1.1介绍
request:一次请求的范围 ,过了这次请求所有数据失效
request.setAttribute(name,value)
request.getAttribute(name)
请求转发时:session、getParameter都有值
重定向时:session、getParameter都无值
session:会话范围 :当前浏览器范围,只要不关闭浏览器 数据一直存在
request.getsession().setAttribute(name,value)
request.getsession().getAttribute(name)
请求转发时:session、getParameter都有值
重定向时:session有值、getParameter无值
servletContext:整个应用范围:服务器范围,只要服务器不关闭,数据一致存在
request.getsession().getServletContext().setAttribute(name,value)
request.getsession().getServletContext().getAttribute(name)
请求转发时:session、getParameter都有值
重定向时:session有值、getParameter无值
原则:能在request 就不要 放session 能在session 就不要在servletContext
原因:服务器可能一跑跑几年,浏览器页面也可能玩一天才关闭,只有请求是一次性的
1.2 实例代码
.1.2.1创建了一个SetShareVar的类,用来设置3个参数。
代码如下:
运行结果:
1.2.2还要创建一个测试类GetShareRequest。代码如下:
运行结果:因为request在SetShareVar中,所以在运行GetShareRequest后会出现request=null;
1.2.3适当修改代码,添加forward的跳转,可以实现request的保留。在setShareVar
中增加如下代码:
运行结果如下:
1.2.4 如果在其他的浏览器中运行,那么session也会是null。
2.两个区别
1.request.getAttribute()与request.getParameter()区别?
getParameter()方法是在服务器端接受客户端传递过来的数据时使用;
getAttribute()方法是在服务器内部使用,数据通过getParameter()获取进来后,在另一个页面还想继续使用这个数据就要把这个数据通过setAttribute()保存起来,需要使用的时候通过getAttribute()使用。
具体解释:
getParamter()方法的作用是获取到客户端通过表单或者utl请求参数所发送过来的参数值,是客户端和服务器端之间的交互,服务器端想要获取到客户端发送来的数据,就需要使用该方法。
getAttribute()与setAttribute()一般成对出现,通过set获取属性和属性值,通过get读取该值,(一般获取后需要向下转型)。两个函数都是在服务器端进行,客户端不知道其过程。
2、request.getParameterValues()与 request.getParameter()区别?
2.1区别。
request.getParameterValues(String name)是获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkobx类型
request.getParameter(String name)是获得相应名的数据,如果有重复的名,则返回第一个的值 . 接收一般变量 ,如text类型
2.2实例
1. 三个名字相同的text标签
<input type="text" name="test" value="1" />
<input type="text" name="test" value="2" />
<input type="text" name="test" value="3" />
request.getParameterValues("test") ----------------- [1, 2, 3]
request.getParameter("test") ------------------ 1
${paramValues.test}
${param.test}
2. checkbox
<input type="checkbox" name="habit" value="read">看书
<input type="checkbox" name="habit" value="movie">电影
<input type="checkbox" name="habit" value="game">游戏
request.getParameterValues("habit")
2.3与此相关的话题------隐含对象
JSP隐含对象(Implicit Object)
所谓隐含对象,是指当编写jsp网页时,不必做任何声明就可以直接使用的对象。 JSP2.0定义了九个隐含对象
request response pageContext session application out conifg page exception
这里只提一下request 和 response 两个对象
request 对象表示客户端请求的内容,比如我们从request中取得了用户输入的内容,实现了javax.servlet.http.HttpServletRequest接口
response对象表示响应客户端的结果。
上面我们使用了request的两个方法getParameter 和 getParameterValues,其实request还有其他几个比较重要的方法,这里只涉及几个获取请求参数的方法
String getParameter(String name) 取得name的参数值
String[] getParameterValues(String name) 取得所有name的参数值
Enumeration getParameterNames() 取得所有的参数名称
Map<String, String[]> getParameterMap() 取得request的所有参数的一个映射
//
Returns a Java.util.Map of the parameters of this request. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.
Returns:
an immutable java.util.Map containing parameter names as keys and parameter values as map values. The keys in the parameter map are of type String. The values in the parameter map are of type String array.
//
3.页面跳转
页面跳转一共有两种方式,分别为response.sendRedirect(重定向)和
request.getRequestDispatchaer(请求转发)
3.1具体含义:
3.1.1 response:
形式:重定向:response.sendRedirect("/项目名/路径名");
- response.sendRedirect("test.jsp");
3.1.2 request:
request是客户端对服务器的请求,其跳转页面的流程是,当客户端向服务器发起跳转请求时,服务器帮助客户端把跳转的页面加载到当前页面中来,地址栏显示的还是跳转之前的页面,而跳转之前客户端发起请求的头信息还是存在的。这是一种服务器行为。所以经过多次<jsp:forward page="">指令后,request中存储的的属性还是保留的。通过Forward只能发送请求道webapp下的资源。
若使用绝对路径,其中根路径是相对于webapp的,URL="/xxx",则实际发送请求到http://localhost:8080/webapp/xxx。
形式:请求转发:request.getDispatcher("相对路径").forward(request,response)
代码为:
- request.getRequestDispatcher("test.jsp").forward(request, response);
3.2五个区别:
参考:https://www.cnblogs.com/1020182600HENG/p/6092926.html
参考:https://blog.csdn.net/l_bestcoder/article/details/53559717
参考:https://blog.csdn.net/qq_27668813/article/details/51394736
参考:https://blog.csdn.net/qq_27668813/article/details/51394736