logincheck.jsp的代码
if(doc.toString() != null){//id正确,取出数据库中的密码进行验证 String dbPwd = doc.getPassword(); if(dbPwd.equals(pwd)){//密码正确,跳转到主页面 request.setAttribute("pwd", pwd); response.sendRedirect("index.jsp");//1 }else{//密码错误,返回登陆页面,采用重定向的方式,提示用户密码错误 request.setAttribute("id", id); request.setAttribute("pwd", pwd); request.setAttribute("role", role); response.sendRedirect("login.jsp"); //request.getRequestDispatcher("login.html").forward(request, response); } }else{//id错误,保存用户信息,返回登录界面 } %>
1 处代码可替换为
%> <jsp:forward page="index.jsp"/> <%
或替换为
request.getRequestDispatcher("login.html").forward(request, response);
请求转发的方式:地址栏,发生在服务器端
index.jsp的代码:
如果采用请求转发的方式forward,request在重定向时被消灭了
所以不能用request.getAttribute();方式来获取数据
<body> This is my JSP page. <br> <% String pwd = (String)request.getAttribute("pwd"); %> <%=pwd %> </body>
response.sendRedirect(url);与<jsp:forward page="url">的区别
response.sendRedirect(url)
1)重定向,不转发请求,地址栏的url已改变
2)request.getAttribute(""),request.getParamter("")都获取不了
response.sendRedirect("/studyProject/myforward/end2.jsp?name=tomzhang");//可以带参数的
<jsp:forward page="" />
1)请求转发,地址栏的url不变
2)可以传递额外的参数
<jsp:param name="" value=""/>
3)request.getAttribute("");//基于请求的request共享
request.getParamter("");//请求转发
4)等同requestDispatcher.forward(url);
<jsp:forward page="/myforward/end.jsp?age=man">//可以带参数
*使用forward一定要注意url页面的链接,不要使用相对路径;url页面的当前路径其实是第1次请求时的当前路径,所以url页面的链接都应该采用绝对路径!
重定向参数传递问题
第一个例子
a.jsp中
<%
int x = 5;
response.sendRedirect("error.jsp?abc="+x);
%>
b.jsp中
int a;
if(request.getParameter("abc")!=null){
a=new Integer(request.getParameter("abc")).intValue();
out.println("a="+a);
}
第二个例子
a.jsp
message = "密码正确";
message = java.net.URLEncoder.encode(message.toString(),"utf-8");设置message的编码格式以便能够传到地址栏
response.sendRedirect("index.jsp?message="+message+"&role="+Integer.toString(role));多个参数
b.jsp
<%
String message = request.getParameter("message"); 取值的request。getParamter("");默认为string类型
int role = Integer.parseInt(request.getParameter("role"));
%>
<%=role %>
<%=message %>
response.sendRedirect无法传递中文参数的问题
今天在处理用 response.sendRedirect跳转页面传参数的过程发现,如果参数中有中文的话,在接收页面无法获取中文参数!
分析发现,原来是中文参数无法发送到接收页面。
request.setAttribute("tread_title", “文章标题”);
response.sendRedirect("/thread.jsp?tread_title="+tread_title);
在thread.jsp用request.getParameter("tread_title");获取到的值为null;查看才发现,请求中没有将参数的值带过来,只带了个参数的名称:http://www.crowdwork.com:8080/myweb/thread.jsp?tread_title=;后面的参数没有内容。需要在发送前处理下才能将参数带过去。
request.setAttribute("tread_title", “文章标题”);
tread_title = java.net.URLEncoder.encode(tread_title.toString(),"utf-8");
response.sendRedirect("/thread.jsp?tread_title="+tread_title);
这样处理后,发送的请求变成了:http://www.crowdwork.com:8080/myweb/thread.jsp?tread_title=文章标题;这样就可以在thread.jsp用request.getParameter("tread_title";);获取参数的值了。