管理系统疑问总结
一、jsp之间的重定向/转发
1.重定向
重定向:
- 客户端自己改变
- 改变地址栏地址
- 无法传递值,至今没有发现如何传递
response.sendRedirect("regRequest.jsp");
//或者
String site = "http://www.runoob.com" ;
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);
2.转发
转发:
- 服务端为客户端完成页面传递
- 地址栏不变
- 信息可以传递
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")
返回值之间的区别
- getParameter()获取的是客户端设置的数据。
getAttribute()获取的是服务器设置的数据。 - getParameter()永远返回字符串
getAttribute()返回值是任意类型