初始环境
问题展示
相关代码展示
header.html
<script>
$(function () {
$.get("findUserServlet",{},function (data) {
//{uid:1,name:'李四'}
var msg = "欢迎回来,"+data.name;
$("#span_username").html(msg);
});
});
</script>
FindUserServlet
package cn.itcast.travel.web.servlet;
import com.fasterxml.jackson.databind.ObjectMapper;
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 java.io.IOException;
import cn.itcast.travel.domain.User;
@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从session中获取登录用户
Object user = request.getSession().getAttribute("user");
//将user写回客户端
ObjectMapper mapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
mapper.writeValue(response.getOutputStream(),user);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
排查思路
1 浏览器按F12
经百度查询,经JavaScript代码放置html代码最后,但无济于事。
2 FindServlet
确定findServlet路径填写正确后,尝试在findServlet输出获取的User值
//从session中获取登录用户
Object user = request.getSession().getAttribute("user");
//将user写回客户端
System.out.println(user);
ObjectMapper mapper = new ObjectMapper();
发现在控制台结果输出为null;
即没有相应的Session.
3 保存Session
根据讲师的思路,获取Session是在loginServlet,于是在LoginServlet登录成功保存Session
if (u!=null&&u.getStatus().equals("Y")){
info.setFlag(true);
request.getSession().setAttribute("user",u);
}
至此,问题解决。