본문 바로가기

JSP/기본다지기

JSP 맛보기 2일차

<JSP를 들어가기 전에....>


MySQL DATABASE에 연결해 보기.


전 포스팅에서 처럼 Dynamic Web Project를 새로 생성(이름은 L01JDBC)


그 다음 Java Resources 의 src 에 com.javalesson.source 패키지를 만들고


그 안에 새로운 클래스 MemberList.java를 생성해줍니다.


그 다음 WebContent 의 WEB-INF 내부의 lib에  mysql 커넥터를 붙여넣기 합니다.

(전 장의 mysql 다운로드시 같이 받아둔 파일 압축풀기 하면 나오는 .jar파일)


<아래 그림처럼 나오도록!>



이제 MemberList.java를 servlet으로 만들어서 DB를 연결합니다.


package com.javalesson.source;


import javax.servlet.ServletException;

import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.http.*;

import javax.servlet.annotation.*;


//DB 연결

import java.sql.DriverManager;//접속 DB 드라이버를 설정

import java.sql.Connection;//DB 접속해서

import java.sql.Statement; //쿼리를 실행하는 클래스

import java.sql.ResultSet; //쿼리의 결과값을 받는다.

import java.sql.SQLException;


@WebServlet("/MemberList")//web.xml을 대신해서 만들어진 것

//서블릿을 맵핑해서 요청하는 주소를 설정할 수 있다.

public class MemberList extends HttpServlet {

String url = "jdbc:mysql://localhost:3306/java_lesson"//DB서버 주소

+ "?useUincode=true&characterEncoding=utf8";

String uid = "root";

String upw = "mysql";

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) 

throws ServletException, IOException {

Connection conn = null;

String sql = "select * from member";

Statement stmt = null; //sql을 실행

ResultSet rs = null; //쿼리문의 결과를 받는다.

resp.setContentType("text/html; charset=UTF-8");

PrintWriter out = resp.getWriter();

out.print("<html>");

out.print("<body>");

try {

Class.forName("com.mysql.jdbc.Driver");//붙여넣은 mysql lib을 사용해서 접속준비

conn = DriverManager.getConnection(url,uid,upw);//접속

stmt = conn.createStatement(); //sql을 실행할 준비

rs = stmt.executeQuery(sql); //쿼리 sql을 실행하고 ResultSet 객체가 받는다.

out.print("<table border='1'>");

out.print("<tr>"

+ "<th>num</th>"

+ "<th>id</th>"

+ "<th>pwd</th>"

+ "<th>name</th>"

+ "<th>email</th>"

+ "<th>phone</th>"

+ "<th>indate</th>"

+ "<th>admin</th>"

+ "</tr>");

while(rs.next()){

out.print("<tr>");

out.print("<td>"+rs.getInt("num")+"</td>");

out.print("<td>"+rs.getString("id")+"</td>");

out.print("<td>"+rs.getString("pwd")+"</td>");

out.print("<td>"+rs.getString("name")+"</td>");

out.print("<td>"+rs.getString("email")+"</td>");

out.print("<td>"+rs.getString("phone")+"</td>");

out.print("<td>"+rs.getString("indate")+"</td>");

out.print("<td>"+rs.getString("admin")+"</td>");

out.print("</tr>");

}

out.print("</table>");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if(rs!=null)rs.close();

if(stmt!=null)stmt.close();

if(conn!=null)conn.close();

catch (SQLException e) {

e.printStackTrace();

}

}

out.print("</html>");

out.print("</body>");

//resp.getWriter().append("<html>").append("<h1 style='color: red;'>おはようございます。</h1>").append("</html>");

}

}



위와 같이 출력되면 됩니다.



WebContent 폴더에서 새로운 jsp 문서 index.jsp 생성

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- paga language = "java" jsp를 사용하겠다. -->
    <!-- html 주석 -->
    <!-- jsp 문서는 servlet 문서와 같다. -->
    <!-- % % 스크립트릿 내부는 doGet method 내부와 같다. -->
    <!-- %! % 전역을 표현한다. -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>index.jsp</title>
