#0424

조성현·2023년 4월 24일
0



Java 웹 프로그램을 할 수 있는 방법

: java se가 아닌 java ee 환경(jdbc도 java ee 환경)
1. Servlet : class 사용
2. jsp : html과 유사하게 사용

웹 프로그램 실행환경

jsp

: 확장자 .jsp
: 4가지의 특수기호를 사용

  • <%@ : directive (jsp 페이지에 대한 설정)
    page : langauage, contentType, pageEncoding
    import를 통해 include / taglib directive 추가 가능
  • <% : script (java 소스 : 지역변수, 제어문)
  • <%= : expression (출력 / out.println 대신 사용)
  • <%! : declaration (멤버필드, 메서드 선언)

jsp를 통해 달력 만들기(js + java)

달력 소스

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar" %>
<%
	request.setCharacterEncoding("utf-8");
	String strYear = request.getParameter("year");
	String strMonth = request.getParameter("month");
	
	// 설정 날짜
	int year = Integer.parseInt(strYear);
	int month = Integer.parseInt(strMonth);

	Calendar sDay = Calendar.getInstance();
	Calendar eDay = Calendar.getInstance();
     
	sDay.set( year, month-1, 1 );
	eDay.set( year, month, 1-1 );
     
	int startDayOfWeek = sDay.get( Calendar.DAY_OF_WEEK );
	int endDyaOfWeek = eDay.get( Calendar.DAY_OF_WEEK );
	int endDay = eDay.get( Calendar.DATE );
    
	StringBuilder sbHtml = new StringBuilder();
	
	sbHtml.append( "<table width='800' border='1'>" );
	sbHtml.append( "<tr>" );
	sbHtml.append( "<td colspan='7'>" + year + "년" + month + "월</td>" );
	sbHtml.append( "</tr>" );
	sbHtml.append( "<tr>" );
	sbHtml.append( "<td>SU</td><td>MO</td><td>TU</td><td>WE</td><td>TH</td><td>FR</td><td>SA</td>" );
	sbHtml.append( "</tr>" );
     
	sbHtml.append( "<tr>" );
	for( int i=1 ; i<startDayOfWeek ; i++ ) {
		sbHtml.append( "<td></td>" );
	}

	for( int i=1, n=startDayOfWeek ; i<=endDay ; i++, n++ ) {
		if( n % 7 == 1 ) sbHtml.append( "<tr>" ); 
		
		if( n % 7 == 1 ) {
			sbHtml.append( "<td bgcolor='red'>" + i + "</td>" );
		}else if( n % 7 == 0 ) {
			sbHtml.append( "<td bgcolor='skyblue'>" + i + "</td>" );
		}else{
			sbHtml.append( "<td>" + i + "</td>" );
		}
		
          
		if( n % 7 == 0 ) sbHtml.append( "</tr>" ); 
	}
     
	for( int i=endDyaOfWeek ; i<=6 ; i++ ) {
		sbHtml.append( "<td></td>" );
	}
	
	sbHtml.append( "</tr>" );
	sbHtml.append( "</table>" );
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= sbHtml.toString() %>
</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>
<script type="text/javascript">
	window.onload = function() {
		document.getElementById('btn').onclick = function() {
			//alert('버튼 클릭');
			if(document.frm.year.value.trim() == '') {
				alert('오류 : 년도를 입력하세요.');
				return; // 입력 잘못 될 시 return을 만나면 함수를 벗어남(break와 비슷)
			}
			if(document.frm.month.value.trim() == '') {
				alert('오류 : 월을 입력하세요.');
				return;
			} else {
				let month = document.frm.month.value;
				if(month <=0 || month >=13){
					alert('오류 : 월을 정확하게 입력하세요.');
					return;
				}
			}
			document.frm.submit();
		};
	};
</script>
</head>
<body>
<form action="calendar_ok1.jsp" method="post" name="frm">
년도 <input type="text" name="year"/><input type="text" name="month"/>
<input type="button" id="btn" value="달력 보기"/>
</form>
</body>
</html>



select를 사용한 달력출력

달력 소스는 위의 소스와 똑같다

<%@ 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>
<!-- 년과 월 부분의 selected="selected"를 바꿔가면서 사용하면 된다 -->
<!-- calendar3.jsp -->
<form action="calendar_ok1.jsp" method="post">
년도
<select name="year">
	<option value="2022">2022</option>
	<option value="2023" selected="selected">2023</option>
	<option value="2024">2024</option>
</select><select name="month">
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
	<option value="4" selected="selected">4</option>
	<option value="5">5</option>
	<option value="6">6</option>
	<option value="7">7</option>
	<option value="8">8</option>
	<option value="9">9</option>
	<option value="10">10</option>
	<option value="11">11</option>
	<option value="12">12</option>

