重定向/转发、jsp传递信息、getAttribute与getParameter区别

管理系统疑问总结

一、jsp之间的重定向/转发

1.重定向

重定向:

  1. 客户端自己改变
  2. 改变地址栏地址
  3. 无法传递值,至今没有发现如何传递
response.sendRedirect("regRequest.jsp");
//或者
String site = "http://www.runoob.com" ;
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site); 

2.转发

转发:

  1. 服务端为客户端完成页面传递
  2. 地址栏不变
  3. 信息可以传递
java代码:
request.getRequestDispatcher("b.jsp").forward(req,resp);
jsp代码:

可以通过<jsp:param>传递参数,传递的目的文件必须是动态文件(jsp),含义与java代码基本相同

<jsp:forward page="b.jsp">
	<jsp:param name="name" , value ="value"></jsp:param>
</jsp:forward>

跳转的界面可以通过以下获取传递来的数据

request.getParameter("name")

3.跳转

以上两种都是jsp在运行到代码的时候就跳转,即自动跳转

在用了以上的很多之后,才发现如果想要实现点击跳转页面+传递数据,其实最好用的是html的<a>标签,既可以传递值,也没必要使用button标签添加一个累赘的按钮,现在的很多网页也是这么实现前端的携带信息跳转任务的

<a href="b.jsp+<%=name%>"></a>

二、关于如何在jsp文件之间互相传递信息

1.通过地址栏传递信息

即在a.jsp文件中,使用跳转界面,在目的文件地址后方添加参数

<a href="get_index.jsp?number=<%=number%>">点击跳转</a>   

2.通过request传递参数

传递值的方法有很多种,页面重定向/转移的方法也有很多种,以上已经说过,如果需要自动跳转,传递本文件的内容,选择转发即可,但是在学习中发现存在一种问题。

如果在本文件中写了购买票务的底层逻辑,并且在本文件中转发给另一个文件,因为地址栏不变,这是服务器给你改变的网页内容,当你刷新的时候,又运行了一次底层的购买票务逻辑,票就会又少一张,这是很恐怖的结果,所以最方便的结果,就是把需要转发给其他文件的内容,通过地址栏传过去。这样另一个文件也可以通过request的方法获得网址中的参数。

a.jsp

<%request.setCharacterEncoding("UTF-8"); %>
<%request.setAttribute("name", "李白"); %>
<jsp:forward page="index.jsp"></jsp:forward>

b.jsp

<%=(String)request.getAttribute("name")%>

三、关于Attribute与Parameter的区别

js中我们经常用到getAttribute和getParameter,两者都可以用来从其他文件获得数据,存在区别,这里总结一下

getAttribute()

用来获得request域中的参数,可以理解成把数据放到request对象中放在服务器端,也就是说,想要get必须先set。可以实现多个文件中的数据共享。(但是重定向会重置这个request对象,不信可以试试,也就更符合了重定向无法传递信息)

request.setAttribute("name","jack");
request.getAttribute("name");

getParameter()

客户端与服务器端之间的单纯单方面信息交换,这个客户端的数据提交可以使用html的表单,也可以是其他任何可以传递信息的跳转网页方法,但是需要注意的是没有setParameter()这个方法,也就是这个方法就是单纯的获得客户端传来的参数。

getParameter("username")

返回值之间的区别

  1. getParameter()获取的是客户端设置的数据。
    getAttribute()获取的是服务器设置的数据。
  2. getParameter()永远返回字符串
    getAttribute()返回值是任意类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值