MVC

2022-11-15 서블릿 메소드 분리하기(delete), jsp문법

HTT 2022. 11. 15. 17:19
메소드 분리하기

 

 

③ 사원 정보 삭제하기(delete)

package kr.multicampus.erp.user;

@WebServlet(name = "empdelete",urlPatterns = {"/emp/delete.do"})
public class EmpDeleteServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		res.setContentType("text/html;charset=UTF-8");
		PrintWriter pw = res.getWriter();
		System.out.println("서블릿요청성공");
		//클라이언트의 요청정보 추출
		String id = req.getParameter("id");
		System.out.println(id);
		//비지니스 메소드호출
		empDAO dao = new empDAO();
		int result = dao.delete(id);
		res.sendRedirect("/serverweb/emp/list.do");
	}
	
}
public int delete(String id) { 
	String sql = "delete from myemp where id = ?";
	Connection con = null;
	PreparedStatement ptmt = null;
	int result = 0;
	try {
		con = DBUtil.getConnect();
		ptmt = con.prepareStatement(sql);
		ptmt.setString(1, id);
		result = ptmt.executeUpdate();
		System.out.println("result : "+result);
	}catch(SQLException e) {
		e.printStackTrace();
	}finally{
		DBUtil.close(null, ptmt, con);
	}
	return result;
}

=> promary key인 id의 정보를 받아 일치하는 사원의 정보를 삭제해준다.

 

 

 

요청재지정

 

- 클라이언트에서 요청한 Servlet의 응답 대신 다른 자원(servlet, jsp, html 등)의 수행 결과를 클라이언트에게 대신 응답하는 기능

- redirect 방법, forward 방법

- 클라이언트는 요청이 재지정된 사실을 알 수 없음

 

 

 

jsp문법

 

- jsp에서 작성하는 모든 태그나 자바코드는 서블릿으로 변환될 때 모두 _jspService메소드의 내부로 코드가 작성된다.
_jspService메소드안에 정의된 내장객체(지역변수)는 모두 사용할 수 있다. out.print가 그 예이다.

- 주석문

: 자바주석문은 클라이언트에 전송되지 않음

① <!--   -->

② <%   %>

③ /*  */, //

 

1. 스크립트요소 - 스크립트릿

<%
자바코드를 쓸 수 있는 곳
//자바주석문도 쓸 수 있음

반드시 명령문의 끝에 세미콜론 추가해야 한다.
서블릿에서 쓸 수 있는 코드를 모두 사용할 수 있다.
%>
여러 번 선언하여 사용할 수 있다.

<%
	System.out.print("str=>"+str); //자동완성기능 없음
	out.println("<h3>문자열의 길이 : "+str.length()+"</h3>");
	Random rand = null;  //컨트롤+쉬프트o로 자동 import할 수 없음.
	ArrayList<empDTO> list = null;
	if(str.length()>=5){ %>
		<h3>문자열의 길이는 정상입니다</h3>
<%	} else{ %>
		<h3>문자열의 길이 짧음</h3>
<% 	}	%>
<% String str2 = "java"; %>

=> 자바에서처럼 컨트롤+쉬프트_o로 자동 import할 수 없으나 컨트롤+스페이스로 자동완성하게 되면 자동으로 import됨

 

2. 스크립트요소 - 표현식(변수, 메소드호출결과, 연산식 등을 출력하기 위해서 사용)

서블릿으로 변환될 때 OUT.PRINT메소드의 매개변수로 전달됨 - ;추가하지 않음

<h4>표현식으로 작성하는 문자열:<%= str2%></h4>
<h4>표현식으로 작성하는 문자열:<%= str2.length()%></h4>
<h4>표현식으로 작성하는 문자열:<%= "str2"%></h4>
<h4>표현식으로 작성하는 문자열:<%= 10%></h4>
<h4>표현식으로 작성하는 문자열:<%= 10.0%></h4>
<h4>표현식으로 작성하는 문자열:<%= true%></h4>
<h4>표현식으로 작성하는 문자열:<%= new Date().toString() %></h4>

 

3. 스크립트요소 - 선언문(멤버변수나 멤버메소드를 정의하는 경우)

