2013-04-17 6 views
0

매우 간단한 서블릿을 작성하려고하는데 HTML 양식의 작업은 서블릿을 사용합니다. 이것은 이클립스 설정이다서블릿 클래스를 찾을 수 없음 예외

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>MyTubeServer</display-name> 

    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
    <servlet-name>servletClass</servlet-name> 
    <servlet-class>uploadServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>servletClass</servlet-name> 
    <url-pattern>/servletClass</url-pattern> 
    </servlet-mapping> 

</web-app> 

: 이것은 내 web.xml 파일이

public class uploadServlet extends HttpServlet 
{ 
    String awsAccessKey = "WHOOOPS"; 
    String awsSecretKey = "WHOOOPS/YWPkmKfe"; 
    AWSCredentials awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey); 

    protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException 
    { 
     boolean isMulti = ServletFileUpload.isMultipartContent(request); 
     if (isMulti) 
     { 
      ServletFileUpload upload = new ServletFileUpload(); 

      try 
      { 
       FileItemIterator iter = upload.getItemIterator(request); 
       while (iter.hasNext()) 
       { 
        FileItemStream item = iter.next(); 
        InputStream inputStream = item.openStream(); 
        if (item.isFormField()) 
        { 

        } 
        else 
        { 
         String fileName = item.getName(); 
         if (fileName != null && fileName.length() > 0) 
         { 
          S3Service s3Service = new RestS3Service(awsCredentials); 

          S3Object fileObject = new S3Object(); 
          fileObject.setDataInputStream(inputStream); 
          fileObject.setContentLength(Integer.parseInt(request.getHeader("Content-Length"))); 
          s3Service.putObject("vidvidbucket", fileObject); 

          //read stream of file uploaded 

          //store as a temporary file 

          //upload the file to s3 
         } 
        } 
       } 
      } 
      catch (Exception e) 
      { 

      } 
     } 

     response.sendRedirect("location of the result page"); 
    } 
} 

입니다 : 이것은 내 서블릿 클래스입니다

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Upload Video</title> 
</head> 
<body> 

<% 
    Object userSession = session.getAttribute("email"); 

if(userSession == null) 
{ 
    out.println("Welcome to the MyTube, you are not logged in. <br /><br >"); 
    out.println("Please click the following to login: <a href=\"login.jsp\">here</a>"); 
    out.println("Or Click this to register: <a href=\"register.jsp\">here</a>"); 
} 
else 
{ 
    out.println("<form action=\"servletClass\" method=\"post\" enctype=\"multipart/form-data\">"); 
    out.println("<input type=\"file\" name=\"file\" />"); 
    out.println("<input type=\"submit\" />"); 
    out.println("</form>"); 
} 

%> 

</body> 
</html> 

:

내 HTML 양식입니다 :

enter image description here

다른 게시물에서 WEB-INF 폴더에도 java 파일을 포함시켜야합니다. 하지만 계속 classNotFoundException이 발생합니다.

EDIT : stacktrace는 uploadServlet을 찾을 수 없다는 것을 나타내므로 혼란 스럽습니다.

편집 2 : servlet-class 대신 servlet-class의 XML 파일을 servletClass.uploadServlet으로 설정 한 후 요청한 소스를 얻습니다. (X/Location % Of % The % File % is %) 예외

+1

Java 소스 파일을 WEB-INF 폴더에 포함시킬 필요가 없습니다. – NilsH

+0

이 문제는 일반적으로 서블릿이 클래스 파일을 가져 오지 않을 때 발생합니다. uploadServlet의 전체 경로를 다시 작성하십시오. – Milesh

+0

ClassNotFoundException은 찾지 못한 클래스를 알려줍니다. 예외 추적을 읽고 이해하는 방법에 대해 알아보십시오. –

답변

3

web.xml이 잘못되었습니다. 이미지는,이

<servlet> 
<servlet-name>servletClass</servlet-name> 
<servlet-class>servletClass.uploadServlet</servlet-class> 
</servlet> 

Tomcat을 다시 시작

둘째처럼 형태의 행동에 컨텍스트 경로를 제공하려고한다, 그래서 패키지 계층에게

enter image description here

을 보여줍니다.

<% 
String contextPath = request.getContextPath(); 
%> 

out.println("<form action=\""+contextPath+"/servletClass\" method=\"post\" enctype=\"multipart/form-data\">"); 

편집 : 는 지금 서블릿 호출하기 생각하지만 이것은 어떤 유효한 JSP 페이지

response.sendRedirect("location of the result page"); 

변경을 잘못된 것입니다.

+0

도움 주셔서 감사합니다! ContextPath는 내 index.jsp로 돌아갑니다. servletClass.uploadServlet을 추가하면 요청한 소스가 표시됩니다 (X/Location % Of % The % File % is % Not % Found). – user1157751

+0

@ user1157751 : 질문에 오류 화면을 업로드 할 수 있습니까? 새로운 노력으로 편집 –

+0

새 오류가있는 스크린 샷을 추가했습니다. 이제 HTTP 404 오류가 발생했습니다. – user1157751

3

1

enter image description here

) 당신의 web.xml이 시도하지 않고 :

<servlet> 
<servlet-name>servletClass</servlet-name> 
<servlet-class>servletClass.uploadServlet</servlet-class> 
</servlet> 

서버를 다시 시작하고 확인합니다. 서블릿 코드에서

response.sendRedirect("location of the result page"); 

:

2) 두 번째 오류의 원인이 라인입니다. 적절한 사용 가능한 리소스로 리디렉션하십시오. 자세한 내용은 API을 참조하십시오.

+0

도움을 주셔서 감사합니다. "servletClass"를 추가하려고했습니다. 전에,하지만 내가 항상 얻는 것은 "요청한 소스입니다 (X/Location % of % File % is % % Found"). – user1157751

+0

지금 예외가 있습니까? 이 경우 stackTrace를 여기에 붙여주십시오. – NINCOMPOOP

+0

아니요, 예외는 없지만 콘솔에서는 경고가 표시됩니다. 경고 : [SetPropertiesRule] {서버/서비스/엔진/호스트/컨텍스트} 'source'속성을 'org.eclipse.jst.jee.server : MyTubeServer'로 설정하면 일치하는 속성을 찾지 못했습니다. – user1157751

관련 문제