</select>
<input type="submit" value="달력보기"/>
</form>
</body>
</html>



한 페이지에 달력 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar" %>
<%
	request.setCharacterEncoding("utf-8");

	StringBuilder sbHtml = new StringBuilder(); // 선언 위치를 변경
	
	if(request.getParameter("year") == null || request.getParameter("month") == null) {
		// 입력 데이터가 없는 경우
	} else {
		// 입력 데이터가 있는 경우
		String strYear = request.getParameter("year");
		String strMonth = request.getParameter("month");
	
		// 설정 날짜
		int year = Integer.parseInt(strYear);
		int month = Integer.parseInt(strMonth);
	
		Calendar sDay = Calendar.getInstance();
		Calendar eDay = Calendar.getInstance();
     
		sDay.set( year, month-1, 1 );
		eDay.set( year, month, 1-1 );
    	 
		int startDayOfWeek = sDay.get( Calendar.DAY_OF_WEEK );
		int endDyaOfWeek = eDay.get( Calendar.DAY_OF_WEEK );
		int endDay = eDay.get( Calendar.DATE );
	
		sbHtml.append( "<table width='800' border='1'>" );
		sbHtml.append( "<tr>" );
		sbHtml.append( "<td colspan='7'>" + year + "년" + month + "월</td>" );
		sbHtml.append( "</tr>" );
		sbHtml.append( "<tr>" );
		sbHtml.append( "<td>SU</td><td>MO</td><td>TU</td><td>WE</td><td>TH</td><td>FR</td><td>SA</td>" );
		sbHtml.append( "</tr>" );
    	 
		sbHtml.append( "<tr>" );
		for( int i=1 ; i<startDayOfWeek ; i++ ) {
			sbHtml.append( "<td></td>" );
		}
		for( int i=1, n=startDayOfWeek ; i<=endDay ; i++, n++ ) {
			if( n % 7 == 1 ) sbHtml.append( "<tr>" ); 
		
			if( n % 7 == 1 ) {
				sbHtml.append( "<td bgcolor='red'>" + i + "</td>" );
			}else if( n % 7 == 0 ) {
				sbHtml.append( "<td bgcolor='skyblue'>" + i + "</td>" );
			}else{
				sbHtml.append( "<td>" + i + "</td>" );
			}
		
			if( n % 7 == 0 ) sbHtml.append( "</tr>" ); 
		}
		for( int i=endDyaOfWeek ; i<=6 ; i++ ) {
			sbHtml.append( "<td></td>" );
		}
		sbHtml.append( "</tr>" );
		sbHtml.append( "</table>" );
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 자기 자신을 불러옴 -->
<form action="calendar_ok2.jsp" method="post">
년도
<select name="year">
	<option value="2022">2022</option>
	<option value="2023" selected="selected">2023</option>
	<option value="2024">2024</option>
</select><select name="month">
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
	<option value="4" selected="selected">4</option>
	<option value="5">5</option>
	<option value="6">6</option>
	<option value="7">7</option>
	<option value="8">8</option>
	<option value="9">9</option>
	<option value="10">10</option>
	<option value="11">11</option>
	<option value="12">12</option>

</select>
<input type="submit" value="달력보기"/>
</form>
<%= sbHtml.toString() %>
</body>
</html>



jsp에서 JCDB 연동

데이터베이스 풀링 - 미리 만들어 놓은 접속
tomcat 시작 시 풀링 생성 -> JNDI(이름을 통한 접근) -> 프로그램 접근
: 설정파일과 JNDI가 필요함

context.xml생성

<?xml version="1.0" encoding="utf-8" ?>
<Context>
  	<!-- Database 정보들을 Datasource에 건내주고(type) name에 넘겨줌 -> 톰캣(Container)이 관리-->
	<Resource
		name="jdbc/mariadb1"
		auth="Container"
		type="javax.sql.DataSource"
		
        driverClassName="org.mariadb.jdbc.Driver"
		url="jdbc:mariadb://localhost:3306/sample"
		username="root"
		password="123456" />
		
	<Resource
		name="jdbc/mariadb2"
		auth="Container"
		type="javax.sql.DataSource"
		
        driverClassName="org.mariadb.jdbc.Driver"
		url="jdbc:mariadb://localhost:3306/project"
		username="project"
		password="1234" />
</Context>

실행할 파일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.naming.NamingEnumeration" %>
<%@page import="javax.naming.NamingException"%>

<%@ page import="javax.sql.DataSource" %>

<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.SQLException" %>

<%
	Connection conn = null;
	try {
		Context initCtx = new InitialContext();
		Context envCtx = (Context)initCtx.lookup("java:comp/env");
		DataSource dataSource = (DataSource)envCtx.lookup("jdbc/mariadb1");
	
		conn = dataSource.getConnection();
		System.out.println("데이터베이스 연결 성공");
	
	} catch(NamingException e) {
		System.out.println("에러 : " + e.getMessage());
	} catch(SQLException e) {
		System.out.println("에러 : " + e.getMessage());
	} finally  {
		if(conn != null) conn.close();
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>

실행할 파일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="javax.naming.NamingException"%>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.naming.NamingEnumeration" %>

<%@ page import="javax.sql.DataSource" %>

<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.SQLException" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>

<%
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;

	try {
		Context initCtx = new InitialContext();
		Context envCtx = (Context)initCtx.lookup("java:comp/env");
		DataSource dataSource = (DataSource)envCtx.lookup("jdbc/mariadb1");
	
		conn = dataSource.getConnection();
		
		String sql = "select * from dept";
		pstmt = conn.prepareStatement(sql);
		
		rs = pstmt.executeQuery();
		while(rs.next()) {
			System.out.println(rs.getString("deptno"));
		}
	
	} catch(NamingException e) {
		System.out.println("에러 : " + e.getMessage());
	} catch(SQLException e) {
		System.out.println("에러 : " + e.getMessage());
	} finally  {
		if(conn != null) conn.close();
		if(pstmt != null) pstmt.close();
		if(rs != null) rs.close();
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>

jsp로 dept 테이블 출력

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.SQLException" %>
<%
	String url = "jdbc:mariadb://localhost:3306/sample";
	String user = "root";
	String password = "123456";

	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;

	StringBuilder sbHtml = new StringBuilder();

	//try catch 수동 작성(오류 판별)
	try {
	Class.forName("org.mariadb.jdbc.Driver");
	System.out.println("드라이버 로딩 성공");

	conn = DriverManager.getConnection(url, user, password);
	System.out.println("데이터베이스 연결 성공 <br>");

	String sql = "select deptno, dname, loc from dept";

	pstmt = conn.prepareStatement(sql);

	rs = pstmt.executeQuery();

	sbHtml.append("<table width='800' border='1'>");
	while(rs.next()) {
		sbHtml.append("<tr>");	
		sbHtml.append("<td>" + rs.getString("deptno") + "</td>");
		sbHtml.append("<td>" + rs.getString("dname") + "</td>");
		sbHtml.append("<td>" + rs.getString("loc") + "</td>");
		sbHtml.append("</tr>");	
	}	
	sbHtml.append("</table>");
	} catch(ClassNotFoundException e) {
		System.out.println("[에러] : " + e.getMessage());
	} catch(SQLException e) {
		System.out.println("[에러] : " + e.getMessage());
	} finally {
		if(rs != null) rs.close();
		if(pstmt != null) pstmt.close();
		if(conn != null) conn.close();
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%= sbHtml %>
</body>
</html>



jsp로 우편번호 검색 만들기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.SQLException" %>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%	
	request.setCharacterEncoding("utf-8");
	
	StringBuilder sbHtml = new StringBuilder();
	
	if(request.getParameter("dong") != null) {
		String strDong = request.getParameter("dong");
		
		String url = "jdbc:mariadb://localhost:3306/project";
		String user = "project";
		String password = "1234";
		
		Connection conn = null;
		PreparedStatement pstmt= null;
		ResultSet rs = null;
	
		try {
			Class.forName("org.mariadb.jdbc.Driver");
			conn = DriverManager.getConnection(url, user, password);
		
			String sql = "select zipcode, sido, dong, ri, bunji from zipcode where dong like ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, strDong + "%");
			
			sbHtml.append("<table width='800' border='1'>");
			rs = pstmt.executeQuery();
			while(rs.next()) {
				sbHtml.append("<tr>");
				sbHtml.append("<td>" + rs.getString("zipcode") + "</td>");
				sbHtml.append("<td>" + rs.getString("sido") + "</td>");
				sbHtml.append("<td>" + rs.getString("dong") + "</td>");
				sbHtml.append("<td>" + rs.getString("ri") + "</td>");
				sbHtml.append("<td>" + rs.getString("bunji") + "</td>");
				sbHtml.append("</tr>");
			}
			sbHtml.append("</table>");
		} catch(ClassNotFoundException e) {
			System.out.println("[에러] : " + e.getMessage());
		} catch(SQLException e) {
			System.out.println("[에러] : " + e.getMessage());
		} finally {
			if(conn != null) conn.close();
			if(pstmt != null) conn.close();
			if(rs != null) conn.close();
		}
	}	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="./zipcode.jsp" method="post" name="frm">
	<fieldset>
		<legend>우편번호 검색</legend>
		<label for="dong">동이름 입력</label>
		<input type="text" id="dong" name="dong" size="40" placeholder="동이름 입력"/>
		<input type="submit" id="btn" value="우편번호 입력"/>
	</fieldset>
</form>
<%= sbHtml %>
</body>
</html>



0개의 댓글