반응형
반응형

📝HttpServletRequest

클라이언트가 보낸 요청의 정보를 가지고있다.
→ 즉, 요청이 들어오면 그 요청에대한 정보를 가지고 있다.

request.getHeader("host"); → 요청한 host에 대한 정보를 가지고있다.

 

📝HttpServletResponse

HTTP 요청에 대한 응답 메시지를 생성하고, 기타 편의 기능을 제공한다.
→ 즉, 사용자에게 보낼 응답에 대한 정보를 가지고 있다.

response.setContentType("text/plain");
response.setCharacterEncoding("utf-8"); → text/plain utf-8 형태로 응답을 보내겠다.

반응형
반응형
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<link href="<%=request.getContextPath()%>/resources/css/styles.css">
<script
    src="<%=request.getContextPath()%>/resources/js/dashboard/dashboard.js"></script>
<!-- request.getContextPath는 webapp의 경로이다. -->
이클립스 server.xml 에서 port=8080과 port=8009 두 개의 connector에 URIEncoding="UTF-8"을 추가한다.
    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"  URLEncoding="UTF-8"/>
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URLEncoding="UTF-8"/>
    
request.setCharacterEncoding("UTF-8")
response.setCharacterEncoding("UTF-8")
response.setContentType("text/html; charset=utf-8")

 

 

반응형
반응형

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

이것을 미리 적고 jsp 확장자로 변경하면 안 깨집니다.

반응형
반응형

JSP 스크립트의 문제점을 보완 가독성을 향상시키고 스크립트에서 자바의 사용을 최소화 할 수 있습니다.

 

먼저 jar파일을 다운로드후 프로젝트 라이브러리에 추가시켜 사용합니다.

 

http://tomcat.apache.org/

 

Apache Tomcat® - Welcome!

The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These specifications are part of the

tomcat.apache.org

 

 

 

JSTL도 크게 5개로 나뉩니다. 우리는 주로 기본적인 c에 대해서 알아보도록 하겠습니다.

필요한 게 있으시면 찾아서 쓰시면 됩니다.

 

 

코어 : 자바 변수 지원 , 흐름 제어 , URL처리

XML : xml 처리 , xml 흐름제어

국제화 : 국제화처리, 메시지 관리

SQL : 데이터베이스 접근 및 처리

함수(function) : 문자열 처리, 컬렉션 처리

 

 

라이브러리 접두어 URI
코어(Core) c http://java.sun.com/jsp/jstl/core
XML x http://java.sun.com/jsp/jstl/xml
국제화 fmt http://java.sun.com/jsp/jstl/fmt
SQL sql http://java.sun.com/jsp/jstl/sql
함수(functions) fn http://java.sun.com/jsp/jstl/functions

 

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

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:set var="jum" value="99"/> <!-- 변수를 선언합니다. -->
	<c:remove var="jum"/> <!-- 변수를 지웁니다. -->
	
	<c:set var="jum" value="0"/>
	<c:if test="${jum <= 100}">
		jum = ${jum}<br>
	</c:if>
	
	<c:catch var="errmsg">
		<%= 99 / 0 %>
	</c:catch>
	<c:out value="${errmsg}"/><br>	

	<c:choose>
		<c:when test="${jum>=90}">
			<c:set var="grd" value="A"/>
			<c:out value="${grd}"/><br>
		</c:when>
		<c:when test="${jum>=80}">
			<c:set var="grd" value="B"/>
			<c:out value="${grd}"/><br>
		</c:when>
		<c:otherwise>
			<c:set var="grd" value="씨뿌리기!!"/>
			<c:out value="${grd}"/><br>
		</c:otherwise>
	</c:choose>
	
	<c:forEach var="i" begin="1" end="10" step="${i = i + 1}">
		<c:set var="sum" value="${sum = sum + i}"/>
	</c:forEach>
	
	<c:forTokens var="msg" items="JSTL program test!" delims=" ">
		${msg} <br>
	</c:forTokens>

	<c:redirect url="./EL_form_request.jsp">
		<c:param name="para" value="massage"/>
	</c:redirect>
</body>
</html>

 

<%@ taglib prefix = "c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix = "x" uri="http://java.sun.com/jsp/jstl/xml"%>
<%@ taglib prefix = "fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix = "sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<%@ taglib prefix = "fn" uri="http://java.sun.com/jsp/jstl/functions"%>

