2013-10-29 6 views
0

.NET 배경에서오고 Java (Servlets/JSP)의 몇 가지 기본 사항을 시도합니다. .NET에는 ViewState, Session, Application 변수가 있습니다. 내가 읽은 것에서, 애플리케이션 변수에는 ServletContext라고하는 Java의 형제가 있습니다. 간단한 서블릿 프로그램을 만들었습니다.ServletContext 변수가 값을 유지하지 않습니다.

public class SimpleServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 

    String userName = request.getParameter("userName"); 

    ServletContext context = request.getServletContext(); 
    context.setAttribute("savedContextUserName", userName); 

    out.println("Hello! " + context.getAttribute("savedContextUserName")); 
} 

브라우저를 열고 다음을 전달하여 올바른 출력을 얻습니다. 즉 Hello! 스튜어트

http://localhost:8080/ServletProject/SimpleServlet?userName=Stuart 

그런 다음 다른 브라우저 인스턴스를 열고 다음을 전달하지만 Hello! null

http://localhost:8080/ServletProject/SimpleServlet 

새 브라우저 인스턴스를 열 때 컨텍스트에 Stuart 값이 유지되어서는 안됩니까? .NET의 Application 변수는 분명히 그것을 유지했을 것입니다. 내가 여기서 누락 된 것이 있습니까?

답변

2

가치의 유지 되나 당신이 http://localhost:8080/ServletProject/SimpleServlet를 호출 할 때이 우선합니다 ServletContext 속성을 그래서 당신은 문맥

String userName = request.getParameter("userName"); 
if(userName != nul && !userName.isEmpty()) { 
    ServletContext context = request.getServletContext(); 
    context.setAttribute("savedContextUserName", userName); 
} 
에 널 (null)을 설정하는 것을 방지하기 위해이 조건을 넣어해야

String userName = request.getParameter("userName"); 
//now userName is null 
ServletContext context = request.getServletContext(); 
context.setAttribute("savedContextUserName", userName); //null is now set into the context 

를 null로

또는 값을 설정하기 전에 인쇄하십시오. 사용 사례에 따라 다릅니다.

+0

@ 감사합니다. 나는 그것을 얻었다 :) –

2

그것은 아래 같은 코드가있는 경우 (setAttribute(...) 전에 인쇄 문을 준수) 것입니다 확인하십시오

ServletContext context = request.getServletContext(); 
    out.println("Hello! " + context.getAttribute("savedContextUserName")); 
    context.setAttribute("savedContextUserName", userName); 

를 현재 코드, 컨텍스트 변수가지고 재정으로 먼저 null (당신은 새 브라우저에서 두 번째 전화를 할 때) 그리고 나서 인쇄 중입니다.

+0

'context'는 사용되는 라인 바로 아래에 선언됩니다. –

+0

@LuiggiMendoza : 수정되었습니다. 감사! – kosa

관련 문제