리뷰 등록페이지 A (고객명,제목,textarea,radio로 점수,첨부파일 / insert) =>product_insert.jsp
파일첨부는 필수 아님
B part:
리뷰 출력 리스트 페이지 B (sql select 활용)
삭제버튼 클릭시 데이터 삭제
단,첨부파일 있을 경우 첨부파일명 출력
=> review_list.jsp
⚡ DB table 생성
create table review( ridx int(8) not null auto_increment, rname varchar(100) not null, rsubject varchar(200) not null, rtext text not null, rscore int(1) not null default '1', rfile text null, rdate timestamp not null default current_timestamp, primary key(ridx) );
- review_insertok.jsp : 실제 jsp는 아님.. (servlet임) => web.xml에서 servlet 파일을 do가 아닌 .jsp로 세팅, 실제 jsp명과 겹치면 x name value값을 가져와서 r_ok.jsp로 보내고 r_ok.jsp에서 insert 해줄거임
setAttribute : jsp(view part)로 값 전달시 사용 getAttribute : java에서 jsp로 값을 가져올때만 사용 => 배열로 전달해서 받는게 좋다
@MultipartConfig(
fileSizeThreshold = 1024*1024*2,
maxFileSize = 1024*1024*4,
maxRequestSize = 1024*1024*10
)
public class review_insertok extends HttpServlet {
private static final long serialVersionUID = 1L;
private InputStream is = null;
private FileOutputStream fs = null;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=uft-8");
String rname = request.getParameter("rname");
String rsubject = request.getParameter("rsubject");
String rtext = request.getParameter("rtext");
String rscore = request.getParameter("rscore");
Part rfile = request.getPart("rfile");
//웹 디렉토리 저장 경로
String url = request.getServletContext().getRealPath("/upload/");
String filename = rfile.getSubmittedFileName();
String result = ""; //첨부파일이 없으면 걍 ""
if(!filename.equals("")) { //첨부파일이 있을때
this.is = rfile.getInputStream();
//이름변경
rename rn = new rename(filename);
result = rn.filenm; //변경된 이름을 변수로받음
this.fs = new FileOutputStream(url+result);
byte[] bg = new byte[1024*2];
int size = 0;
//1도트가 깨질 수도 있음
do {
this.fs.write(bg,0,size); //실제 저장
}while((size=this.is.read(bg)) != -1);
//첨부파일이 있을경우엔 경로를 붙여줘야해서 if안에 작성
request.setAttribute("rfile", "http://172.30.1.83:8080/upload/"+result);
}else {
request.setAttribute("rfile", result);
}
//setAttribute : r_ok.jsp(view part)로 값 전달 위해 => 배열로 하는게 좋다
request.setAttribute("rname", rname);
request.setAttribute("rsubject", rsubject);
request.setAttribute("rtext", rtext);
request.setAttribute("rscore", rscore);
RequestDispatcher rd = request.getRequestDispatcher("./r_ok.jsp");
rd.forward(request, response);
this.fs.close();
this.is.close();
}
}
- rename.java : 이름을 재구성하여 결과값을 리턴하는 module
public class rename {
String filenm = "";
public rename(String z) {
this.filenm = z;
this.re();
}
private void re() {
Date today = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
String day = sf.format(today);
String rnd = String.valueOf((int)Math.ceil(Math.random()*1500)); //랜덤숫자
//실제 파일에서 속성명만 추출
int dot = this.filenm.lastIndexOf(".");
String property = this.filenm.substring(dot+1);
this.filenm = day+"_"+rnd+"."+property; //20240628_636.jpg 요런형태
}
}