protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session=request.getSession();
RequestDispatcher dis=request.getRequestDispatcher("/home.jsp");
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
switch(request.getServletPath()){
case "/user/login":
String target=request.getParameter("target")==null?
"":request.getParameter("target");
session.setAttribute("target", target);
request.setAttribute("pageName", "/user/login.jsp");
dis.forward(request, response);
break;
서버에 정보를 임시로 저장하려면 session을 이용하면 되는데, 이 세션은 브라우져가 켜져 있을때만 유지가 된다. java 컨트롤러에서 session을 가져오려면,
HttpSession session=request.getSession();
을 선언해 주고, 세션에 원하는 정보를 저장해 주면 된다.
String target=request.getParameter("target")==null?
"":request.getParameter("target");
session.setAttribute("target", target);
이 부분이 있는데, 이것은 target을 삼항연산자로 파라미터로 attribute값을 target으로 가져왔을 때 그 값이 null이면 아무것도 가져오지 않고, 있으면 target값을 가져온다는 뜻이며,
세션에 그 target값을 저장하는 것인데, 그렇다면 target값은 누가 보내주는것인고 하니,
$("#div_cart").on("click","#btn-order", function() {
if (uid == "") {//로그인이 안된경우
location.href = "/user/login?target=/cart/list";
장바구니 jsp중 로그인이 안된 상태에서 주문하기 버튼을 눌렀을 경우 로그인을 하면서 cart/list로 가라고 타겟값을 주는 것이다. 그럼 위처럼 타겟값을 갖고 로그인이 되면,
const target = "${target}";
$(frm).on("submit", function(e){
e.preventDefault();
const uid=$(frm.uid).val();
const upass=$(frm.upass).val();
if(uid=="" || upass==""){
alert("아이디와 비밀번호를 입력하세요!");
}else{
$.ajax({
type:"post",
url:"/user/login",
data:{uid:uid, upass:upass},
success:function(data){
if(data==0) {
alert("아이디가 존재하지 않습니다!");
}else if(data==2){
alert("비밀번호가 일치하지 않습니다!");
}else{
alert("로그인 성공!")
if(target==""){
location.href="/";
}else{
location.href=target;
}
}
}
});
}
});
이렇게 타겟값이 있는 경우 타겟값을 갖고 ("/cart/list/")로 이동한다는 것이다.
아주 잘 만들어진 로직이다.