이런식으로 선언해주면 사용이 가능합니다. 왜 다 적었냐면 그냥 어떻게 쓰는지 알려주려고 그랬습니다.

 

 

<c:set 변수타입 = "변수명" value = "변수값">

<c:set var="jum" value="99"/>

 

변수를 선언합니다.

 

<c:remove 변수타입 =" 변수명"/>

<c:remove var="jum"/>

 

변수를 제거합니다.

 

<c:if test="${조건문}"> 

<c:if test="${jum <= 100}">

 

if문입니다.

 

<c:catch 변수타입="변수명">

<c:catch var="errmsg">

 

예외 메세지를 받아주는 변수타입과 변수명을 설정해주고 try catch처럼 예외를 잡아줍니다.

 

<cout: value="출력할 것">

<c:out value="${errmsg}"/>

 

출력문입니다. 

 

<c:choose> 

 

switch문입니다.

 

<c:when test="${조건문}">

<c:when test="${jum>=90}">

 

case문입니다.

 

<c:otherwise>

default문 입니다. 

 

- 형태 1 -

<c:forEach 반복자변수타입="반복자변수명" begin="반복자초기값" end="반복자끝값" step="${증가값"}

<c:forEach var="ibegin="1end="10step="${i = i + 1}">

 

for문입니다. 이걸 자바의 for문으로 바꾸면 이와 같다

for(var i = 1 ; i <= 10 ; i++)

 

- 형태 2 -

 

<c:forEach items="${books}" var="book" varStatus="status">

    ${status.current} 

    ${status.index} 

    ${status.count} 

    ${status.begin}

    ${status.end} 

    ${status.step} 

</c:forEach>

 

items : 배열명

begin : 반복문의 시작값을 설정

end : 반복문의 종료값을 설정

step : 반복문의 증가값을 설정

var : 배열의 인덱스

varStatus : 변수의 상태를 담을 변수를 설정

 

${status.current} : 현재 인덱스

${status.index} : 0부터의 순서

${status.count} : 1부터의 순서

${status.begin} : 시작값

${status.end} : 끝값

${status.step} : 증가값

 

<c:forTokens 토큰내용이들어갈 변수타입=변수명 items="내용" delims="구분자">

<c:forTokens var="msgitems="JSTL program test!delims=" ">

 

내용을 구분자로 나눠서 변수명(msg)에 들어가게 됩니다.

 

<c:redirect url="연결 할 곳">

<c:redirect url="./EL_form_request.jsp">

 

redirect와 동일합니다.

 

<c:param name="속성명" value="속성값">

<c:param name="para" value="massage"/>

 

jsp:param과 동일합니다.

반응형
반응형
<%@ 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>
	<!-- \$은 EL을 텍스트상으로 그냥 표현하기 위해서 쓰입니다. -->
	\${ 1 + 5 } = ${1 + 5} <br> <!-- 더하기 연산 -->
	\${ 6 - 5 } = ${6 - 5} <br> <!-- 빼기 연산 -->
	\${ 8 * 5 } = ${8 * 5} <br> <!-- 곱하기 연산 -->
	\${ 1 / 5 } = ${1 / 5} <br> <!-- 나누기 연산 -->
	\${ 11 % 5 } = ${11 % 5} <br> <!-- 나머지 연산 -->
	-----------------------------<br>
	\${ 5 = 5 } = ${5 == 5} <br> <!-- 같다 관계연산 -->
	\${ 1 < 5 } = ${1 < 5} <br> <!-- < 관계연산 -->
	\${ 1 > 5 } = ${1 > 5} <br> <!-- > 관계연산 -->
 	\${ 1 => 5 } = ${1 >= 5} <br> <!-- => 관계연산 -->
	\${ 1 <= 5 } = ${1 <= 5} <br> <!-- <= 관계연산 -->
	-----------------------------<br>
	\${ 5 >= 5 && 5 <= 5 } = ${5 >= 5 && 5 <= 5} <br> <!-- and 논리연산 -->
	\${ 5 >= 5 || 5 <= 2 } = ${5 >= 5 || 5 <= 2} <br> <!-- or 논리연산 -->
	\${ !(5 > 5) } = ${!(5 > 5)} <br> <!-- not 논리연산 -->

	\${empty "abc"} = ${empty "abc"} <!-- .empty -->
</body>
</html>

JSP 스크립트의 구성요소와 HTML 태그를 혼합해서 코딩하다보면 복잡하고 이해하기 어려운 경우가 발생합니다.

