JSP

brave_chicken·2024년 4월 21일

잇(IT)생 챌린지

목록 보기
32/90

JSP 테스트

hello1.jsp

<%@ 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>
		<style type="text/css">
			h2{
				color: navy;
			}
		</style>
		<script type="text/javascript">
			alert("환영합니다");		
		</script>
	</head>
	<body>
		<img alt="" src="/serverweb/images/c1.jpg" width="300"/>
		<h2>가입을 환영합니다</h2>
	</body>
</html>
  • html파일의 태그 사용 가능
  • 상단에 page설정?이 있음
  • js, css 설정 가능

hello2.jsp

<%@ 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>
		<%
			//자바코드를 쓸 수 있는 영역
			out.print("<img alt='' src='/serverweb/images/c1.jpg' width='300'/>");
			out.print("<h2>가입을 환영합니다</h2>");
			out.println();//얘는 ln쓰나안쓰나 똑같은듯
		%>
	</body>
</html>
  • 중간에 자바코드를 삽입할 수 있게 영역 표시 가능
  • jsp문서에서 작성하는 모든 태그나 자바코드는 서블릿으로 변환되면서 _jspService메소드 내부 코드로 작성된다.
  • _jspService메소드 내부에서 작업하는 것과 동일하게 인식
  • 서버가 자동으로 만들어줘서 내장객체

hello3.jsp

<%@ 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>
		<% String str = "가입을 환영합니다. ^^";%>
		<img alt="" src="/serverweb/images/c1.jpg" width="300"/>
		<h2><%= str %></h2>
	</body>
</html>

scriptTest/ JSP문법 - 스크립트요소

<%@page import="member.MemberDTO"%>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>scriptTest</title>
	</head>
	<body>
		<h1>jsp문법 - 스크립트 요소</h1>
		<h3>1. 주석문</h3>
		<!-- html주석문(클라이언트에 전송) : 중요한 내용을 적으면 안됨. 코드벗길때 다 나옴-->
		<%-- jsp주석문(jsp요소에 주석을 처리하는 용도 - 클라이언트에 전송되지 않는다.) --%>
		<%
			//자바주석
			/* 자바주석(클라이언트에 전송되지 않는다.) */
		%>
		
		<h3>2. scriptlet(수행문) : 사용 지양하기. 어쩔수없는 경우에만 사용</h3>
		<%
			/* 
				스크립트릿은 자바코드를 쓸 수 있는 영역
				반드시 명령문인 경우에는 문장의 끝에 ;을 추가
				자바나 서블릿에서 쓸 수 있는 모든 코드를 사용할 수 있다.
				단, jsp는 만들어진 목적이 서블릿에 뷰를 분리하기 위해 만들어졌으므로 JSP에서는 자바코드를 지양
				jsp에서는 서블릿에서 공유한 데이터를 꺼내서 출력하는 일만 담당
				=> EL JSTL(자바코드를 쓰지 않기 위해 만들어진 기술)
			*/
			String str = new String("java");
		%>
		<h3>스크립트릿은 자바코드를 쓸 수 있고 jsp문서 내에서 여러번 사용이 가능</h3>
		<hr/>
		<%if(str.length()>=4){ %>
			<h2>정상수행 - html을 if블럭 안에 추가할 수 있다.</h2>
			<%}else{ %>
			<h2>if조건이 만족하지 않는 경우</h2>
			<%} %>
			
		<h3>3. 표현식(변수, 메소드 호출결과(리턴값이 있는 메소드를 호출), 문자열, 연산식등을 출력하기 위해 사용)</h3>
		<h4>서블릿으로 변환될 때 표현식으로 정의한 것들은 out.print메소드의 매개변수로 전달되므로 ;을 추가하지 않는다.</h4>
		<h4>표현식으로 자겅하는 값:<%=str %></h4>
		<h4>표현식으로 자겅하는 값:<%=str.length() %></h4>
		<h4>표현식으로 자겅하는 값:<%="str" %></h4>
		<h4>표현식으로 자겅하는 값:<%=10 %></h4>
		<h4>표현식으로 자겅하는 값:<%=10.5 %></h4>
		<h4>표현식으로 자겅하는 값:<%='A' %></h4>
		<h4>표현식으로 자겅하는 값:<%=true %></h4>
		<h4>표현식으로 자겅하는 값:<%=10/3 %></h4>
		<h4>표현식으로 자겅하는 값:<%=new Date().toString() %></h4>
		<% MemberDTO user = new MemberDTO(); %>
		<!-- 자동완성으로 만들면 상단에 자동으로 import됨 -->
		
		<h3>4. 선언문 - 변환된 서블릿의 멤버변수와 메소드를 선언한다. => <%! %></h3>
		<% 
			int num = 100;//_jspService메소드의 지역변수로 정의
		%>
		<%! int num = 100000; //변환된 서블릿클래스의 멤버변수로 정의%>
		<%! public void test(){
				System.out.print("test");	
			}
		%>
		
	</body>
