2014-05-18 2 views
1

:"Concurrency In Practice"에 갇혀있다. 이 책에서 비 저장 서블릿

2.1.1. 예제 : Stateless Servlet 1 장에서는 스레드를 생성하고 해당 스레드에서 구성 요소를 호출하는 여러 프레임 워크를 나열하여 구성 요소를 스레드로부터 안전하게 만드는 책임을 맡겼습니다. 스레드 안전성 요구 사항은 쓰레드를 직접 사용하는 결정이 아니라 서블릿 프레임 워크와 같은 기능을 사용하기로 결정한 경우에 발생합니다. 서블릿 기반의 간단한 인수 분해 서비스를 개발하고 천천히 확장하여 스레드 안전성을 유지하면서 기능을 추가 할 것입니다.

목록 2.1에서는 간단한 분해 servlet을 보여줍니다. 그것은 서블릿 요청에서 고려 될 수를 풀고, 그 결과를 고려하여 그 결과를 서블릿 응답으로 패키징합니다. 위에서 말했듯이

그리고 다른 아무것도

@ThreadSafe 
public class StatelessFactorizer implements Servlet { 
public void service(ServletRequest req, ServletResponse resp) { 
    BigInteger i = extractFromRequest(req); 
    BigInteger[] factors = factor(i); 
    encodeIntoResponse(resp, factors); 
     } 
    } 

가 제공하는 코드 예제, 나는 일이 먼저 일을하고 서블릿을 수정 동적 웹 모듈을 사용하여 이클립스 간단한 서블릿을 작성하여 작업을 얻을 시도 다음 코드로 예를 들어 보겠습니다.

package com.serialize; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.math.BigInteger; 

import javax.servlet.Servlet; 
import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class Test1 
*/ 
@WebServlet("/Test1") 
public class Test1 implements Servlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public Test1() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     PrintWriter pw = response.getWriter(); 
     pw.print("test1"); 
    // service(request, response); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void destroy() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public ServletConfig getServletConfig() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public String getServletInfo() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void init(ServletConfig arg0) throws ServletException { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void service(ServletRequest req, ServletResponse resp) 
      throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     BigInteger i = extractFromRequest(req); 
     BigInteger[] factors = factor(i); 
     PrintWriter pw = resp.getWriter(); 
     pw.print(factors); 
     // encodeIntoResponse(resp, factors); 
    } 

    private BigInteger extractFromRequest(ServletRequest req) { 
     // TODO Auto-generated method stub 
     String num = req.getParameter("factor"); 
     return BigInteger.valueOf(Long.parseLong(num)); 
    } 

    private BigInteger[] factor(BigInteger i) { 
     // TODO Auto-generated method stub 
     long number = i.longValue(); 
     BigInteger[] ret = null ; 
     for(long j=2,indx=0;j<number/2;j++) 
     { 
      while(number%j == 0) 
      { 
       ret[(int) indx++]=BigInteger.valueOf(j); 
       number = number/j; 
      } 

     } 

     return ret; 
    } 
} 

어떤 도움 :하지만이 404 오류을 얻고 이번에는 어떻게 나의 새로운 servlet있는 지금

implements servlet 

대신에 내가 시도

extends HttpServlet 

코드를 테스트 할 수 있습니다 매우 높이 평가 될 것입니다.

+0

this 튜토리얼에서 하나를 유사합니다 귀하의 코드? 어떤 URL을 사용하고 있습니까? –

+0

브라우저에서 http : // localhost : 8080/testapp/Test2와 같이 액세스하고 있습니다. – anirban

답변

0

코드를 서비스 메소드가 아닌 doGet 메소드 내에 넣으십시오.

Servlet을 구현하지 말고 HttpServlet 클래스에서 확장하십시오.

어떻게 서블릿에 액세스하는