250x250
Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

개린이 개발노트

국비지원 JAVA(자바) 프로그래밍 (JSP,Bundle,WebServer,WAS,서블릿,필터,JDBC) 본문

국비지원(국비교육) 웹 개발자 과정

국비지원 JAVA(자바) 프로그래밍 (JSP,Bundle,WebServer,WAS,서블릿,필터,JDBC)

개린이9999 2023. 1. 27. 21:54
728x90

위의 회원 가입 페이지에서 한국어를 누르면 한국어로된 회원가입 페이지,

english를 누르면 영어로된 회원가입 페이지가 나오도록 만들어보기(아래와 같이) 

한글 번들 프로퍼티즈

title = 회원가입 페이지
name = 이름
id = 아이디
pw = 비밀번호
list1 = 자바
list2 = 자바스크립트
list3 = 제이에스피
male = 남
female = 여
btn = 회원가입

영어 번들 프로퍼티즈

title = Sign up Page
name = name
id = ID
pw = Password
list1 = Java
list2 = JavaScript
list3 = JSP
male = male
female = female
btn = Sign up

JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

<fmt:setLocale value='<%=request.getParameter("lang")%>'/>
<fmt:bundle basename="bundle.signupBundle">

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"> 
<title>Insert title here</title>
<!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>

   <div class="alert alert-secondary fs-3" role="alert"> 
     <fmt:message key="title"/>
   </div>

   <div class="container mt-3">
      <div class="text-end">
        <a class="btn btn-primary me-md-2" href="?lang=ko">한국어</a>
        <a class="btn btn-primary" href="?lang=en">English</a>
      </div>
      
      <form>
        <div class="mb-3">
          <label for="name" class="form-label">
               <fmt:message key="name"/>
          </label>
          <input type="text" class="form-control" id="name">
        </div>
        
        <div class="mb-3">
          <label for="id" class="form-label">     
          <fmt:message key="id"/>
		</label>
          <input type="text" class="form-control" id="id">
        </div>
        
        <div class="mb-3">
          <label for="pw" class="form-label">
               <fmt:message key="pw"/>
		  </label>
          <input type="password" class="form-control" id="pw">
        </div>
        
        <div class="mb-3">
           <select class="form-select">
            <option value="1">  
                 <fmt:message key="list1"/>         
     		</option>
            <option value="2">
            	<fmt:message key="list2"/>
            </option>
            <option value="3">
            	<fmt:message key="list3"/>  
            </option>
           </select>
        </div>
        
        <div class="mb-3">
          <input type="radio" name="gender" value="male">
			<fmt:message key="male"/>  
          <input type="radio" name="gender" value="female">
         	<fmt:message key="female"/>  
        </div>
        
        <button type="submit" class="btn btn-primary"><fmt:message key="btn"/>  </button>
      </form>
   </div>
</body>
</html>

</fmt:bundle>


단순히 2번페이지로 이동요청할 때

↓ 이렇게 이동됨

그러나 단순 이동이 아닌 입력한 이름과 아이디를 포함해서 2번페이지로   보내주세요 라고 할때 

=> URL:~~~/2번페이지.jsp?이름=xxx&아이디=xxx  (쿼리스트링 이용) 

 -> 2번페이지에서는 이름과 아이디를 사용가능  

 

쿼리스트링 이용 

 

 

 

자바코드 이용해서 내용 출력하기 ↓


Web Server
Web Server의 개념

웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(.html .jpeg .css 등)를 제공하는 컴퓨터 프로그램

 

WAS(Web Server Apprication의 개념)
DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server

“웹 컨테이너(Web Container)” 혹은 “서블릿 컨테이너(Servlet Container)”라고도 불린다.
WAS = Web Server + Web Container

 

[Web] Web Server와 WAS의 차이와 웹 서비스 구조 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io


서블릿 필터

한글화 필터 한번만 이용하면 모든 JSP에 한글안깨져서 나옴!!! 

 

패키지 만들고 클래스 만든 다음 인터페이스 추가

인터페이스는 필터 자바 서블릿 

잘 안나올 때는 

package com.study.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class TestFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, 
						 ServletResponse response, 
						 FilterChain chain)
			
								 throws IOException, ServletException {
		// TODO Auto-generated method stub
		
	}

 
}

 

 

