2014-06-08 2 views
0

문제점이 있습니다. 링크를 클릭하면 실행이 서블릿에 전달됩니다. 이 서블릿에는 서블릿이 시작될 때 실행되어야하는 오버라이드 된 init()가 있습니다. 내 질문은 CountriesList 012SPJSP 페이지에 요소를 전달할 수 있습니다. doGet() 또는 doPost() 함수를 사용하는 경우 forward() 함수를 사용할 수 있지만이 경우는 아닙니다. 어떤 생각?서블릿 실행 후 결과를 jsp 페이지로 전달

@Override 
public void init() 
      throws ServletException 
{ 
     this.getServletContext().setAttribute("CountriesList", signUpBean.getContriesList()); 
} 

편집

문제는 Servlet 인스턴스가 재사용 될 때

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException 
    { 
     request.setAttribute("CountriesList", signUpBean.getContriesList()); 

     String arg = "/signup.jsp"; 
     RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher(arg); 
     dispatcher.forward(request, response);    
    } 

답변

1

init가 호출 해결했다. 그러나 Servlet 인스턴스는 한 번 생성되고 여러 번 재사용 될 수 있습니다 (매 번 doGet, doPost ...).

본질적으로 init()은 인스턴스 생성 후 서블릿 초기화 용이며 다른 것은 없습니다. doXXX 메소드를 사용하여 요청을 처리합니다.

UPDATE :

이 (당신의 예에서, processRequest 또는)을 doGet 예를 들면 당신이 ServletContext에 넣어 데이터를 검색하려면, 당신은 단지 값을 검색 할

List<Country> countriesList = (CountriesList) getServletContext().getAttribute("CountriesList"); 

을 .

getServletContext() 또한 JSP 자체에서 액세스 할 수 있습니다.

JSTL을 사용하고 있고 ServletContext 안에 빈을 넣는 경우 "응용 프로그램 범위"빈으로 검색 할 수도 있습니다. 하지만 List 또는 빈 배열을 사용하면 어떻게 작동하는지 알 수 없습니다.

+1

https://netbeans.org/kb/docs/javaee/ecommerce/entity-session.html 서블릿이 호출 될 때 db에서 모든 카테고리를 가져 오는 데 init() 함수가 사용됩니다. – Mazzy

+0

알았습니다. 무슨 뜻이야 ... 내가 문제를 어떻게 해결할 수 있는지 위에. – Mazzy

+0

그 코드가하는 것은 ServletContext에 속성을 추가하는 것입니다. 이것은 webapp만큼 오래 살아갈 변수로 정의하는 것과 같습니다. – SJuan76

1

왜 JSP 페이지의 signUpBean에서 국가 목록을 가져 오지 않습니까?

+0

이 방법으로 POST 및 GET 요청을 처리하기 위해 서블릿에 맡길 수있는 가장 좋은 방법이라고 생각합니다. – Mazzy

+1

EJB를 전달하는 대신 Servlet에서 EJB 로직 (v.g. categoryFacade.getCountries())을 실행하고 JSP에만 결과를 전달하는 것이 좋습니다. – SJuan76

+0

@ SJuan76 위에서 보여준 것과 같습니다. 권리? – Mazzy

관련 문제