본문 바로가기

IT&코딩/자바 프로젝트

자바 프로젝트 6일차 - Servlet (testServlet)

728x90
반응형

■ 소스파일

 

□ test package

 

* HelloServlet.java

 

package test;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import memo.MemoDAO;


public class HelloServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html; charset=UTF-8");
		PrintWriter pw = resp.getWriter();
		pw.println("Hello, Servlet!");
		pw.close();
	}
	
}

 

□ test package

 

* MemoDTO.java

 

package memo;

public class MemoDTO {
	
	private String id;
	private String email;
	private String memo;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getMemo() {
		return memo;
	}
	public void setMemo(String memo) {
		this.memo = memo;
	}
	
}

 

* MemoDAO.java

 

package memo;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class MemoDAO {
	
	Connection con;
	PreparedStatement ps;
	ResultSet rs;
	String url, user, pass;
	
	public MemoDAO() {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
		url = "jdbc:oracle:thin:@localhost:1521:xe";
		user = "web01";
		pass = "web01";
	}
	
	public int insertMemo(MemoDTO dto) {
		try {
			con = DriverManager.getConnection(url, user, pass);
			String sql = "insert into memo values(?, ?, ?)";
			ps = con.prepareStatement(sql);
			ps.setString(1, dto.getId());
			ps.setString(2, dto.getEmail());
			ps.setString(3, dto.getMemo());
			
			int res = ps.executeUpdate();
			return res;
		} catch(SQLException e){
			System.out.println("insert 메소드 실행 중 오류 발생!");
			e.printStackTrace();
		}finally {
			
			try {
				if (ps != null) ps.close();
				if (con != null) con.close();
			} catch(SQLException e) {}
		}
		return 0;
	}
	
	public List<MemoDTO> listMemo(){
		try {
			con = DriverManager.getConnection(url, user, pass);
			String sql = "select * from memo";
			ps = con.prepareStatement(sql);
			
			rs = ps.executeQuery();
			
			List<MemoDTO> list = new ArrayList<>();
			while(rs.next()){
				MemoDTO dto = new MemoDTO();
				dto.setId(rs.getString("id"));
				dto.setEmail(rs.getString("email"));
				dto.setMemo(rs.getString("memo"));
				list.add(dto);
			}
			return list;
		} catch(SQLException e) {
			System.out.println("list 메소드 실행 중 오류 발생!");
			e.printStackTrace();
		} finally {
			try {
				if (rs != null) rs.close();
				if (ps != null) ps.close();
				if (con != null) con.close();
			} catch(SQLException e) {}
		}
		return null;
	}
}

 

* MemoInsertServlet.java

 

package memo;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MemoInsertServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		req.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html; charset=UTF-8");
		
		MemoDTO dto = new MemoDTO();
		dto.setId(req.getParameter("id"));
		dto.setEmail(req.getParameter("email"));
		dto.setMemo(req.getParameter("memo"));
		
		MemoDAO dao = new MemoDAO();
		
		int res = dao.insertMemo(dto);
		
		PrintWriter pw = resp.getWriter();
		
		if(res > 0) {
			pw.println("<script type='text/javascript'>");
			pw.println("alert('메모 등록 성공! 메보 보기 페이지로 이동합니다.')");
			pw.println("location.href='memolist.do'");
			pw.println("</script>");
		} else {
			pw.println("<script type='text/javascript'>");
			pw.println("alert('메모 등록 실패! 메보 등록 페이지로 이동합니다.')");
			pw.println("location.href='memo.jsp'");
			pw.println("</script>");
		}
	}
	
	
	
}

 

* MemoListServlet.java

 

package memo;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MemoListServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		req.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html; charset=UTF-8");
		
		MemoDAO dao = new MemoDAO();
		List<MemoDTO> list = dao.listMemo();
		
		PrintWriter pw = resp.getWriter();
		
		pw.println("<html>");
		pw.println("<head><title>메모장</title></head>");
		pw.println("<body><div align='center'>");
		pw.println("<hr color='green' width='300'>");
		pw.println("<h2>메 모 장 보 기</h2>");  
		pw.println("<hr color='green' width='300'>");
		pw.println("<table border='1' width='500'>");
		pw.println("<tr bgcolor='yellow'>");
		pw.println("<th>아이디</th><th>이메일</th><th width='50%'>메모내용</th>");
		pw.println("</tr>");
		if (list == null || list.size() == 0) {
			pw.println("<tr><td colspan='3'>등록된 게시글이 없습니다.</td></tr>");
		}else {
			for(MemoDTO dto : list) {
				pw.println("<tr>");
				pw.println("<td>" + dto.getId() + "</td>");
				pw.println("<td>" + dto.getEmail() + "</td>");
				pw.println("<td>" + dto.getMemo() + "</td>");
				pw.println("</tr>");
			}
		}
		pw.println("</div></body></html>");
		
	}
	
	
}

 


 

■ view 관련 html, jsp

 

* memo.html

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
	<SCRIPT LANGUAGE="JavaScript">
		//폼에 입력된 내용이 아이디로 적당한지 여부...
		function isID(obj){
			var str=obj.value;
			//널체크
			if(str.length==0){//false, ""
				alert("아이디를 입력하세요");
				obj.focus();
				return false;
			}
			str=str.toUpperCase();
			//영문이 아닐 경우 체크
			for(var i=0;i<str.length;i++){
				if(!( ( 'A'<= str.charAt(i) &&str.charAt(i)<='Z'  )|| 
				('0' <=str.charAt(i)&&str.charAt(i)<='9') )){
					alert("아이디는 영문, 숫자만 사용 가능해요");
					obj.select();
					return false;
				}//if-----
			}//for----
			return true;
		}
		
		function isEmail(obj){
			var str = obj.value;
			if(str==""){
				alert("이메일 주소를 입력해 주세요");
				obj.focus();
				return false;
			}//if-------
			var i=str.indexOf("@");
			//골뱅이 찾아 없으면 -1을 반환, 있으면 해당 인덱스를 반환
			if(i<0){ 
				alert("이메일 형식에 맞지 않아요");
				obj.select();
				return false;
			}//if-------
			i=str.indexOf(".");
			if(i<0){
				alert("이메일 형식에 맞지 않아요");
				obj.select();
				return false;
			}//if---------
			return true;
		}//isEmail()---------------
		
		
		function check(){
			if(!isID(f.id)){			
				return;
			}
			if(!isEmail(f.email)){
				return;
			}
			document.f.submit();
		}
	</SCRIPT>
 </HEAD>

 <BODY onLoad="document.f.id.focus();">