표현 언어 표준 태그 라이브러리를 사용하면 이러한 문제를 쉽게 해결 할 수 있습니다.


먼저 EL에 대해서 알아보도록 하겠습니다.  JSP의 <%= =>표현식을 대신합니다.

 

📝표현 언어 (EL)

 

JSP 스크립트 구성요소중 표현식(<%= =>)을 대신해 줍니다.

기본 문법 ${표현 할 내용} 또는 #{표현 할 내용} 입니다.

 

 

$와 #의 차이는 저도 잘 모르겠습니다.

제가 알아본 바로는 $ ${4} , ${3 + 2} 는 되는데 ##{3 + 2}는 되고 #{4}는 안 됩니다.

 

우리가 지금까지 사용해 왔던 연산들을 쓰시고 변수가 있으면 변수로도 계산 가능한 말 그대로 표현식입니다.

 

 

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

<%
	session.setAttribute("cust_id","admin");
	session.setAttribute("cust_name","관리자");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form name = "login_form" method = "POST" action = "./EL_form_request.jsp">
		<table>
			<tr>
				<th> 아 이 디 </th>
				<th>
					<input type = "text" name = "cust_id" size = "10" maxlength = "10">
				</th>
			</tr>
			<tr>
				<th> 이 름 </th>
				<th>
					<input type = "text" name = "cust_name" size = "10" maxlength = "10">
				</th>
			</tr>
			<tr>
				<td colspan="2" style="text-align:center">
					<input type = "submit" value = "전송">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	request.setCharacterEncoding("UTF-8");
%>

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

${cust_id}<br>
${cust_name}<br>

내장객체 sessionScope(cust_id) : ${sessionScope.cust_id}<br>
내장객체 sessionScope(cust_name) : ${sessionScope.cust_name}<br>

내장객체 param(cust_id) : ${param.cust_id}<br>
내장객체 param(cust_name) : ${param.cust_name}

</body>
</html>

 

request.getParameter를 안 해도 ${cust_id}를 통해 바로 가져올 수가 있습니다. (여기에선 session영역)

또한 pageScope, requestScope, sessionScope, applicationScope도 사용이 가능합니다.

param과 paramaValues로 값과 값들을 가져올 수 있습니다. 

param의 경우 넘어온 값들이 저장 되어 있습니다.

반응형
반응형

 

이번에는 JSP파일에 DB를 연결하는 걸 해보도록 하겠습니다.

 

1. DB는 MySQL 쓸겁니다.

2. JDBC라는 DB랑 JSP랑 연결해주는 게 필요합니다.

 

https://dev.mysql.com/downloads/

 

MySQL :: MySQL Community Downloads

The world's most popular open source database

dev.mysql.com

다운 받아서 압축을 풀면 mysql-connector-java-버전명.jar이라는게 있는데 이걸 WEB-INF - lib넣어주세요

 

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

    
<html>
<head><title>MEMBER 테이블 레코드 삽입</title></head>
<body>
<header>
	<%@ include file="topMenu.jsp" %>
</header>
<contents>
	<%@ include file="insertForm.jsp" %>
</contents>

</body>
</html>

join.jsp 입니다.

 

<%@ 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> <a href="join.jsp">[ 회원 가입 ]</a> <a href="memberList.jsp">[회원 목록]</a> </h1>
</body>
</html>

topMenu.jsp 입니다.

 

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head><title>MEMBER 테이블 레코드 삽입</title></head>
<body>
<form action="useBeanInsert.jsp" method="post">
	<table border="1">
		<tr>
			<td>아이디</td>
			<td><input type="text" name="memberID" size="10"></td>
			<td>암호</td>
			<td><input type="text" name="password" size="10"></td>
		</tr>
		<tr>
			<td>이름</td>
			<td><input type="text" name="name" size="10"></td>
			<td>이메일</td>
			<td><input type="text" name="email" size="10"></td>
		</tr>
		<tr>
			<td colspan="4"><input type="submit" value="삽입"></td>
		</tr>
	</table>
</form>
</body>
</html>

insertForm.jsp 입니다.

 

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

<jsp:useBean class = "com.member.RegisterBean" id= "regBean" scope ="session"/>
<jsp:setProperty property ="*" name = "regBean"/>
<jsp:useBean class = "com.member.RegisterMgr" id ="regMgr" scope = "session"/>

<% regMgr.insertMember(regBean);%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
</body>
</html>

useBeanInsert.jsp 입니다.

 

