2022-11-15 서블릿 메소드 분리하기(delete), jsp문법
메소드 분리하기
③ 사원 정보 삭제하기(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태그로 바꾸기