</head>
<body>
    <h2>会員登録 フォーム(insert)</h2>
    <h4>INSERT INTO MEMBER (id,pwd,name,phone,email,admin) VALUES ('admin','1234','관리자','111-11111','admin@gmail','1')</h4>
    <h4>insert 쿼리를 실행하는 MemberAdd servlet을 호출한다.</h4>
    <h4>성공시 MemberList servlet을 호출, 실패시 form으로 돌아온다.</h4>
    <!-- a href="MemberList"> 멤버리스트 출력 </a -->
    <form action="MemberList" method="get">
    <!-- aciton은 특정 페이지를 호출(a태그와 동일한 역할) -->
    <!-- method 는 서블릿의 특정 페이지 doGet or doPost 중 하나를 호출함  -->
        <p>
            <label for="uName">이름</label>
            <!-- label은 누구의 라벨인지 for 속성으로 등록한다. 등록시 id 값을 동일하게 주면된다. -->
            <input type="text" id="uName" name="uNname" size="20" placeholder="이름을 입력하세요">
        </p>
        <p>
            <label for="uId">ID</label>    
            <input type="text" id="uId" name="uId" size="20" placeholder="ID를 입력하세요">
        </p>
        <p>
            <label for="uPass">PW</label>    
            <input type="password" id="uPass" name="uPass" size="20" placeholder="password를 입력하세요">
        </p>
        <p>
            <label for="uEmail">E-mail</label>    
            <input type="email" id="uEmail" name="uEmail" size="20" placeholder="E-mail을 입력하세요">
        </p>
        <p>
            <label for="uPhone">Phone</label>    
            <input type="email" id="uPhone" name="uPhone" size="20" placeholder="휴대전화번호를 입력하세요">
        </p>
        <p>
            <label for="admin">관리자</label>    
            <input type="radio" id="admin" name="admin" value="0">
            <label for="normal">일반 사용자</label>    
            <input type="radio" id="noraml" name="admin" value="1">
        </p>
        <!-- 판넬 -->
        <!-- name 속성은 form 태그 안에서 유일한 값(ex)DB의 Primary Key) -->
        <!-- id 속성은 html 문서 안에서 유일한 값 -->
        <input type="submit" value="제출">
    </form>
</body>
</html>
cs

실행 예시

이번 예제에서 새로 나온 HTML태그 정리


<html> html 문서의 시작과 끝을 나타냄 </html>


<meta> 현재 html문서의 정보를 알려줌 </닫힘 없음>


<head> 머릿말이 들어가는 부분 (웹상에서 보이지 않음) </head>


<title>

웹브라우저 상단에 사이트의 제목이 들어가는 부분

즐겨찾기에 적히는 제목이기도 하다.

</title>


<body> 눈에 보이는 태그를 기술하는 부분 (웹에 보이는 모든 정보) </body>


<a href = "" target = "">

a태그(anchor)

링크 연결을 담당


href - 목적지, url


target - 보여질 위치


target의 속성에는 아래와 같은 것이 존재


_blank(새 창), _self(이동), _parent(먼저 띄워진 창),

_top(현재 띄워진 가장 최상단에 위치한 창)


name - a태그의 이름 지정(북마크 역할)


title - 링크에 대한 설명


링크속성 ":"는 가상클래스

a:link - 방문 안한 곳, 파란색

a:visit - 방문한 곳, 보라색

a:hover - 마우스를 올렸을 때

a:active - 활성화 된 링크, 빨간색

</a>


<h>

<h1>~<h6>까지 지정 가능하며

제목을 표시하기 위함.

글자 크기는 숫자에 따라 달라진다.

</h>


<form> 

입력을 받기 위한 태그


name - 전송될 데이터의 이름. 

form태그 안에서 유일한 값을 가져야함.


action - 입력된 데이터가 전송될 페이지를 지정.


method - 입력된 데이터가 처리될 방식

get과 post가 있음.

default값은 get임.

 </form>


<label>

리더기가 읽을 부분.

웹 접근성에서 중요한 요소이며

다양한 폼 서식의 설명으로 사용됨


for - 라벨에 이름을 지정할 수 있음.


</label>


<p>

Paragraph. 문단 구분

Enter 2번과 같은 효과.

</p>


<table> 

표를 만든다 


옵션값은 아래와 같음


border - 테이블의 선 두께


cellpadding - 셀 안쪽 여백


cellspacing - 셀과 셀 사이의 간격


width - 테이블의 너비


summary - 요약

</table>


<tr> table row : 테이블의 행을 정의 </tr>


<th> 테이블에서 셀 제목으로 지정하여 강조되게 표시하는 태그 </th>


<td> 각 행에 포함될 셀을 만드는 태그. <th>의 개수와 같아야 한다. </td>


<input>

입력을 받는 상자


속성에는


name - 필수 입력. 이름을 지정함


value - 입력 구성요소의 값을 지정


checked - 'checked', 'radio'일 경우 체크된 상태로 지정

checked 사용시 name값은 동일해야 한다


maxlength - 타입 속성이 text, password 일 경우 입력 가능한 최대 문자수 지정


readonly - 타입 속성이 text, password 일 경우

요소의 값을 읽기전용으로 지정.

수정불가, 데이터 전송가능


disabled - 페이지가 로드 될 때 폼 속성을 비활성화 시킴.

 수정불가, 데이터 전송불가.


type - 입력 구성요소의 종류를 지정


type에는 다음과 같은 종류가 있음

text, password, email, radio, checkbox, file, submit, reset, button, hidden


</input>