210513_1(jsp내부객체 application, exception, Bean프로그래밍)
Application
웹어플(웹프로젝트) : 에 대한 정보를 담고 있는 객체
application.getMimeType(""); 서버가 인식할수 있는 문서 종류. 원래 메일 보낼대, 내용을 encode하는 방식
application.getRealPath("/"); 웹경로를 물리적경로(시스템경로)로 변환해줌
application.log("로그남기기"); 개발시, 운영시, 접속정보, 오류... 찾을때
마임타입 mimetype
MIME 이란?
Multipurpose Internet Mail Extensions의 약자로 간단히 말하면 파일 변환을 의미한다.현재는 웹을 통해 여러 형태의 파일을 전달하는데 사용하고 있지만 이 용어가 생길 땐 이메일과 함께 동봉할 파일을 텍스트 문자로 전환해서 이메일 시스템을 통해 전달하기 위해 개발되어 Internet Mail Extensions라고 불리기 시작했다고 한다.
MIME 사용 이유
예전에는 텍스트 파일을 주고 받는데에 ASCII로 공통된 표준에 따르기만 하면 문제가 없었으나 네트워크를 통해 ASCII가 아닌 바이너리 파일을 보내는 경우가 생기게 되었다. 음악파일, 무비파일, 워드파일 등등 ASCII만으로는 전송이 안되기 때문에 기존 시스템에서 문제 없이 전달하기 위해서는 텍스트로의 변환이 필요했다.
텍스트 파일로 변환하는 것을 인코딩(Encoding), 텍스트 파일을 바이너리 파일로 변환하는 것을 디코딩(Decoding)이라고 한다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
String serverInfo = application.getServerInfo();
//서버정보
String mimeType = application.getMimeType("RequestExample1.html");
//
String realPath = application.getRealPath("/");
//웹경로를 물리적경로(시스템경로)로 변환해줌
application.log("application 내부 객체 로그 테스트");
//로그 남기기
%>
<h1>Application Example1</h1>
서블릿 컨테이너의 이름과 버전 :
<%=serverInfo%><p>
RequestExample1.html의 MIME Type :
<%=mimeType%>
<p>
로컬 파일 시스템 경로 :
<%=realPath%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR" info="jSPStudy" %>
<!DOCTYPE html>
<%
String pageInfo = this.getServletInfo();
//현재페이지의 인포값
%>
<h1>Page Example1</h1>
현재 페이지의 info 값 : <%=pageInfo %>
exception
<%@ errorPage="ExceptionExample2.jsp %>에러페이지는 ExceptionExample2.jsp에서 처리한다
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR" errorPage="ExceptionExample2.jsp"%>
<!-- errorPage="ExceptionExample2.jsp 에러페이지는 여기서 처리한다 -->
<%
out.flush();
int one =1;
int zero = 0;
%>
<h1>Exception Example1</h1>
one/zero = <%=one/zero %><p>
<%@ isErrorPage="true"%> 예외를 처리하는 페이지이다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR" isErrorPage="true"%>
<!-- isErrorPage="true"예외를 처리하는 페이지이다. -->
<%
String message = exception.getMessage();
String objectMessage = exception.toString();
%>
<h1>Exception Example1</h1>
에러 메시지:<br>
<b><%=message%></b><br>
에러 실체의 클래스명과 에러 메시지 :<br>
<b><%=objectMessage%></b><br>
<p>
웹 프로그램 구조
1) 기본방식 | 핵심: 모든 처리내용을 jsp문서 내부에서 처리해서 결과만 html+js+css+정보형태로 클라이언트에게 정송한다 | **모든 처리 내용이 JSP내부에 존재** 디자인+프로그램+ 쿼리 등이 동일파일에 존재 |
서로의 영역구별이 모호해지고 작업범위의 충돌발생 가능성 | 결론 : 중급 이상 프로젝트 작업에 불리하고, 소규모 사이트에 적합 |
웹브라우저 | 웹서버 | 디비서버 | ||
1. 글목록요청 화면처리 |
----------------------> <----------------------- |
JSP 요청받음 연동 쿼리작성 실행---------------> 결과처리<----------- html+js+css+정보 =>JSP |
-----------------------> <----------------------- |
분석,권한,컴파일 컴파일된SQL실행 쿼리결과 |
2) Bean이용 / model1 | 디자인 부분과 프로그램 부분이 분리 되기 시작함. 프로젝트형 작업에 더 적합해짐. | Bean은 java파일이며, jsp와 java 영역사이에서 데이타를 전달해 주는 아주 중요한 역할을 한다. |
||
1. 글목록요청 화면처리 |
----------------------> <----------------------- |
JSP 요청받음 java :연동 java : 쿼리작성 java :실행-----------> java : 결과처리<------- java:bean==변수+setter+getter로구성 VO,DTO JSP : html+js+cs++정보 |
-----------------------> <----------------------- |
분석,권한,컴파일 컴파일된SQL실행 쿼리결과 |
3) Bdea이용+servelet / model2 (MVC패턴) | ||||
4) Bean이용 +servelet+framework(spring) |
TestBean 디자인이 없을때 bean활용
package testweb;
public class TestBean { // Bean을 DTO, VO로 부르기도 함
private String name ;
private int age;
//가장좊은 의미의 bean이다
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR" import="testweb.TestBean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
TestBean tb = new TestBean(); //인스턴스화 한다.
tb.setName("홍길동");
tb.setAge(30);
%>
<%=tb.getName() %><br>
<%=tb.getAge() %><br>
</body>
</html>
디자인이 있을경우 bean 활용
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>디자인이 있는 경우 bean 활용</title>
</head>
<body>
문서의 가독성을 향상시키기 위해서 액션 태그를 활용한다.
<!-- bean 인스턴스생성 액션 태그 -->
<jsp:useBean id="tb" class="testweb.TestBean" scope="page"/>
<!-- 사용은 가능하나, 추천하는방법은 아니다. -->
<%-- <%
tb.setName("이순신");
tb.setAge(45);
%>
<%=tb.getName();%>
<%=tb.getAge(); %> --%>
<!-- bean에 값 저장하기 -->
<jsp:setProperty property="name" name="tb" value="홍길동"/>
<jsp:setProperty property="age" name="tb" value="30"/>
<!-- bean에서 꺼내기 -->
<jsp:getProperty property="name" name="tb"/><br>
<jsp:getProperty property="age" name="tb"/><br>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<jsp:useBean id="test" class="chapter7.SimpleBean" scope="page"/>
<!-- scope="page" 영역정도를 나타냄 page,session,request,application -->
<jsp:setProperty name="test" property="message" value="빈을 쉽게 정복하자!"/>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>간단한 빈 프로그래밍</h1>
Message : <jsp:getProperty property="message" name="test"/>
</body>
</html>
package chapter7;
public class SimpleBean {
private String message="";
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message=message;
}
}
액션태그 useBean, setProperty, getProperty 활용연습
액션태그의 역할 : 문서의 가독성을 높인다. 실체처리과정이 감추어져 있으므로 보안도 높아진다.
<jsp:setProperty property="*" name="빈이름"/>
'*' :앞에 폼값들이 넘어오는 경우 한번에 모든 setter를 호출하여 빈에 저장함
-------------------style.css 디자인-스타일시트
-------------------script.js 유효성 검사 이벤트 처리 -자바스크립트 파일
-------------------Register.jsp 가입폼
요소의 이름과
-------------------RegisterBean.java 저장빈
빈의 변수명을 일치
-------------------RegisterProc.jsp 확인폼
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원가입</title>
<link href="style.css" rel="stylesheet" type="text/css">
<!-- css포함 -->
<script language="JavaScript" src="script.js"></script>
<!-- js포함 -->
</head>
<body bgcolor="#996600">
<table width="80%" align="center" border="0" cellspacing="0" cellpadding="5">
<tr>
<td align="center" valign="middle" bgcolor="#FFFFCC">
<table width="90%" border="1" cellspacing="0" cellpadding="2" align="center">
<form name="regForm" method="post" action="RegisterProc.jsp">
<tr align="center" bgcolor="#996600">
<td colspan="3"><font color="#FFFFFF"><b>회원가입</b></font></td>
</tr>
<tr>
<td width="24%">아이디</td>
<td width="35%"><input type="text" name="mem_id" size="15"></td>
<td width="41%">아이디를 적어 주세요.</td>
</tr>
<tr>
<td>패스워드</td>
<td><input type="password" name="mem_passwd" size="15"></td>
<td>패스워드를 적어주세요.</td>
</tr>
<tr>
<td>패스워드확인</td>
<td><input type="password" name="mem_repasswd" size="15"></td>
<td>패스워드를 확인합니다.</td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" name="mem_name" size="15"></td>
<td>고객실명을 적어주세요</td>
</tr>
<tr>
<td>이메일</td>
<td><input type="text" name="mem_email" size="27"></td>
<td>이메일을 적어주세요</td>
</tr>
<tr>
<td>전화번호</td>
<td><input type="text" name="mem_phone" size="20"></td>
<td>연락처를 적어주세요</td>
</tr>
<tr>
<td colspan="3" align="center">
<input type="button" value="회원가입" onclick="inputCheck()">
<!-- 유효성검사 -->
<input type ="reset" value="다시쓰기">
</td>
</tr>
</form>
</table>
</td>
</tr>
</table>
</body>
</html>
function inputCheck(){
if(document.regForm.mem_id.value==""){
alert("아이디를 입력해 주세요");
document.regForm.mem_id.focus();
return;
}
if(document.regForm.mem_passwd.value==""){
alert("비밀번호를 입력해 주세요");
document.regForm.mem_passwd.focus();
return;
}
if(document.regForm.mem_repasswd.value==""){
alert("비밀번호를 입력해 주세요");
document.regForm.mem_repasswd.focus();
return;
}
if(document.regForm.mem_name.value==""){
alert("이름을 입력해주세요");
document.regForm.mem_name.focus();
return;
}
if(document.regForm.mem_email.value==""){
alert("이메일을 입력해주세요");
document.regForm.mem_email.focus();
return;
}
if(document.regForm.mem_phone.value==""){
alert("연락처를 입력해주세요");
document.regForm.mem_phone.focus();
return;
}
if(document.regForm.mem_passwd.value != document.regForm.mem_repasswd.value){
alert("비밀번호가 일치하지 않습니다.");
document.regForm.mem_repasswd.focus();
return;
}
document.regForm.submit();
}
package chapter7;
public class RegisterBean {
private String mem_id;
private String mem_passwd;
private String mem_name;
private String mem_email;
private String mem_phone;
public String getMem_id() {
return mem_id;
}
public void setMem_id(String mem_id) {
this.mem_id = mem_id;
}
public String getMem_passwd() {
return mem_passwd;
}
public void setMem_passwd(String mem_passwd) {
this.mem_passwd = mem_passwd;
}
public String getMem_name() {
return mem_name;
}
public void setMem_name(String mem_name) {
this.mem_name = mem_name;
}
public String getMem_email() {
return mem_email;
}
public void setMem_email(String mem_email) {
this.mem_email = mem_email;
}
public String getMem_phone() {
return mem_phone;
}
public void setMem_phone(String mem_phone) {
this.mem_phone = mem_phone;
}
}
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<%
request.setCharacterEncoding("euc-kr");
%>
<jsp:useBean id="regBean" class="chapter7.RegisterBean" scope="page"/>
<jsp:setProperty name="regBean" property="*" /><!-- 모든 setter를 실행하라. -->
<html>
<head>
<meta charset="EUC-KR">
<title>회원가입 확인</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script language="JavaScript" src="script.js"></script>
</head>
<body bgcolor="#996600">
<table width=80%" align="center" border="0" cellspaving="0" cellpadding="5">
<tr>
<td align="center" valign="middle" bgcolor="#FFFFCC">
<table width="90%" border="1" cellspacing="0" cellpadding="2" align="center">
<form name="regForm" method="post" action="MemberInsert.jsp">
<tr align="center" bgcolor=#996600">
<td colspan="3"><font color="#FFFFFF"><b>
<jsp:getProperty property="mem_name" name="regBean"/>
회원님이 작성하신 내용입니다. 확인해 주세요</b></font></td>
</tr>
<tr>
<td width="24%">아이디</td>
<td width="41%"><jsp:getProperty property="mem_id" name="regBean"/></td>
</tr>
<tr>
<td>패스워드</td>
<td><jsp:getProperty property="mem_passwd" name="regBean"/></td>
</tr>
<tr>
<td>이름</td>
<td><jsp:getProperty property="mem_name" name="regBean"/></td>
</tr>
<tr>
<td>이메일</td>
<td><jsp:getProperty property="mem_email" name="regBean"/></td>
</tr>
<tr>
<td>전화전호</td>
<td><jsp:getProperty property="mem_phone" name="regBean"/></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="button" value="확인완료">
<!-- 아무런 기능이 없다 -->
<input type="button" value="다시쓰기" onClick="history.back()">
<!-- 이전페이지로 돌아가라. -->
</td>
</tr>
</form>
</table>
</td>
</tr>
</table>
</body>
</html>
좀더 자세한 디자인가능 CSS
/* .은 class를 말한다 */
.d1{ width: 90%; height=90%; border:1px solid green;
background-color:silver;}
.d1{ width: 80%; height=80%; border:1px solid red;
background-color:#b87ebe;}
/* #은 id를 말한다. : 본래js 요소구별용*/
table{border-color:red; border-width:5px;}
td{font-size:12px; color: maroon;}