2개의 자바빈을 사용할 건데 한 개는 Setter Getter로 이루어져있는 일반 POJO클래스입니다.

한 개는 DB와 연결해 상황에 맞는 쿼리문을 작동시킬 수 있게 만든 클래스입니다. 

여기에선 회원가입인 거이고 그에 대한 정보가 INSERT 쿼리문을 이용해 DB에 저장하는 방식입니다.

 

package com.member;

public class RegisterBean {

		private String memberID;
		private String password;
		private String name;
		private String email;
		
		public String getMemberID() {
			return memberID;
		}
		public void setMemberID(String memberID) {
			this.memberID = memberID;
		}
		
		public String getPassword() {
			return password;
		}
		public void setPassword(String password) {
			this.password = password;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getEmail() {
			return email;
		}
		public void setEmail(String email) {
			this.email = email;
		}
		

}
package com.member;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.Vector;


 
 public class RegisterMgr {
    
 	private final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
 	private final String JDBC_URL = "jdbc:mysql://:3307/jsp?characterEncoding=utf-8";
 	// 타임존 에러시
 	// jdbc:mysql://localhost:3306/DB이름?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
 	// jdbc:mysql://ip:port/testdb?characterEncoding=UTF-8&serverTimezone=UTC
 	private final String USER = "root";
 	private final String PASS = "1234";
 
 	public RegisterMgr() {
 	 try{
 	   Class.forName(JDBC_DRIVER);
 	   }catch(Exception e){
 	      System.out.println("Error : JDBC 드라이버 로딩 실패");
 	   }
     }//MemberMgr()
 
    public Vector getMemberList() {
	   Connection conn = null;
	   Statement stmt = null;
       ResultSet rs = null;
       Vector vecList = new Vector();
       try {
          conn = DriverManager.getConnection(JDBC_URL,USER,PASS);
          String strQuery = "select * from membertbl";
          stmt = conn.createStatement();
          rs = stmt.executeQuery(strQuery);
		  while (rs.next()) {
             RegisterBean regBean = new RegisterBean();
		 	 regBean.setMemberID (rs.getString("memberid"));
			 regBean.setPassword (rs.getString("password"));
 			 regBean.setName (rs.getString("name"));
 			 regBean.setEmail (rs.getString("email"));
             vecList.add(regBean);
          }
       } catch (Exception ex) {
          System.out.println("Exception" + ex);
       } finally {
          if(rs!=null)   try{rs.close();}  catch(SQLException e){}
		  if(stmt!=null) try{stmt.close();}catch(SQLException e){}
	      if(conn!=null) try{conn.close();}catch(SQLException e){}
       }
       return vecList;
    }
    public void insertMember(RegisterBean mem) {

 	   Connection conn = null;
 	   Statement stmt = null;
       ResultSet rs = null;
        try {
           conn = DriverManager.getConnection(JDBC_URL,USER,PASS);
           stmt =  conn.createStatement();
           stmt.executeUpdate("insert into membertbl values ("+ mem.getMemberID() +", "+ mem.getPassword() + ", "+ 
                   mem.getName() + "," + mem.getEmail() + ")" );

        } catch (Exception ex) {
           System.out.println("Exception" + ex);
        } finally {
           if(rs!=null)   try{rs.close();}  catch(SQLException e){}
 		  if(stmt!=null) try{stmt.close();}catch(SQLException e){}
 	      if(conn!=null) try{conn.close();}catch(SQLException e){}
        }
        return ;
     }
 }
private final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private final String JDBC_URL = "jdbc:mysql://127.0.0.1:3307/jsp?characterEncoding=utf-8";

먼저 com.mysql.jdbc.Driver 저장해주시고

jdbc:mysql://아이피:포트번호/DB명?characterEncoding=utf-8 이렇게 작성하시면 됩니다.

 

저기에선 localhost:3306이나 127.0.0.1:3307 인 것이죠

