728x90
반응형
SMALL
실무에서 자주 쓰이는 패턴 방식이며
다양한 요청들을 하나의 서블릿으로 받아서 처리하는 패턴으로 개발 및 유지보수 효율성에 좋다.
서블릿 생성시 URL 형식에 .do 을 추가해줌으로서 페이지 이동시 URL에 기존 서블릿 이름이 아닌 .do형식이 표현됨으로서 보안상의 이점이 존재한다.
01_upload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="upload.do" method="post" enctype="multipart/form-data">
글쓴이: <input type="text" name="name"><br>
제 목: <input type="text" name="title"><br>
파일 지정하기: <input type="file" name="uploadFile"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
UploadServlet.java
package com.yoon.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
/**
* Servlet implementation class UploadServlet
*/
@WebServlet("/upload.do")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UploadServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out=response.getWriter();
//여기를 바꿔주면 다운받는 경로가 바뀜
String savePath="upload";
//파일 최대 업로드 용량
int uploadFileSizeLimit=5*1024*1024;
String encType="UTF-8";
//서버상의 실제경로를 가져온다.
ServletContext context=getServletContext();
String uploadFilePath=context.getRealPath(savePath);
System.out.println("서버상의 실제 디렉토리 위치 : ");
System.out.println(uploadFilePath);
try {
//request객체, 서버상의 실제 디렉토리, 최대 업로드 파일 크기, 인코딩 방법, 동일한 이름 존재시 새로운 이름부여
MultipartRequest multi=new MultipartRequest(request,uploadFilePath,uploadFileSizeLimit,encType,new DefaultFileRenamePolicy());
String fileName=multi.getFilesystemName("uploadFile");
if(fileName==null) {//파일이 업로드 되지 않았을때
System.out.println("파일이 업로드되지 않음");
}else {//파일이 업로드 되었을때
out.println("<br> 글쓴이: "+multi.getParameter("name"));
out.println("<br> 제 목 "+multi.getParameter("title"));
out.println("<br> 파일명 : "+fileName);
}
} catch (Exception e) {
e.printStackTrace();
}//catch
}
}
단 .do 형식은 서버의 web.xml상에서 주소 매핑을 해줘야 한다.
web.xml 을 열어서 servlet-mapping 을 검색하여 선언 부분을 찾은뒤
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- The mappings for the JSP servlet -->
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.yoon.controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/upload.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>기존클래스 이름</servlet-name>
<servlet-class>해당 클래스의 패키지경로</servlet-name>
</servlet>
<servlet-mapping>
<servlet-mapping>
<servlet-name>기존 클래스 이름</serlvet-name>
<url-pattern>url매핑한 이름</url-pattern>
</servlet-mapping>
결과
JSP에서 서블릿으로 전송을 하면 기존클래스 이름은 UploadServlet 이 아닌 url로 매핑된 이름으로 노출된다.
728x90
반응형
LIST
'SPRING > Servlet || JSP' 카테고리의 다른 글
9.(JSP)오라클 DBCP 설정 (0) | 2021.03.06 |
---|---|
8.(JSP)한글.jpg 한글이름으로 된 이미지 출력하기 (0) | 2021.03.06 |
6.(JSP) Forwarding(포워딩) (0) | 2021.03.04 |
5.(JSP) MVC 패턴(model1,model2) (0) | 2021.03.04 |
4.JSP/서블릿 RequestDispatcher // response.sendRedirect() 데이터 갱신문제 (0) | 2021.02.25 |