服务请求过程
地址栏发生了改变,那么就是发送了新的请求。
JSP页面跳转
jsp间的页面跳转有两种方式,分别是重定向和转发:
重定向语句:
response.sendRedirect(“welcom.jsp”);
转发语句:
request.getRequestDispatcher(“welcom.jsp”).forward(request, response);
重定向和转发的区别:
- 重定向时地址栏发生改变,转发时地址栏没有改变。
- 重定向时发生了新的请求,转发时用的还是上一次的请求。
- 重定向不可携带参数,转发会将上一级的参数也发送过去。
那么这两个的区别是什么意思呢?
首先,以登录页面为例,登录页面首先是一个.jsp页面,客户输入账号和密码,点击登录时,页面会向服务器发送申请,服务器会有一个中转.jsp页面(当然也可以是Servlet文件)来接受来自请求request中的参数,并对其进行处理,如判断账号密码是否正确,如果正确,中转页面会通过重定向和转发两种方式跳转至客户登录后的.jsp如welcom页面。此时在welcom页面,如果通过转发的形式跳转的,那么其是携带参数的,携带的参数保存在request中,是上一次的参数,即用户输入的账号和密码,则可以通过request对象获取到该参数。但如果是通过重定向方式跳转页面的话,不会传参数过去,即通过request对象无法获取到参数。即在welcom页面获取不到用户的账号和密码。
而且可以注意到,通过重定向页面跳转时,地址栏显示的是welcom页面地址,即服务器响应返回的.jsp文件,但是通过转发页面跳转时,地址栏显示的是中转页面的地址。
页面请求传参
用户在浏览器页面输入某些数据并点击切换页面时会向服务器发送请求新的页面信息,在此请求过程中需要向服务器传递参数,向服务器传参的过程有三种方法:
1. request对象传参
request对象是在页面请求时携带页面参数的对象,可通过request对象来通过参数名获取值,如下:
String name = request.getParameter(“name”);
String password = request.getParameter(“password”);
out.print(“姓名:”+name+"\t密码:"+password);
所以要在输入参数值的页面对输入的数据都要命名才能通过参数名获取。如提交表单时:
<form action="MyJsp.jsp" method="post">
<div align="center">
<label>用户名:<input type="text" name="username"></label><br>
<label>密码:<input type="password" name="password"/></label><br/>
<label>爱好:<input type="checkbox" name="hobby" value="摄影">摄影
<input type="checkbox" name="hobby" value="绘画">绘画
<input type="checkbox" name="hobby" value="手工">手工
</label>
<input type="submit" value="登录"/>
</div>
</form>
2. a标签超链接传参
<a href="two.jsp?name=admin&password=123">点击这里</a>
在?后面 参数名=值,有多个参数时,中间用&连接。?参数名=值&参数名=值
3. js传参
<script type="text/javascript">
function fclick()
{
window.location.href = 'two.jsp?name=admin&password=123';
}
</script>
同a标签传参一样,都是在地址跳转时在地址栏传参。