</html>
 

지역변수, 멤버변수

실습 forTest

<%@ 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>fortest</h1>
		<hr>
		<table border="1">
			<%
				for(int i=1;i<=10;i++){
			%>
			<tr>
				<td><h3><%= i %></h3></td>
			</tr>
			<%	}
			%>
		</table>
	</body>
</html>

jsp_exam

<%@ 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>
		<style type="text/css">
			table{
				width:600px;
				height: 500px;
			}
		</style>
	</head>
	<body>
		<table border="1">
			<% for(int dan=1;dan<=9;dan++) { %>
				<tr>
				<% for(int i=1;i<=9;i++) { %>
					<% if(dan==i){ %>
						<td><img alt="" src="/serverweb/images/c1.jpg" width="50"/></td>
					<%}else{ %>
						<td><%= dan+"*"+i+"="+(dan*i)%></td>
					<%} %>
				<%} %>
				<tr>
			<% } %>
		</table>
	</body>
</html>

12장 내장객체

jsp내장객체테스트 (requset, response객체)

<%@ 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>
		<form method="post" action="/serverweb/jspbasic/requestObjTest.jsp">
			아이디 : <input type="text" name="id"/><br/>
			패스워드 : <input type="text" name="pass"/><br/>
			<input type="submit" name="로그인"/>
		</form>
	</body>
</html>
<%@page import="member.MemberDTO"%>
<%@page import="member.MemberDAOImpl"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>jsp내장객체테스트(requset, response객체)</title>
	</head>
	<body>
		<%
			String id =request.getParameter("id");
			String pass =request.getParameter("pass");
			MemberDAOImpl dao = new MemberDAOImpl();
			MemberDTO user = dao.login(id, pass);
		%>
		<h2>아이디:<%= id %></h2>
		<h2>패스워드:<%= pass %></h2>
		<%if(user!=null){ %>
		<h2><%=user.getName() %>님 로그인 성공!</h2>
		<%}else {
			response.sendRedirect("/serverweb/jspbasic/login.jsp");
		  } %>
	</body>
</html>

6. 요청재지정(화면이동) 217p

  • 매우중요, 이걸 알아야 mvc패턴을 적용할수있음
  • 클라이언트가 최초 요청한 서블릿이 응답하지 않고(혹은 응답하더라도) 다른 web application(html,jsp,서블릿)이 응답되도록 서블릿 내부에서 재요청 하는 것을 의미
  • 서블릿에서 뷰를 분리하기 위해서 반드시 알아야하는 개념
  • MVC패턴을 적용하기 위해서 반드시 알아야하는 개념

1) 요청재지정 방법

  • response 객체의 sendRedirect를 이용하는 방법
  • RequestDispatcher가 제공하는 forward : Servlet에서 주로 사용
  • RequestDispatcher가 제공하는 include : jsp에서 주로 사용

