文章目录
1.servlet返回参数乱码问题
//治标不治本
String name = req.getParameter("name");
String utf8Name = new String(name.getBytes("iso-8859-1"),"utf-8");
post中文乱码问题
req.setCharacterEncoding("UTF-8");
//将此句写在post方法最前面,此句话前面不要有别的赋值语句
//用于解决数据库返回参数的中文乱码问题
resp.setContentType("text/html ; charset=utf-8");
//将此句写在post方法最前面,解决输出到前端页面时的中文乱码问题
2.servlet跳转
-
如果要做查询操作,用:
-
因为forward后的地址栏不发生改变, 刷新后会增加请求次数(本来买一件东西,刷新后变成两件)
req.getRequestDispatcher("/login.jsp").forward(req,resp);
-
如果需要操作的功能(添加,删除,修改),用:
-
因为重定向后的地址栏发生改变, 刷新后不会增加请求次数.
resp.sendRedirect(req.getContextPath()+"/cookieServlet?action=getUsername");
注意:
-
如果用sendRedirect跳转,那么request域中的数据(setAttribute(,))不会传递过去
需要用session域保存数据
-
如果用getRequestDispatcher跳转,会传递由(setAttribute(,))保存在request域中的数据
-
2.5 跳转路径写法
request.getRequestDispatcher("/test.html").forward(request, response);
加 “/” 代表http://localhost:8080/工程名/web
不加 “/” 代表http://localhost:8080/工程名/web + servlet路径的前一个resp.sendRedirect("/Servlet_02/test.html");
加 “/” 代表http://localhost:8080
不加 “/” 代表http://localhost:8080/工程名/web + servlet路径的前一个
3.getAttribute与getParameter
-
getAttribute目前只用于获取session对象
servlet向前端传输参数功能已经被EL表达式取代 ${}
Cart cart = (Cart) req.getSession().getAttribute("cart");
-
getParameter用于获取网址链接中的参数
location.href = "${basePath}cartServlet?action=addItem&id="+ bookId+"&pageNo="+${requestScope.page.pageNo};
4.req.getHeader(“Referer”)原路径返回
-
获取跳过来的页面的请求头的referer部分的值
-
(用于加入购物车后,停留在当前页,需要保留pageNo的参数)
-
本质:跳回原来向servlet发请求的界面(原路径返回)