2013-03-01 1 views
3

다음은 데이터베이스에서 값을 검색하기 위해 작성한 코드입니다 (전체 코드를 추가 했으므로 사용자가 쉽게 이해할 수 있습니다. 여기에 말하십시오.) :JDBC에서 값을 검색하고 JSTL 태그를 사용하여 메소드를 호출하십시오.

아래 코드는 데이터베이스의 값을 선택 상자에 채우는 데 사용한 JSP 코드입니다.

<select name="sltSection"> 
<% 
    AddRecords added = new AddRecords(); 
    String sectionNm [] = added.populateSelect(); 
     for(int i=0; i<sectionNm.length; i++){ %> 
    <option> 
     <% out.print(sectionNm[i]); %> 
    </option> 
<% } %> 
</select> 

위의 코드는 컴파일 오류없이 정상적으로 작동합니다. 보시다시피 .jsp 페이지에서 자바 코드를 사용하여 작업을 수행 했으므로 잘못된 작업입니다.

MVC에 따라이 코드를 구현해야하므로 JSTL 태그를 사용하여 .jsp 코드를 구현해야합니다? 그렇다면 어떻게해야합니까? 어떻게 클래스 AddRecords 클래스에서 개체를 인스턴스화하고 해당 메서드를 호출합니까? 누군가 나를 도울 수 있습니까? 미리 감사드립니다!

+0

의 범위와 관련된 클래스 만 포함되어야합니다. 데이터베이스와 통신하는 데 'JPA'를 대신 사용하십시오. –

+1