2) 데이터공유

  • 데이터를 서블릿에서 공유하고 분리된 뷰(응답화면)에서 꺼내서 써야하는데 html파일은 자바코드를 사용할 수 없다.
  • 자바코드도 쓰고 html태그도 쓸수있는 jsp를 이용
  • 데이터의 공유는 어디에 공유할 수 있는지 scope가 있다.(page,request,session,application이 있다)
  • 각각의 scope에 해당하는 객체가 존재하며 이 객체 내부에는 데이터를 공유할 수 있도록 공유메소드를 갖고 있다.
  • request scope객체(ServletRequest)
  • session scope객체(HttpSession)

(1) 데이터 공유하기

scope객체.setAttribute("공유할 객체의 이름", 공유할 객체)
"공유할 객체의 이름" : 공유명
공유할 객체 : 자바에서 사용되는 모든 객체를 공유할 수 있음, 개발자마다 다른 객체를 공유할 수 있으므로 Object

(2) 공유된 객체 꺼내기

=>공유된 객체 타입이 Object이므로 실제 공유된 객체의 타입으로 casting해야한다.
공유한 객체의 타입 변수 = (공유객체타입)scope객체.getAttribute("공유할 객체의 이름")
공유객체타입 : 공유될 때 타입이 java.lang.Object이므로 꺼낼 때 캐스팅해주어야 한다.

*데이터 공유하는 공유객체를 attribute라부름

7. sendRedirect

[문법]
HttpServletResponse에 sendRedirect를 이용
response.sendRedirect("요청재지정될 web application path(context부터 정의)")

  • 최초요청됐던 서블릿이 response하고 다시 재요청해서 실행하는 방법이므로 데이터를 공유할수없다
  • 로그인아이디나 패스워드를 잘못입력한 경우 로그인 페이지를 다시 보여주기 위한 방법
  • 스프링mvc는 기본이 forward
  • 두번의 요청이 처리되므로 요청재지정한 application(두번째요청된 application)의 path로 주소표시줄이 바뀐다

sendRedirectTestServlet

@WebServlet(name = "send", urlPatterns = {"/send"})
public class sendRedirectTestServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		System.out.println("sendRedirect연습 - sendRedirectTestServlet");
		out.print("<h1>요청재지정연습 -sendRedirect</h1>");
		
		//데이터공유하기
		MemberDTO dto = new MemberDTO("bts1", "1234", "슈가", "대구", "래퍼");
		
		//공유하고싶은 scope객체의 메소드를 호출
		request.setAttribute("mydata", dto);
		
		//요청재지정
		response.sendRedirect("/serverweb/jspbasic/result.jsp");
	}

}
<%@page import="member.MemberDTO"%>
<%@ 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>
		<h2>요청재지정으로 시행되는 jsp -서블릿이 공유해준 데이터를 꺼내서 웹페이지 출력하기</h2>
		<%
			MemberDTO data = (MemberDTO)request.getAttribute("mydata");
		%>
		<h2><%=data.getId() %>님 환영합니다!!</h2>
	</body>
</html>

=> 데이터 공유에서 첫번째요청, 요청재지정에서 새로운 두번째요청
=> 첫번째 요청에 설정해둔 데이터기때문에 두번째 요청에서는 이미 사라져있음(19분 40초) 500번 에러, null
=> 그러면 sendRedirect는 언제쓰냐? 로그인페이지등에 오류뜰때 여전히 오류페이지를 보여주어야할때~
sendRedirect 오류

8. forward

[문법]
RequestDispatcher rd = request.getRequestDspatcher("요청재지정할 web application path")
요청재지정할 web application path: response하지않고 한번의 요청으로 서블릿과 jsp가 실행되므로 path는 context명은 빼고 정의하기
rd.forward(request객체, response객체)

ForwardTestServlet

  • 가장 일반적으로 사용되는 방법
  • 최초 요청으로 서블릿,jsp가 실행되므로 데이터공유가 가능
  • 한번의 요청으로 모든 application이 실행되므로 주소표시줄이 첫번째 요청된 path로 남아있다