 	private final String USER = "root";
 	private final String PASS = "1234";

아이디를 USER에 넣고 비밀번호를 PASS에 넣습니다.

 

Class.forName(JDBC_DRIVER); 는 jar파일을 이용하는 과정입니다.

 

지금은 삽입과정이니까 삽입부분만 보도록 하겠습니다.

 

public void insertMember(RegisterBean mem) {

 	   Connection conn = null;
 	   Statement stmt = null;
       ResultSet rs = null;
        try {
           conn = DriverManager.getConnection(JDBC_URL,USER,PASS);
           stmt =  conn.createStatement();
           stmt.executeUpdate("insert into membertbl values ("+ mem.getMemberID() +", "+ mem.getPassword() + ", "+ 
                   mem.getName() + "," + mem.getEmail() + ")" );

        } catch (Exception ex) {
           System.out.println("Exception" + ex);
        } finally {
           if(rs!=null)   try{rs.close();}  catch(SQLException e){}
 		  if(stmt!=null) try{stmt.close();}catch(SQLException e){}
 	      if(conn!=null) try{conn.close();}catch(SQLException e){}
        }
        return ;
     }

DriverManager.getConnection(내가 연결할 서버, 아이디, 비밀번호)로 내가 만든 서버와 연결합니다.

DriverManager.getConnection(JDBC_URL,USER,PASS);

 

DB연결객체.createStatement();

conn.createStatement();

 

쿼리문을 작성할 장소를 만들어 줍니다.

 

stmt.executeUpdate("insert into membertbl values ("+ mem.getMemberID() +", "+ mem.getPassword() + ", "+ 
                   mem.getName() + "," + mem.getEmail() + ")" );

 

쿼리문 작성장소.executeUpdate("쿼리문") 이런식으로 작성하면 됩니다.

getMemberID(), getMemberPassword(), getMemberName(), getMemberEmail()을 이용해

회원가입에 적은 값을 불러와서 저장하면 됩니다. 쿼리문은 " 내용 " 으로 작성되어야 하니까 

더블쿼테이션을 많이 씁니다. mem.getMeberID()의 경우는 자바코드이기 때문에 더블 쿼테이션을 뺀 것이고요

 

이제 회원목록을 누르면 DB에 저장된 걸 SELECT문으로 불러오도록 하겠습니다.

 

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

<html>
<head><title>MEMBER 테이블 레코드 삽입</title></head>
<body>
<header>
	<%@ include file="topMenu.jsp" %>   
</header>
<contents>
	<%@ include file="viewMemberList.jsp"  %>
</contents>

</body>
</html>

memberList.jsp 입니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import= "java.sql.* , java.util.*, com.member.*" %>
<jsp:useBean class="com.member.RegisterMgr" id="regMgr" scope="session" />

MEMBMER 테이블의 내용
<table width="100%" border="1">
<tr>
	<td>아이디</td><td>비번</td><td>이름</td><td>이메일</td>
</tr>
<%
        Vector vResult= regMgr.getMemberList();
		