필터쓰는 방법

1. 어노테이션으로 지정

2. web.xml의 환경설정을 바꿔서 

클라이언트가 signup.jsp 이것좀 나한테 보내주세요

                      필터를 껴넣음

-> 서버가 오케이하고 signup.jsp 클라이언트에게 응답

 

 

요청과 응답 둘다 필터가 작동함

어노테이션 방식

한글화 필터

package com.study.filter;

import java.io.IOException; 

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter("/*")
public class TestFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, 
						 ServletResponse response, 
						 FilterChain chain)
			
								 throws IOException, ServletException {
		
			request.setCharacterEncoding("utf-8");
			chain.doFilter(request, response);
	}
 
}

 


web.xml 생성하기

web.xml 생성완료

 

 

다이나믹 프로젝트 만들 때 처음부터 이렇게 만들어도 xml 만들어짐   ↓

 web.xml 방식

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
  <display-name>0127</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

	<!-- 필터 생성태그 -->
	<filter> 
		<filter-name>testFilter</filter-name>
		<filter-class>com.study.filter.TestFilter</filter-class>
	</filter>
	
	<!-- 생성된 필터를 어디에서 사용할건지 경로설정해주는 태그 -->
	<filter-mapping>
		<filter-name>testFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app>


JDBC 

create  user  study  identified  by  1234;
grant  connect,  resource  to  study;

 

CREATE TABLE MEMBER(
    NAME VARCHAR2(20),
    USERID VARCHAR2(20) PRIMARY KEY,
    PW VARCHAR2(20),
    EMAIL VARCHAR2(40),
    PHONE VARCHAR2(13),
    ADMIN NUMBER(1) DEFAULT 0
);

INSERT INTO member VALUES('고길동', 'GOROAD', 1234, 'GOGORO@NAVER.COM', '010-1234-1234', 0);
INSERT INTO member VALUES('둘리', 'akama', 9876, 'akdong@NAVER.COM', '010-9876-9876', 1);
INSERT INTO member VALUES('티모', 'teemo', 5678, 'onlytop@google.com', '010-1212-3434', 0);

select * from member;

commit;

C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib

오라클과 데이터베이스 연결

JDBC 

jdbc드라이버 로드-> 데이터베이스연결->sql문 실행 ->db연결 끊음

(자바에서 예외처리 강요해서 try catch와 사용)

 

DriverManager-> Connection -> Statement -> Result

 

ojdbc6.jar ->  자바랑 DB 연결시 필요한 API

 

Class.forName("oracle.jdbc.driver.OracleDriver");

 

DB에 연결 

Connection 인터페이스 

Connection conn = new Connection(); -> new 생성자 안됨! 

Connection  conn = DriverManager.getConnection(url,id,pw);

 

위처럼하면  Connection 이라는 인터페이스로 베이스로 만들어진 conn이라는 객체만들어짐

 

url (jdbc 형태)

 jdbc:oracle:thin:[hostname]:[port]:dbname

jdbc:oracle:thin:@localhost:1521:XE - > URL에 들어감

id : study

pw : 1234 

 

conn.close(); 

 

Statement Sql 문을 처리

Statement stmt = conn.createStatement();

-> 얘를 가지고 sql 문을 실행할 수 도 있음 

Statement 메서드 2가지로 나뉘게 됨

 

excuteQuery: select 처리 -> 결과 나타는 경우 사용

 

excuteUpdate: inset, update, delete  -> 결과가 나타는게 아니라 그냥 테이블 내용이 변경되었을 때 사용 

 

stmt.excuteQuery(SQL); -> 이런식으로 select처리

 

결과를 저장하는 ResultSet

ResultSet irs = stmt.excuteQuery(SQL);

 

ResultSet메서드

next(): 다음 데이터가 있는 지 확인하고 있으면 True, 없으면 False로 리턴하고 다음으로 이동

previous(): 이전 데이터가 있는지 확인해서 잇으면  true, 없으면 false로 리턴 이전으로 이동

first (): 현재 위치에서 첫번째로 이동

last(): 현재 위치에서 마지막으로 이동

 

 