ForwardTestServlet

@WebServlet(name = "forward", urlPatterns = {"/forward"})
public class ForwardTestServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		System.out.println("Forward연습 - ForwardTestServlet");
		out.print("<h1>요청재지정연습 -Forward</h1>");
		
		//데이터공유하기
		MemberDTO dto = new MemberDTO("bts1", "1234", "슈가", "대구", "래퍼");
		
		//공유하고싶은 scope객체의 메소드를 호출
		request.setAttribute("mydata", dto);
		
		//요청재지정
		RequestDispatcher rd = request.getRequestDispatcher("/jspbasic/result.jsp");
		rd.forward(request, response);
	}

}
<%@page import="member.MemberDTO"%>
<%@ 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>
		<h2>요청재지정으로 시행되는 jsp -서블릿이 공유해준 데이터를 꺼내서 웹페이지 출력하기</h2>
		<%
			MemberDTO data = (MemberDTO)request.getAttribute("mydata");
		%>
		<h2><%=data.getId() %>님 환영합니다!!</h2>
	</body>
</html>

forward를 이용해서 insert결과 화면 분리하기

MemberInsertServlet

@WebServlet(name = "mvcinsert", urlPatterns = { "/member/mvc/insert" })
public class MemberInsertServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("mvc insert 서블릿 요청 성공");
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		System.out.println("--------------------------");
		//1.요청정보추출
		String id = request.getParameter("id");
		String pass = request.getParameter("pass");
		String name = request.getParameter("name");
		String addr = request.getParameter("addr");
		String info = request.getParameter("info");
		
		//2.비지니스메소드 호출
		MemberDTO user = new MemberDTO(id, pass, name, addr, info);
		MemberDAO member = new MemberDAOImpl();
		int result = member.insert(user);//result은 삽입된 행의 수
		
		//3.데이터공유하기
		request.setAttribute("insert_result", result);
		
		//4. 요청재지정 - insertResult.jsp
		RequestDispatcher rd = request.getRequestDispatcher("/member_mvc/insertResult.jsp");//셋팅
		rd.forward(request, response);//요청을 위에서 지정한걸로 이동시키는 작업
	}
}

insertResult로 분리

<%@page import="member.MemberDTO"%>
<%@ 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>
		<!-- 공유데이터 꺼내기 -->
		<% int result = (int)request.getAttribute("insert_result");%>
		<% if(result>=1){ %>
		<h2><%=result %>개 행 삽입성공!</h2>
		<% }else{ %><h2>삽입실패</h2><%} %>
		
	</body>
</html>

register.html / 로그인화면

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
 <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>
<body>
	<div class="container-fluid">
			<a href="/serverweb/member/list"><h1>회원목록보기</h1></a>
			<form role="form" class="form-horizontal"
				action="/serverweb/member/mvc/insert" method="POST" 
				name="myform">
				<fieldset>
					<div id="legend">
						<legend>아래 양식을 작성해주세요.</legend>
					</div>
					<div class="form-group">
						<!-- 부서코드 -->
						<label class="control-label col-sm-2" for="orgcode">아이디</label>
						<div class="col-sm-3">
							<input type="text" id="id" name="id"
								placeholder="아이디" class="form-control"
								 required>
						</div>
					</div>
					<div class="form-group">
						<!-- 패스워드-->
						<label class="control-label col-sm-2" for="pass">패스워드</label>
						<div class="col-sm-3">
							<input type="text" id="pass" name="pass"
								placeholder="패스워드" class="form-control" minlength="4" >

						</div>
					</div>
					
					
					<div class="form-group">
						<!-- 성명-->
						<label class="control-label col-sm-2" for="orgname">성명</label>
						<div class="col-sm-3">
							<input type="text" id="orgname" name="name"
								placeholder="성명" class="form-control" minlength="3" required>

						</div>
					</div>
				
					<div class="form-group">
						<!-- 주소-->
						<label class="control-label col-sm-2" for="addr">주소</label>
						<div class="col-sm-3">
							<input type="text" id="addr" name="addr" 
							placeholder="주소"
								class="form-control" minlength="4" required>

						</div>
					</div>
					<div class="form-group">
						<!-- 포인트-->
						<label class="control-label col-sm-2" for="info">기타사항</label>
						<div class="col-sm-3">
							<input type="text" id="point" name="info" 
							placeholder="기타사항"
								class="form-control" minlength="4" required>

						</div>
					</div>
					
					<div class="form-group">
						<!-- Button -->
						<div class="col-sm-3 col-sm-offset-2">
							<input type="submit" value="가입하기" class="btn btn-success"/>
						</div>
					</div>
				</fieldset>
			</form>
	</div>