		for(int i=0; i<vResult.size(); i++){
		RegisterBean rs = (RegisterBean)vResult.get(i);
		%>
		<tr> 
		<td align="center"><%= rs.getMemberID() %></td>
		<td align="center"><%= rs.getPassword() %></td>
		<td align="center"><%= rs.getName() %></td>
		<td align="center"><%= rs.getEmail()%></td>
		
		</tr>
		<%}%>


</table>

viewMemberList.jsp 입니다.

 

public Vector getMemberList() {
	   Connection conn = null;
	   Statement stmt = null;
       ResultSet rs = null;
       Vector vecList = new Vector();
       try {
          conn = DriverManager.getConnection(JDBC_URL,USER,PASS);
          String strQuery = "select * from membertbl";
          stmt = conn.createStatement();
          rs = stmt.executeQuery(strQuery);
		  while (rs.next()) {
             RegisterBean regBean = new RegisterBean();
		 	 regBean.setMemberID (rs.getString("memberid"));
			 regBean.setPassword (rs.getString("password"));
 			 regBean.setName (rs.getString("name"));
 			 regBean.setEmail (rs.getString("email"));
             vecList.add(regBean);
          }
       } catch (Exception ex) {
          System.out.println("Exception" + ex);
       } finally {
          if(rs!=null)   try{rs.close();}  catch(SQLException e){}
		  if(stmt!=null) try{stmt.close();}catch(SQLException e){}
	      if(conn!=null) try{conn.close();}catch(SQLException e){}
       }
       return vecList;

똑같이 getConnection을 이용해 서버와 쓸 DB를 연결합니다.

createStatement쿼리문을 쓸 공간을 만들어주세요

executeQuery(쿼리문)SELECT문을 안에 작성합니다.

 

executeQuery문SELECT문을 쓸 경우에만 쓰고 나머지는 executeUpdate를 씁니다.

 

그 결과를 ResultSet이라는 걸로 주게 되는게 테이블에 대한 정보가 들어있는 자료형입니다.

그리고 getString을 이용해 해당 필드명에 있는 값을 가져올 수 있습니다.

그걸 지금 Vector에다가 regBean객체를 넣는 것입니다. 왜냐하면 값이 여러개 일테니깐요

 

Vector vResult= regMgr.getMemberList();
		
		for(int i=0; i<vResult.size(); i++){
		RegisterBean rs = (RegisterBean)vResult.get(i);
		%>
		<tr> 
		<td align="center"><%= rs.getMemberID() %></td>
		<td align="center"><%= rs.getPassword() %></td>
		<td align="center"><%= rs.getName() %></td>
		<td align="center"><%= rs.getEmail()%></td>
		
		</tr>
<%}%>

Vector에 받은 값은 인덱스 하나에 RegisterBean형식이기 때문에 하나씩 받아서 각각 출력시키는 형태입니다.

 

반응형
반응형
<%@ page contentType="text/html;charset=utf-8" %>

<html>
<head><title>MEMBER 테이블 레코드 삽입</title></head>
<body>

<form action="usingBean_insert.jsp" method="post">
	<table border="1">
		<tr>
			<td>아이디</td>
			<td><input type="text" name="memberid" size="10"></td>
			<td>암호</td>
			<td><input type="text" name="password" size="10"></td>
		</tr>
		<tr>
			<td>이름</td>
			<td><input type="text" name="name" size="10"></td>
			<td>이메일</td>
			<td><input type="text" name="email" size="10"></td>
		</tr>
		<tr>
			<td colspan="4"><input type="submit" value="삽입"></td>
		</tr>
	</table>
</form>
</body>
</html>

메인 페이지입니다.

package ch06.memberRegister;

public class RegisterBean {
	private String memberid;
	private String password;
	private String name;
	private String email;
	
	public String getMemberid() {
		return memberid;
	}
	public void setMemberid(String memberid) {
		this.memberid = memberid;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
} // private은 본인 클래스 내에서만 접근 가능
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import = "java.sql.*" %>
<%  request.setCharacterEncoding("utf-8");%>

<jsp:useBean class = "ch06.memberRegister.RegisterBean" id = "regBean" scope = "session"/>
<!-- 위는 이와 같다 RegisterBean regBean = new RegisterBean(); 
class는 src 자바파일을 의미함-->

<jsp:setProperty name = "regBean" property = "memberid" value = "chang"/>
<!-- 위는 이와 같다 regBean.memberid = "chang" 기본값이 chang 넘어온 거에서 값이 있으면 getProperty에서 바뀜-->

<jsp:setProperty name ="regBean" property = "*" />
<!-- insertForm에 name과 RegisterBean에 필드명하고 같아야한다 -> *를 쓰면 다 입력할 필요 없음 

	private String memberid;
	private String password;
	private String name;
	private String email;
	<input type="text" name="memberid" size="10"></td>....
-->

<html>
<head><title>삽입</title></head>
<body>
<h3>회원정보</h3>
<table bordercolor="#0000ff" border="1">
<tr>
   <td><strong>ID</strong></td>
   <td><strong>PASSWD</strong></td>
   <td><strong>NAME</strong></td>
   <td><strong>EMAIL</strong></td>
</tr>
<td> <jsp:getProperty property="memberid" name="regBean"/>  </td> <!-- regBean.memberid를 가져옴 -->
<td> <jsp:getProperty property="password" name="regBean"/> </td>
<td> <%= regBean.getName() %></td> <!-- regBean 객체를 만들었으니 거기에 있는 값을 가져온다 -->
<td> <%= regBean.getEmail() %> </td> <!-- inserForm name과 regBean.java에 필드명하고 같아야함 email = private String email -->
</tr>
</table>
 


</body>
</html>

 

자바빈 자바빈의 사용이유에 대해서 알아보겠습니다.

 

HTML안의 JAVA인 JSP로 웹 어플리케이션을 작성하다 보면 html 코드와 java 코드가 겹쳐지기 때문에 

가독성이 매우 떨어지게 됩니다. (스크립트릿으로 작성된 걸 의미)

또, JSP 페이지에 뷰(View)와 로직(Logic)을 공존시키면 코드의 재사용성도 현저히 떨어집니다.

JSP라는 녀석이 본래 View의 역할을 담당하기 때문에 이를 분리하여 

빈으로 작성하는 것이 코드의 가독성과 재사용성을 높이는 것이 좋습니다. 

 

이러한 이유로 JavaBean이라고 불리게 되는 것입니다.

 

일단 src에는 클래스를 만드는 곳이죠 여기에는 자바코드가 들어가게 되는 곳입니다.

직접 스크립트릿으로 로직을 짜는게 아니라 여기에서 로직을 짜서 이용할 수 있게 만드는 것이죠

일단 간단하게 id, password, name, email의 getter와 setter를 만들어서 사용해보겠습니다.

 

<jsp:useBean class = "ch06.memberRegister.RegisterBean" id = "regBean" scope = "session"/>

jsp:useBean을 이용해 우리가 만든 클래스를 사용한다고 선언을 해줘야합니다. 

class에는 경로를 적어줍니다. 자기가 만든 경로와 동일하게 적어주시면 됩니다.

scope영역을 지정할 수 있고 id객체명을 지정해줄 수 있습니다.

 

이걸로 RegisterBean 클래스의 regBean라는 객체를 생성한 것과 동일하다고 생각하시면 됩니다.

 

그리고 여기에서 선언한 변수명은 메인페이지의 name과 똑같이 만들어야합니다.

 

<jsp:setProperty name = "regBean" property = "memberid" value = "chang"/>

<jsp:setProperty name = "useBean에서 설정한 name" property = "저장된 변수" value ="defualt값">

 

<jsp:setProperty name ="regBean" property = "*" />

또한 이렇게 property에 *를 쓰면 자동적으로 RegisterBean.java의 변수를 사용할 수 있게 됩니다.

 

<jsp:getProperty property="memberid" name="regBean"/>

<jsp:getProperty property ="저장된 변수" name = "useBean에서 설정한 name"/>

이걸 통해 저장된 변수를 출력할 수 있습니다.

 

<%= regBean.getName() %>

이런식으로 스크립트릿으로 사용도 가능합니다. 하지만 이렇게 쓰면 useBean을 쓰는 이유가 없죠

로직과 뷰를 구분하기 위해서 쓰는 것인데 말이죠

반응형
반응형
<%@ 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>
	<%-- page 영역(pageContext)[1개 JSP파일] <= 
		 request 영역(request)[1개 화면에 해당되는 크기] <
		 session 영역(session)[[웹브라우저영역]  <
		 application 영역[그 상위버전 새 브라우저 열어도 남아있음, 서버에 남아 있어서](application) 
	--%>
	<h5> 4개의 영역과 속성 알아보기</h5>
	
	<% application.setAttribute("testId", "Yongmi"); %> 
	<%-- testId(속성) = "Yongmi" 
	pageContext는 jsp 한 페이지기 때문에 범위를 굳이 안 해줘도 된다 --%>  
	<form method = "post" action = "second.jsp">
		<input type ="submit" value = "2번째 페이지로">
	</form>
</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> 2번째 페이지</h1>

<h3> setAttribute 내용 : <%= (String)application.getAttribute("testId") %> </h3>
<h3> setAttribute 내용 : <%= (String)application.getAttribute("wrongAttribute") %> </h3>
<%-- index에 선언한 session 범위 testId를 가져올때 사용 법 --%>

</body>
</html>

지금까지 name을 이용해 getParameter로 값을 받았습니다.

이번에는 변수를 선언하는 거처럼 값을 넘기는 걸 배우도록 하겠습니다.

 

JSP에는 페이지에 대한 영역이라는게 있는데 총 4개가 있습니다.

page 영역(pageContext)[1개 JSP파일] <= 
request 영역(request)[1개 화면에 해당되는 크기] <
session 영역(session)[[웹브라우저영역]  <
application 영역[그 상위버전 새 브라우저 열어도 남아있음, 서버에 남아 있어서](application)

📝1. page 영역

page영역으로 값을 선언하면 그 값은 그 JSP페이지에서만 남아 있습니다.

굳이 이러한 방법을 쓸 필요가 없이 그냥 스크립트릿으로 선언하던가 선언문으로 선언하면 되기 때문에

이 영역은 잘 안 쓰이게 됩니다.

 

📝2. request 영역

request영역으로 값을 선언하면 그 값은 1개 화면에 그 변수를 쓸 수 있습니다.

그 화면에는 JSP파일이 여러개로 만들어 졌을수도 1개로 이루어졌을 수도 있습니다. (모듈화 이야기)

 

📝3. session 영역

session영역으로 값을 선언하면 그 값은 웹브라우저내에 계속 남아있습니다.

웹브라우저 영역이라는 건 구글 크롬을 키고 새 페이지를 열고 어디 페이지를 가든 남아있다는 소리입니다.

예시를 들자면 로그인 해놓고 다른 작업을 하다 새페이지를 키고 다시 거기로 들어가면 로그인이 되어있는 거라고

이해하시면 이해하기 쉬울 것입니다.

 

📝4. application 영역

application영역으로 값을 선언하면 그 값은 서버내에 계속 남아있습니다. 

서버를 끄지 않는 이상 그 값은 계속 남아있죠 예를 들자면 크롬을 껏다켜도 서버가 켜져있기 때문에

그 값은 사라지지 않습니다. 우리가 지금 하는 작업으로는 톰캣을 껐다켜야지면 그 값이 사라지게 되는 것이죠

 

 

이제 선언하는 법에 대해서 알아보도록 하겠습니다.

 

영역.setAttribute("속성명", "속성값");

<% application.setAttribute("testId", "Yongmi"); %> 

이런식으로 선언하면 됩니다.

 

(형변환)영역.getAttribute("속성명")

<%= (String)application.getAttribute("testId") %>

이렇게 속성값을 출력하거나 가져올 수있습니다.

또한 만약 속성명이 없다고 해도 에러가 나오는게 아니라 null값을 출력해줍니다.

반응형
반응형
<%@ 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>
<link rel = "stylesheet" href="05style.css">
</head>
<body>

<header> <!-- 상단 부분  -->
	<%@ include file= "05top.jsp" %>
	<% out.println(a); %>	
	<%-- top.jsp에 코드를 카피해서 가져와서 실행 <%@ 지시문이라서 강하기 때문에 코드 카피 --%>
</header>

<section> <!-- linear layout과 유사 여러개 사용 가능 -->
	<h2> 메인 페이지입니다. </h2>
</section>

<footer> <!-- 하단 부분 -->
	<jsp:include page = "05footer.jsp" flush = "false"/>
	<%-- 액션태그는 해당 footer.jsp로 가서 실행후 다시 돌아감 main으로 돌아감
	main에 선언한 a변수가 있으면 그 a변수를 출력하라는 footer.jsp에 적어둬도 사용 불가
	--%>
	<% out.println(a); %>
	
</footer>

</body>
</html>

main 페이지입니다.

 

 

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

<h4> 메뉴 : <a href="05main.jsp">홈</a>   <a href="05sub1.jsp">학과소개</a>  커뮤니티  오시는 길</h4>
<% int a  = 6;%>

top.jsp 입니다.

 

<%@ page contentType = "text/html; charset=utf-8" %>

<p>
Copyright DONGYANG All Rights Reserved.
</p>

footer.jsp 입니다.

 

<%@ 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>
<link rel = "stylesheet" href="05style.css">
</head>
<body>

<header>
	<jsp:include page = "05top.jsp" flush = "false"/>
	<%-- <% out.print(a); %> --%>
</header>

<section>
	<h2> 첫번째 서브페이지입니다!!!!! </h2>
</section>

<footer>
	<jsp:include page = "05footer.jsp" flush = "false"/>
	<%-- <% out.print(a); %> --%>
</footer>

</body>
</html>

sub.jsp 입니다.

 

모듈로 만드는 이유관리하기가 쉽고 유지보수할 때 다 뜯어 고칠 필요 없이 해당 부분만 고치면 되기 때문입니다.

또한 Top.jsp와 Footer.jsp같이 고정적인 부분한 페이지로 돌려 쓸 수 있어서 파일의 양도 줄일 수 있습니다.

 

이렇게 jsp파일을 불러오는 방법은 2가지가 있습니다.

 

1. <%@ include file = "페이지" %>

   <%@ include file= "05top.jsp" %>

 

2. <jsp:include page = "페이지" />

   <jsp:include page = "05footer.jsp" flush = "false"/>

 

이 둘의 차이점이 있는데 include file의 경우 main페이지에서 쓰였습니다.

Top.jsp를 보면 <% int a = 6; %> 가 있는데 include file의 경우 Top.jsp코드를 직접 가져와서 직접 실행시켜서

그 결과물을 가져오기 때문에 a값이 남아있어서 out.print(a)를 했을 때 값이 나오게 된 것이죠

 

하지만 jsp:include page의 경우 Top.jsp의 출력된 결과화면만 가져오기 때문a값이 남아있지 않아서

변수가 없다고 에러가 나오게 됩니다.

반응형