<div style="margin-top:70px;"></div>

 <form name="f" action="memo.do" method="POST" >
 <div align="center">
		<table width="600" border="0" cellpadding="7">
			<tr align="center" bgcolor="#DEFEFD" height="50">
				<td colspan="2" >
					<font size="4" color="#0033CC" face="굴림체"><b>
					♠메모 남기기♠
					</b></font>
				</td>
			</tr>
			<tr>
				<td width="25%" align="center"><b>아이디</b></td>
				<td>
					<input type="text" size="40" name="id"  maxlength="10">
				</td>
			</tr>
			<tr>
				<td width="25%" align="center"><b>이메일</b>
				</td>
				<td>
					<input type="text" size="40" name="email">
				</td>
			</tr>
			<tr>
				<td width="25%" align="center"><b>메모</b>
				</td>
				<td>
					<textarea name="memo" cols="50"></textarea>
				</td>
			</tr>
			<tr  bgcolor="#DEFEFD">
				<td colspan="2" align="center">
					<input type="button" value="전송" onclick="check();">&nbsp;&nbsp;&nbsp;
					<input type="reset" value="취소">
				</td>
			</tr>
		</table>
</div>
 </form>
 </BODY>
</HTML>

<!-- 
	create table memo
	(id varchar2(20),
	email varchar2(100),
	memo varchar2(4000));
 -->

 

* memo.jsp (memo.html과 동일)

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
	<SCRIPT LANGUAGE="JavaScript">
		//폼에 입력된 내용이 아이디로 적당한지 여부...
		function isID(obj){
			var str=obj.value;
			//널체크
			if(str.length==0){//false, ""
				alert("아이디를 입력하세요");
				obj.focus();
				return false;
			}
			str=str.toUpperCase();
			//영문이 아닐 경우 체크
			for(var i=0;i<str.length;i++){
				if(!( ( 'A'<= str.charAt(i) &&str.charAt(i)<='Z'  )|| 
				('0' <=str.charAt(i)&&str.charAt(i)<='9') )){
					alert("아이디는 영문, 숫자만 사용 가능해요");
					obj.select();
					return false;
				}//if-----
			}//for----
			return true;
		}
		
		function isEmail(obj){
			var str = obj.value;
			if(str==""){
				alert("이메일 주소를 입력해 주세요");
				obj.focus();
				return false;
			}//if-------
			var i=str.indexOf("@");
			//골뱅이 찾아 없으면 -1을 반환, 있으면 해당 인덱스를 반환
			if(i<0){ 
				alert("이메일 형식에 맞지 않아요");
				obj.select();
				return false;
			}//if-------
			i=str.indexOf(".");
			if(i<0){
				alert("이메일 형식에 맞지 않아요");
				obj.select();
				return false;
			}//if---------
			return true;
		}//isEmail()---------------
		
		
		function check(){
			if(!isID(f.id)){			
				return;
			}
			if(!isEmail(f.email)){
				return;
			}
			document.f.submit();
		}
	</SCRIPT>
 </HEAD>

 <BODY onLoad="document.f.id.focus();">
<div style="margin-top:70px;"></div>

 <form name="f" action="memo.do" method="POST" >
 <div align="center">
		<table width="600" border="0" cellpadding="7">
			<tr align="center" bgcolor="#DEFEFD" height="50">
				<td colspan="2" >
					<font size="4" color="#0033CC" face="굴림체"><b>
					♠메모 남기기♠
					</b></font>
				</td>
			</tr>
			<tr>
				<td width="25%" align="center"><b>아이디</b></td>
				<td>
					<input type="text" size="40" name="id"  maxlength="10">
				</td>
			</tr>
			<tr>
				<td width="25%" align="center"><b>이메일</b>
				</td>
				<td>
					<input type="text" size="40" name="email">
				</td>
			</tr>
			<tr>
				<td width="25%" align="center"><b>메모</b>
				</td>
				<td>
					<textarea name="memo" cols="50"></textarea>
				</td>
			</tr>
			<tr  bgcolor="#DEFEFD">
				<td colspan="2" align="center">
					<input type="button" value="전송" onclick="check();">&nbsp;&nbsp;&nbsp;
					<input type="reset" value="취소">
				</td>
			</tr>
		</table>
</div>
 </form>
 </BODY>
</HTML>

 

* web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
	<servlet-name>hello</servlet-name>
	<servlet-class>test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>hello</servlet-name>
	<url-pattern>/hello.do</url-pattern>
</servlet-mapping>

<servlet>
	<servlet-name>memoInsert</servlet-name>
	<servlet-class>memo.MemoInsertServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>memoInsert</servlet-name>
	<url-pattern>/memo.do</url-pattern>
</servlet-mapping>

<servlet>
	<servlet-name>memolist</servlet-name>
	<servlet-class>memo.MemoListServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>memolist</servlet-name>
	<url-pattern>/memolist.do</url-pattern>
</servlet-mapping>

</web-app>
728x90
반응형