[servlet] (http://stackoverflow.com/tags/servlets/info)을 사용하여 해당 코드를 실행하고 세션 또는 요청 객체에 데이터를 저장하십시오. 그런 다음 [EL] (http://stackoverflow.com/tags/el/info)을 사용하여 데이터에 액세스 할 수 있습니다 ([JSTL] (http://stackoverflow.com/tags/jstl/info)를 사용하여 표시) . 나는 당신이이 연결을 통해서 가기 촉구한다, 우수하다. –

답변

2

JSP (View), Servlet (Controller) 및 엔티티, DAO 및 서비스 레이어 (모델)를 사용하여 전체 MVC 시나리오를 구현할 수 있습니다. . 이것은 당신이 무엇을 :

모델 :

데이타베이스 액세스 클래스와
  • DBConnection (데이터 액세스 계층) 당신의 DAO 클래스와
  • AddRecords (데이터 액세스 계층) 서비스로
  • 없음 클래스 클래스 (비즈니스 로직 계층). 이 예를 들어,이에 대한 RecordService 클래스를 보자 :

    public class RecordService { 
        public RecordService() { 
        } 
        //since it has no real business logic, it will serve as facade 
        public String[] getRecords() { 
         AddRecords addRecords = new AddRecords(); 
         return addRecords.populateSelect(); 
        } 
    } 
    

컨트롤러 :

  • 컨트롤러 없음 클래스 아직.

    • 당신은 이미 JSP 파일이 :

      @WebServlet("/RecordServlet") 
      public class RecordsServlet extends HttpServlet { 
          @Override 
          protected void doGet(HttpServletRequest request, HttpServletResponse response) 
           throws ServletException, IOException { 
           //it will fire on a GET request (like accessing directly to the URL 
           //from the browser) 
           //here you should load the data for the View (JSP) 
           loadData(request); 
           //forward to show the view 
           request.getRequestDispatcher("hello.jsp").forward(request, response); 
          } 
      
          @Override 
          protected void doPost(HttpServletRequest request, HttpServletResponse response) 
           throws ServletException, IOException { 
           //it will fire on a POST request (like submitting the form using POST method) 
           String selectedRecord = request.getParameter("selectedRecord"); 
           System.out.println(selectedRecord); 
           request.setAttribute("selectedRecord", selectedRecord); 
           loadData(request); 
           //forward to show the view 
           request.getRequestDispatcher("hello.jsp").forward(request, response); 
          } 
      
          //method to load the data available to select 
          private void loadData(HttpServletRequest request) { 
           RecordService recordService = new RecordService(); 
           String[] records = recordService.getRecords(); 
           //set the data as attribute on the request to be available on the View 
           request.setAttribute("records", records); 
          } 
      } 
      

    보기 : 당신은 일반 자바 EE를 사용하는 가정 때문에, 당신은 (Servlets StackOverflow wiki을 기반으로 구현) 서블릿을 사용합니다. 이름을 게시하지 않았으므로 전화 번호는 hello.jsp입니다. 예제를 실행하려면 지금

    <!-- at the beginning of the JSP, call the JSTL library --> 
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    
    <form action="RecordServlet" method="POST"> 
        Please select an element: 
        <select id="selectedRecord" name="selectedRecord"> 
         <c:forEach items="${records}" var="record"> 
         <option value="${record}">${record}</option> 
         </c:forEach> 
        </select> 
        <br /> 
        <input type="submit" value="Show selected record" /> 
        <c:if test="${not empty selectedRecord}"> 
         <br /> 
         You've selected ${selectedRecord}! 
        </c:if> 
    </form> 
    

을가 http://localhost:8080/YourWebProjectName/RecordServlet를 사용하여 프로젝트 및 액세스를 구축 : 난 그냥 JSTL를 사용하여 실제 JSP 코드를 ADAP 것입니다. 또한 web.xml 파일에서 설정할 수 있습니다.

<welcome-file-list> 
    <welcome-file>RecordServlet</welcome-file> 
</welcome-file-list> 

웹 프로젝트를 실행하면됩니다.

일부 노트 :이 AddRecord 클래스를 가지고 있기 때문에 클래스/메소드에 대한

  • 사용 관련 이름, 나는 RecordXXX을 사용 (이 RecordDAO 또는 UserDAO 또는 YourEntityDAO과 같은 코드의 독자들에게 더 유용한 무언가를해야한다).
  • 다른 패키지를 통해 클래스를 배포하십시오. 모든 패키지에는 DAO 클래스의 경우 edu.home.dao, 서비스/비즈니스 로직 클래스의 경우 edu.home.service,
+0

고맙습니다. 내 web.xml도 구성해야합니까? –

+0

@frozenhaart 응답이 업데이트되어'web.xml '에'RecordServlet'을 환영 파일로 추가 할 수 있음을 보여줍니다. –

+0

코드가 Luiggi를 많이 도왔고, [coreservlets] (http : // coreservlets.)에서 멋진 튜토리얼을 발견했습니다.com /) –

0

우선 MVC로 무언가를하려한다면 코드를 분리해야합니다. JSP 파일은 Java 코드가없는 요청에만 액세스합니다.

컨트롤러가 이와 같이해야합니다.

request.setAttribute("ipsections",added.populateSelect()); 

다음, 당신의 JSP 파일 반환 값으로 클래스

<select name='anything'> 
    <c:forEach items="${ipsections}" var="ipsection"> 
      <option value="${ipsection}">${ipsection}</option> 
    </c:forEach> 
</select> 
+0

당신의 대답은 불완전합니다. 그렇게하는 경우 JSP에 직접 액세스 할 때 서블릿 GET 요청은 전혀 호출되지 않습니다. –

+0

MVC 흐름을 가정합니다. 당신의 가정은 무엇입니까? – psabbate

+0

OP는 MVC 구현 방법을 정의하지 않았기 때문에 일반 Servlet을 사용하여 예제를 보여 주어야합니다. 그런 다음 Struts 2, Spring, JSF, GAE 또는 다른 MVC 프레임 워크를 사용하여 이것이 어떻게 활용 될지 권장합니다. –

1

사용 목록,

List<String> sectionName = new ArrayList<String>(); 

while (resultSet.next()) 
    sectionName.add(resultSet.getString("section_name")); 

다음 여기에

<select name='name'> 
<c:forEach var="parameter" items="${sectionName }"> 
    <option value="${parameter}">${parameter}</option> 
    </c:forEach> 
</select> 

할에 매개 변수는 meadiator 변수입니다 목록 변수 값에 액세스하는 중입니다.문자열 배열도 사용할 수 있습니다

+0

문자열 배열을 반환하고 JSTL 태그에서 사용할 수 없습니까? –

+0

당신은 어떤 것이 든리스트 또는 문자열 array.no 문제를 사용할 수 있습니다. – PSR

+0

var = "ipsection"인데, 어디에도 선언되어 있지 않습니다. –

관련 문제