<%
int num = 1000;
%>
<%! int num = 10000000; %>
<%! public void test(){
		System.out.println("test");	
}
%>

 

- 웹 페이지에서 출력하는 방법

<body>
	<h2>안녕하세요!!!!!!!!!!!!!!</h2>
</body>
<% 
	out.println("<h2>안녕하세요^^~~~~~~~~~~</h2>");
%>
<%
	//스트릿클립 - 자바코드를 쓸 수 있는 스크립트요소
	String str = new String("안녕하시오");
%>
<h2><%=  str %></h2>

 

 

 

view 분리하기

 

- 전에 메소드 분리하기 페이지에서 작성했던 CalcServlet2.java의 내용을 CalcServlet2.jsp로 바꿔보기

- 클라이언트의 요청 정보 추출, 비지니스메소드 call, 응답메세지생성 모두 가져오기

- 연결주소 바꾸기 -> action="/serverweb/jspbasic/requestObjTest.jsp

<%@page import="basic.Calc"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>jsp의 내장객체 연습 - request</h1>
	<% 
	int num1 = Integer.parseInt(request.getParameter("num1"));
	String method = request.getParameter("method");
	int num2 = Integer.parseInt(request.getParameter("num2"));
	%>
	
	<%
	Calc obj = new Calc();
	int result = obj.clac(num1, num2, method);
	%>
	
	<h2>num1의 값<%=num1%>과 num2의 값 <%=num2%>의 연산결과:<%= result %></h2>
</body>
</html>

** 주의할 점

java파일에서는 req, rep으로 작업했지만 jsp파일에서는 꼭 풀네임으로 작성해야 함!!

 

 

< 사원 등록하기 서블릿파일 -> jsp >

<%@page import="kr.multicampus.erp.user.empDTO"%>
<%@page import="kr.multicampus.erp.user.empDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
	request.setCharacterEncoding("UTF-8");
	int deptno = Integer.parseInt(request.getParameter("deptno"));  //리퀘스트 안의 값을 꺼냄
	String name = request.getParameter("name");
	String id = request.getParameter("id");
	String pass = request.getParameter("pass");
	String addr = request.getParameter("addr");
	int grade = Integer.parseInt(request.getParameter("grade"));
	
	empDAO dao = new empDAO();
	empDTO emp = new empDTO(deptno, name, id, pass, addr, deptno, grade);
	int result = dao.insert(emp);
	
	String view = "";
	if(result > 0) {
		view = "/serverweb/jspbasic/insertOk.jsp";
	}else {
		view = "/serverweb/jspbasic/insertFail.jsp";		
	} 
	response.sendRedirect(view);
	
    //요청 재지정하기
    // response.sendRedirect("/serverweb/emp/list.do");
    
	%>
	
</body>
</html>

 

< 사원 전체 조회하기 서블릿파일 -> jsp >

 

================>

<%@page import="kr.multicampus.erp.user.empDTO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="kr.multicampus.erp.user.empDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
	empDAO dao = new empDAO();
	ArrayList<empDTO> allList = dao.select();
	int size = allList.size();
	%>
	<h1>회원목록보기</h1>
	<table width='600' border='1'>
	<tr>
	<th>부서코드</th><th>이름</th><th>아이디</th><th>패스워드</th>
	<th>주소</th><th>포인트</th><th>등급</th><th>삭제</th>
	</tr>
	<%
	for (int i = 0; i < size; i++) {
		empDTO user = allList.get(i);  %>
		</tr>
            <td><%= user.getDeptno() %></td>   <!-- 이 내용들이 out.print의 매개변수로 들어감 -->
            <td><%= user.getName() %></td>
            <td><%= user.getId() %></td>
            <td><%= user.getPass() %></td>
            <td><%= user.getAddr() %></td>
            <td><%= user.getPoint() %></td>
            <td><%= user.getGrade() %></td>
            <td><a href="/serverweb/emp/delete.do?test=info&id=<%= user.getId()%>">삭제</a></td>
		</tr>
	<% } %>
	
</body>
</html>

=> pw.print("<td>" + user.getDeptno()+"</td>");

pw.print()로 출력했던 내용을 html태그로 바꾸기