servlet中response.setHeader跳转页面带来的问题

        写项目的时候,有时候要在前台展示的内容比如对象或者list容器经常存放在request里面,用setAttribute方法,但是使用了response.setHeader方法进行页面跳转的时候,经常发生在跳转后的页面使用request.getAttribute方法get到的值为null

        这是因为setHeader的跳转页面前后两个页面并不使用同一个request,和这个一样的还用response的重定向sendRedirect方法,所以为了解决这个问题,可以使用request的getRequestDispatcher("路径名").forward(request,response);方法进行跳转。这个方法的前后页面共用同一个request

login.xtml为<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="LoginServlet" method="post"> 用户名:<input type="text" name="username"><br> 密   码: <input type="password" name="password"><br> <input type="submit" value="登录"> <input type="reset" value="重置"> </form> </body> </html>,现分别写三个servlet,LoginServlet,WelcomServlet,FailServlet,三个servlet代码分别是LoginServlet:package com.test.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class LoginServlet */ @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LoginServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-type", "text/plain;charset=UTF-8"); String username=request.getParameter("username"); String password=request.getParameter("password"); if(username!=null&&password!=null) { if(username.equals(password)) { HttpSession session=request.getSession(); session.setAttribute("username", username); response.sendRedirect("WelcomeServlet"); }else { response.getWriter().append("用户名密码错误,请重新登录,5秒后回到登录界面..."); response.setHeader("Refresh", "5;URL=login.html"); } } else { response.getWriter().append("禁止直接访问,5秒后回到登录页面......"); response.setHeader("Refresh", "5;URL=login.html"); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-type", "text/plain;charset=UTF-8"); String username = request.getParameter("username"); String password = request.getParameter("password"); if (username != null && password != null) { if (username.equals(password)) { HttpSession session = request.getSession(); session.setAttribute("username", username); response.sendRedirect("WelcomeServlet"); } else { response.getWriter().append("用户名密码错误,请重新登录,5 秒后回到登录界面..."); response.setHeader("Refresh", "5;URL=Login.html"); } } else { response.getWriter().append("禁止直接访问,5 秒后回到登录页面......"); response.setHeader("Refresh", "5;URL=Login.html"); } doGet(request, response); } } WelcomServlet:package com.test.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class WelcomeServlet */ @WebServlet("/WelcomeServlet") public class WelcomeServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public WelcomeServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response. setCharacterEncoding ("UTF-8" ) ; response.setHeader("Content-type", "text/plain;charset=UTF-8"); HttpSession session = request. getSession(false); if (session!= null) { String username = (String) session. getAttribute("username" ) ; if (username != null) response. getWriter().append("欢迎你,"+ username). append("< a href = 'LogoutServlet>退出登录</a >"); else { response.getWriter().append("你还没有登录,5 秒后跳转到登录页面⋯⋯"); response.setHeader ("Refresh","5;URL=login.html"); } } else { response.getWriter().append("禁止直接访问,5秒后跳转到登录页面.."); response. setHeader("Refresh", "5;URL=login.html"); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } } FailServlet:package com.test.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class FailServlet */ @WebServlet("/FailServlet") public class FailServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FailServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response. setCharacterEncoding ("UTF-8" ) ; response.setHeader("Content-type", "text/plain;charset=UTF-8"); HttpSession session = request.getSession(false); if (session!= null) { session. removeAttribute( "username" ) ; response. getWriter().append("注销成功,5秒后跳转到登录页面⋯"); response. setHeader ("Refresh", "5; URL=login.html" ) ; }else { response.getWriter().append("你还未登录,无须注销,5秒后跳转到登录页面⋯"); response. setHeader("Refresh", "5;URL=login.html");} } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } } 为什么在输入用户名和密码的时候输入同样的a还是显示服务器错误
10-21
显示package com.test.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class FailServlet */ @WebServlet("/FailServlet") public class FailServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FailServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response. setCharacterEncoding ("UTF-8" ) ; response.setHeader("Content-type", "text/plain;charset=UTF-8"); HttpSession session = request.getSession(false); if (session!= null) { session. removeAttribute( "username" ) ; response. getWriter().append("注销成功,5秒后跳转到登录页面⋯"); response. setHeader ("Refresh", "5; URL=login.html" ) ; }else { response.getWriter().append("你还未登录,无须注销,5秒后跳转到登录页面⋯"); response. setHeader("Refresh", "5;URL=login.html");} } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
最新发布
10-21
针对于表格:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="LoginServlet" method="post"> 用户名:<input type="text" name="password"><br> 密   码: <input type="password" name="password"><br> <input type="submit" value="登录"> <input type="reset" value="重置"> </form> </body> </html>用了三个servlet,第一个的doget方法是protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-type", "text/plain);charset=UTF-8"); String username=request.getParameter("username"); String password=request.getParameter("password"); if(username!=null&&password!=null) { if(username.equals(password)) { HttpSession session=request.getSession(); session.setAttribute("username", username); response.sendRedirect("WelcomeServlet"); }else { response.getWriter().append("用户名密码错误,请重新登录,5秒后回到登录界面..."); response.setHeader("Refresh", "5;URL=Login.html"); } } else { response.getWriter().append("禁止直接访问,5秒后回到登录页面......"); response.setHeader("Refresh", "5;URL=Login.html"); } }第二个的doget方法是protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response. setCharacterEncoding ("UTE - 8" ) ; response. setHeader ( "Content - type","text/html; charset = UTE - 8" ) ; HttpSession session = request. getSession(false); if (session!= null) { String username = (String) session. getAttribute("username" ) ; if (username != null) response. getWriter().append("欢迎你,"+ username). append("< a href = 'LogoutServlet>退出登录</a >"); else { response.getWriter().append("你还没有登录,5 秒后跳转到登录页面⋯⋯"); response.setHeader ("Refresh","5;URL =login.html"); } } else { response.getWriter().append("禁止直接访问,5秒后跳转到登录页面.."); response. setHeader("Refresh", "5;URL = 1ogin.html"); } }第三个的doget方法是protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response. setCharacterEncoding ("UTF - 8" ) ; response. setHeader ("Content - type", "text/plain; charset = UTF - 8") ; HttpSession session = request.getSession(false); if (session!= null) { session. removeAttribute( "username" ) ; response. getWriter().append("注销成功,5秒后跳转到登录页面⋯"); response. setHeader ("Refresh", "5; URL = login. html" ) ; }else { response.getWriter().append("你还未登录,无须注销,5秒后跳转到登录页面⋯"); response. setHeader("Refresh", "'5;URL = 1ogin. html");} }为什么我在用户名和密码都输入zly显示是禁止直接访问,5秒后回到登录界面
10-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值