</body>
</html>

member.mvc 로그인서블릿 만들기

LoginServlet

@WebServlet(name = "login", urlPatterns = { "/member/mvc/login" })
public class LoginServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.요청정보추출
		String id = request.getParameter("id");
		String pass = request.getParameter("pass");
		
		//2.비지니스 메소드 호출
		MemberDAO dao = new MemberDAOImpl();
		MemberDTO user = dao.login(id, pass);
		System.out.println(user);
		
		//3. 데이터 공유
		request.setAttribute("loginUser", user);
		
		//4. 요청재지정(응답페이지로 이동)
		RequestDispatcher rd = request.getRequestDispatcher("/member_mvc/loginResult.jsp");
		rd.forward(request, response);
	}
}

loginResult.jsp

<%@page import="member.MemberDTO"%>
<%@ 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>
		<% //공유된 데이터 꺼내기
			MemberDTO user = (MemberDTO)request.getAttribute("loginUser");
			if(user!=null){%>
				<h2><%= user.getName() %>(<%=user.getId() %>)님 로그인 성공!</h2>
			<%}else{
				response.sendRedirect("/serverweb/member_mvc/login.jsp");
			}
			%>
	</body>
</html>

login.jsp

<%@ 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>
		<form method="post" action="/serverweb//member/mvc/login">
			아이디 : <input type="text" name="id"/><br/>
			패스워드 : <input type="text" name="pass"/><br/>
			<input type="submit" name="로그인"/>
		</form>
	</body>
</html>

전체 목록을 출력

MemberListServlet

@WebServlet(name = "mvclist", urlPatterns = { "/member/mvc/list" })
public class MemberListServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("서블릿 요청 성공");
		req.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html;charset=UTF-8");
		PrintWriter out =resp.getWriter();
		
		MemberDAO dao = new MemberDAOImpl();
		List<MemberDTO> userlist = dao.select();
		
		req.setAttribute("userlist", userlist);
		
		RequestDispatcher rd = req.getRequestDispatcher("/member_mvc/list.jsp");
		rd.forward(req, resp);
	}
}

list.jsp

<%@page import="java.util.List"%>
<%@page import="member.MemberDTO"%>
<%@ 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>
		<%List<MemberDTO> userlist = (List<MemberDTO>)request.getAttribute("userlist"); %>
		<h1>회원목록(jsp ver)</h1>
		<hr>
		<table border='1' width='600'>
		<tr bgcolor='pink'>
		<th>아이디</th><th>패스워드</th><th>성명</th><th>주소</th><th>가입날짜</th><th>포인트</th><th>정보</th><th>삭제</th>
		</tr>
		<%for(MemberDTO user:userlist) { %>
		<tr>
		<td><a href="/serverweb/member/detail?id=<%=user.getId()%>"><%=user.getId()%></td>
		<td><%=user.getPass()%></td>
		<td><%=user.getName()%></td>
		<td><%=user.getAddr()%></td>
		<td><%=user.getRegDate()%></td>
		<td><%=user.getPoint()%></td>
		<td><%=user.getInfo()%></td>
		<td><a href="/serverweb/member/delete?id=<%=user.getId()%>">삭제</td>
		</tr>
		<%} %>
		</table>
	</body>
