<%@ 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>
<%@ 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>
<%@ 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>
<%@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>
<%@ 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>

<%@ 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>

<%@ 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>
scope객체.setAttribute("공유할 객체의 이름", 공유할 객체)
"공유할 객체의 이름" : 공유명
공유할 객체 : 자바에서 사용되는 모든 객체를 공유할 수 있음, 개발자마다 다른 객체를 공유할 수 있으므로 Object
=>공유된 객체 타입이 Object이므로 실제 공유된 객체의 타입으로 casting해야한다.
공유한 객체의 타입 변수 = (공유객체타입)scope객체.getAttribute("공유할 객체의 이름")
공유객체타입 : 공유될 때 타입이 java.lang.Object이므로 꺼낼 때 캐스팅해주어야 한다.
*데이터 공유하는 공유객체를 attribute라부름
[문법]
HttpServletResponse에 sendRedirect를 이용
response.sendRedirect("요청재지정될 web application path(context부터 정의)")
@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 오류

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

@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);//요청을 위에서 지정한걸로 이동시키는 작업
}
}
<%@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>
<!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>
@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);
}
}
<%@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>
<%@ 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>
@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);
}
}
<%@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>
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);
}
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;
}
}
@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);
}
}
<%@ 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>
<%@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)의 교육을 수강하고 작성되었습니다.