<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	
	String url= "jdbc:oracle:thin:@localhost:1521:XE";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<table border='1'>
		<tr>
			<th>이름</th> 
			<th>아이디</th>
			<th>비밀번호</th>
			<th>이메일</th>
			<th>전화번호</th> 
			<th>권한</th>
		</tr>
		<%
			String sql = "select*from member";
		
			try {
				Class.forName("oracle.jdbc.driver.OracleDriver");
				conn = DriverManager.getConnection(url,"study","1234");
				stmt = conn.createStatement();
				rs = stmt.executeQuery(sql);
				
				while(rs.next()) {
					out.print("<tr>");
					out.print("<td>"+rs.getString("name")+"</td>");
					out.print("<td>"+rs.getString("userid")+"</td>");
					out.print("<td>"+rs.getString("pw")+"</td>");
					out.print("<td>"+rs.getString("email")+"</td>");
					out.print("<td>"+rs.getString("phone")+"</td>");
					out.print("<td>"+rs.getInt("name")+"</td>");
					out.print("</tr>");
				}
					
			} catch(Exception e) {
				e.printStackTrace();
			} finally {
				try{ 
					if(rs != null)
						rs.close();
					if(stmt != null)
				     stmt.close();
					if(conn != null)
					conn.close();
			} catch(Exception e){
				e.printStackTrace();
			}
	   }
		%>
		
	</table>
</body>
</html>


PreparedStatement

 -> Statement보다 더빠름 

<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	
	String url= "jdbc:oracle:thin:@localhost:1521:XE";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<table border='1'>
		<tr>
			<th>이름</th> 
			<th>아이디</th>
			<th>비밀번호</th>
			<th>이메일</th>
			<th>전화번호</th> 
			<th>권한</th>
		</tr>
		<%
			String sql = "select*from member where ";
		
			try {
				Class.forName("oracle.jdbc.driver.OracleDriver");
				conn = DriverManager.getConnection(url,"study","1234");
			    //stmt = conn.createStatement();
				//rs = stmt.executeQuery(sql);
				pstmt= conn.prepareStatement(sql);
				rs=pstmt.executeQuery();
				
				while(rs.next()) {
					out.print("<tr>");
					out.print("<td>"+rs.getString("name")+"</td>");
					out.print("<td>"+rs.getString("userid")+"</td>");
					out.print("<td>"+rs.getString("pw")+"</td>");
					out.print("<td>"+rs.getString("email")+"</td>");
					out.print("<td>"+rs.getString("phone")+"</td>");
					out.print("<td>"+rs.getInt("name")+"</td>");
					out.print("</tr>");
				}
					
			} catch(Exception e) {
				e.printStackTrace();
			} finally {
				try{ 
					if(rs != null)
						rs.close();
					if(pstmt != null)
				     pstmt.close();
					if(conn != null)
					conn.close();
			} catch(Exception e){
				e.printStackTrace();
			}
	   }
		%>
		
	</table>
</body>
</html>

 



SQL문 ( sql디벨로퍼에서 작성) 

create table 사원(
    사원번호 number(4) PRIMARY key,
    이름 varchar2(20),
    생년월일 number(6),
    부서명 varchar2(20)
);

insert into 사원 values(1001, '유재석', '901010', '영업부');
insert into 사원 values(1002, '정준하', '801212', '관리부');
insert into 사원 values(1003, '노홍철', '950505', '회계부');

select * from 사원;

commit;

<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

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

	String url = "jdbc:oracle:thin:@localhost:1521:XE";
	String id = "study";
	String pw = "1234";%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>사원정보</h1>
	<table border=1>
		<tr>
			<th>사원번호</th>
			<th>이름</th>
			<th>생년월일</th>
			<th>부서명</th>
		</tr>
	</table>

	<%
		try {
			String sql = "select*from 사원";

			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(url, id, pw);
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();

			while (rs.next()) {
				out.print("<tr>");
				out.print("<td>" + rs.getInt("사원번호") + "</td>");
				out.print("<td>" + rs.getString("이름") + "</td>");
				out.print("<td>" + rs.getInt(3) + "</td>");
				out.print("<td>" + rs.getString(4) + "</td>");
				out.print("<td>" + rs.getInt("name") + "</td>");
				out.print("</tr>");

			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (conn != null)
					conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	%> 


</body>
</html>

728x90