</html>

주소로 검색하기

MemberDAO

public interface MemberDAO {
	void insert(String id,String pass,String name,String addr,String info) ;
	int insert(MemberDTO user) ;
	
	void update(String info,String addr,String id);
	void update(MemberDTO updateUser);
	
	int delete(String id) ;
	List<MemberDTO> select();
	MemberDTO login(String id,String pass) ;
	List<MemberDTO> search(String column,String value);
	MemberDTO findById(String id) ;
	
	List<MemberDTO> findByAddr(String addr);
}

MemberDAOImpl

public class MemberDAOImpl implements MemberDAO{
@Override
	public List<MemberDTO> findByAddr(String addr){
		Connection con = null;
		PreparedStatement ptmt =null;
		ResultSet rs = null;
		List<MemberDTO> addrlist = new ArrayList<>();
		MemberDTO user = null;
		String sql = "select * from member where addr like ?";
		
		try {
			con = DBUtil.getConnect();
			ptmt =  con.prepareStatement(sql);
			ptmt.setString(1, "%"+addr+"%");
			rs = ptmt.executeQuery();
			while(rs.next()) {
				user = new MemberDTO(rs.getString("id"), rs.getString("pass"),
						rs.getString("name"), rs.getString(4), rs.getDate(5),
						rs.getInt("point"),	rs.getString(7));
				addrlist.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			DBUtil.close(rs, ptmt, con);
		}
		return addrlist;
	}
}

MemberSearchServlet

@WebServlet(name = "search", urlPatterns = { "/member/mvc/search" })
public class MemberSearchServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String addr = request.getParameter("search");
		
		MemberDAO dao = new MemberDAOImpl();
		List<MemberDTO> userlist = dao.findByAddr(addr);
		
		request.setAttribute("userlist", userlist);
		
		RequestDispatcher rd = request.getRequestDispatcher("/member_mvc/searchlist.jsp");
		rd.forward(request, response);
	}
}

search.jsp

<%@ 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>
	<div class="container-fluid">
		<div class="row">
			<div class="col-lg-10">
				<h1>주소로검색하기</h1>
				<hr/>
				<form method="post" action="/serverweb/member/mvc/search">
					검색어:<input type="text" name="search">
					<input type="submit" value="검색">
				</form>
			</div>
		</div>
	</div>
</body>
</html>

searchlist.jsp

<%@page import="member.MemberDTO"%>
<%@page import="java.util.List"%>
<%@ 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>
		<%
		List<MemberDTO> userlist = (List<MemberDTO>)request.getAttribute("userlist");
		%>
		<h1>회원목록</h1>
		<hr>
		<table border='1' width='600'>
			<tr bgcolor='lime'>
				<th>아이디</th><th>패스워드</th><th>성명</th><th>주소</th><th>가입날짜</th><th>포인트</th><th>정보</th>
			</tr>
		<%for(MemberDTO user:userlist) { %>
			<tr>
				<td><%=user.getId()%></td>
				<td><%=user.getPass()%></td>
				<td><%=user.getName()%></td>
				<td><%=user.getAddr()%></td>
				<td><%=user.getRegDate()%></td>
				<td><%=user.getPoint()%></td>
				<td><%=user.getInfo()%></td>
			</tr>
		<% } %>
		</table>
	</body>
</html>

기타질문

  • get/post 구분방법
    get : 하이퍼링크 클릭, 서버가져올때
    post : 서버데이터 변경할때, 데이터 노출시키면 안되는거(post는 주소표시줄에 표시되지 않음)
    ex. insert,update,login

  • 서블릿에서 화면을만들어내지않기때문에 문자셋설정안해도딤

  • jsp에서 jsp호출할때 path다써줘야됨

  • 서블릿에서 jsp를 연결할때 sendRedirect(전체경로),
    forward/include(이미들어와있는상태라서 context빼고 나머지경로)

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

0개의 댓글