1. JSP 소개
JSP(Java Server Pages)는 HTML 페이지에 Java 언어를 추가하여 동적 페이지를 생성하는 기술로, 새로운 태그(<%, %>,...)가 추가됩니다.
JSP는 Java 및 Servlet을 기반으로 개발된 동적 웹 페이지 생성 기술로, 기본 구현은 Java Servlet입니다.
JSP 페이지는 HTML 코드와 여기에 포함된 Java 코드로 구성됩니다. 서버는 클라이언트가 페이지를 요청한 후 이러한 Java 코드를 처리한 다음 생성된 HTML 페이지를 클라이언트 브라우저에 반환합니다.
2. JSP 실행 과정 클라이언트가 JSP 페이지 요청 -> JSP Parser가 *.jsp를 구문 분석하여 *.java로 컴파일 -> javac 명령으로 *.class로 컴파일 -> 클래스 파일 실행 -> 응답하여 결과를 다음으로 반환 클라이언트
JSP 코드에는 JSP 요소와 템플릿 데이터라는 두 가지 범주가 포함됩니다. 템플릿 데이터란 JSP 엔진이 처리하지 않는 부분, 즉 <%...%> 태그 이외의 부분은 JSP 엔진이 아무런 처리 없이 직접 전달하는 부분을 말한다.
JSP를 처음 실행하거나 JSP 파일을 수정한 후 JSP Parser를 호출하여 *.jsp 파일을 서블릿 프로그램으로 컴파일하므로 속도가 느려집니다.
3. JSP 기본 구문
1. 두 가지 주석 유형
(1) HTML 주석 JSP 코드에 주석을 추가할 수 있습니다. 이 주석은 클라이언트로 전송되지만 페이지에는 표시되지 않습니다.
<!-- 클라이언트에서 소스 코드를 볼 때 표시되는 HTML 형식의 주석 -->
<!-- 이 댓글은 <%=programmer%>에 의해 추가되었습니다-->
프로그래머가 해커인 경우 클라이언트에 반환되는 주석은 <!-- 이 주석은 해킬러가 추가한 것입니다 -->
(2) JSP 주석은 JSP 코드로 작성되지만 클라이언트로 전송되지는 않습니다.
<%-- JSP 주석, 이 주석은 JSP 컴파일 시 무시됩니다 --%>
<%-- /*Scriptlet의 여러 줄 주석*/ --%>
<%-- /**javadoc를 사용하여 Java 파일에서 추출할 수 있는 Scriptlet의 여러 줄 주석*/ --%>
<%-- JSP 한 줄 주석--%>
2. 3개의 스크립트 요소
(1) 전역변수 선언
<%! int i=0; 문자열 str="안녕하세요!" %>
(2)표현
JSP 코드에서 표현식은 어디에나 있을 수 있는 변수의 값을 출력하는 데 자주 사용됩니다.
<%! int a=1; 문자열 str="안녕하세요!" %>
<%=a+b%> <%=str>
추신: ";" 기호를 표현식의 종결자로 사용할 수 없습니다. 그러나 Scriptlet에서는 동일한 표현식이 세미콜론으로 끝나야 합니다.
(3)스크립틀릿
스크립트 세그먼트는 유효한 Java 프로그램 세그먼트를 포함하는 데 사용됩니다.
<% int b=3; 지역변수
3. 3개의 명령 요소
(1)페이지 명령
<%@ 페이지 contentType="text/html;charset=utf-8"%>
언어, 확장, 가져오기, 세션, 버퍼, 자동 플러시, isThreadSafe, 정보, errorPage, isErrorPage, contentType(서버에서 클라이언트로의 출력 형식)을 포함하여 JSP 파일의 전역 속성을 정의합니다.
위치는 페이지 어느 곳에나 위치할 수 있지만 페이지 상단에 배치하는 것이 좋습니다.
언어: 스크립팅 언어의 유형을 선언합니다. 현재는 "java"만 사용할 수 있습니다.
확장: JSP를 컴파일할 때 추가해야 하는 Java 클래스의 전체 이름을 나타냅니다. JSP의 컴파일 기능을 제한하므로 주의해서 사용하세요!
import: 가져와야 하는 Java 패키지 목록입니다.
세션: 클라이언트에 HTTP 세션이 필요한지 여부를 설정합니다. 기본값은 true입니다.
버퍼: 버퍼의 크기는 실행된 JSP의 출력을 클라이언트 브라우저로 처리하기 위해 out 객체에서 사용됩니다. 기본값은 8Kb입니다.
autoFlush: 버퍼 오버플로 시 강제 출력 여부를 설정합니다. true(기본값)로 정의하면 출력이 정상이고, false로 정의하면 예상치 못한 오류가 발생합니다.
isThreadSafe: JSP 파일을 다중 스레드에서 사용할 수 있는지 여부를 설정합니다. 기본값은 true입니다.
정보: 텍스트 정보입니다. Servlet.getServletInfo() 메소드를 사용하여 검색할 수 있습니다.
errorPage: 예외 이벤트를 처리하는 JSP 파일 설정
sErrorPage: 이 페이지가 예외 이벤트를 처리하는 페이지인지 여부를 설정합니다. true로 설정하면 예외 개체를 사용할 수 있습니다.
contentType: MIME 유형 및 문자 인코딩 세트를 설정합니다. 기본 MIME 유형은 text/html이고 기본 문자 집합은 charset=ISO-8859-1입니다.
한 페이지에서 여러 < %@page %> 지시문을 사용할 수 있지만 가져오기 속성을 제외한 다른 속성은 한 번만 사용할 수 있습니다.
기본적으로 JSP로 가져온 패키지 다음 패키지는 JSP 컴파일 중에 가져왔으므로 JSP 파일에 도입하기 위해 페이지 지시문을 사용할 필요가 없습니다.
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
(2) 지시문을 포함
HTML 코드
<%@ 포함 파일 = "상대 경로" %>
JSP에 정적 파일을 포함하고 이 파일의 JSP 문을 구문 분석하려면 include 지시문을 사용합니다.
경로가 "/"로 시작하는 경우 이 경로는 주로 jsp 애플리케이션의 컨텍스트 경로를 나타냅니다.
경로가 파일 이름이나 파일 디렉터리로 열린 경우 이 경로는 사용 중인 JSP 파일의 현재 경로입니다.
(3)taglib 명령
HTML 코드
<%@ taglib uri = "TagLibrary" 접두사 = "mypfx" %>
taglib 지시문을 사용하여 태그 라이브러리와 해당 사용자 지정 접두사를 정의합니다.
uri: URL(Uniform Resource Identifier)은 상대 경로 또는 절대 경로일 수 있는 레이블의 접두사를 기반으로 사용자 지정 레이블의 이름을 고유하게 지정합니다.
접두사: 사용자 정의 라벨의 접두사입니다. jsp, jspx, java, javax, servlet, sun, sunw를 접두사로 사용하지 마십시오. 이들은 Sun에서 예약한 것으로 선언되었습니다.
4. 8가지 액션 명령
(1) 페이지 점프: <jsp:forward>
<jsp:forward> 태그는 한 jsp 파일에서 다른 jsp 파일로 사용자 요청이 포함된 요청 객체를 전달합니다.
총 2개의 속성이 포함되어 있습니다.
페이지 속성은 전달될 파일이나 URL을 설명하는 표현식이나 문자열입니다.
<jsp:param>하나 이상의 매개변수를 동적 파일로 보냅니다. <jsp:param> 태그를 사용하는 경우 대상 파일은 동적 파일(예: Servlet 또는 JSP 등)이어야 합니다.
HTML 코드
<jsp:앞으로 페이지=test.jsp>
<jsp:param name="사용자 이름" value="<%=user%>"/>
<jsp:param name="password" value="12345678"/>
</jsp:앞으로>
request.getParameter("username")을 통해 사용자 이름을 가져옵니다.
(2)포함 페이지: <jsp:include>
<jsp:include>를 사용하면 정적 및 동적 웹 리소스를 포함할 수 있으며 이 두 가지 포함 결과는 다릅니다.
정적 파일만 포함된 경우 이 포함은 < %@include% >와 유사하게 포함된 파일의 내용만 JSP 파일에 추가합니다.
동적 웹 리소스가 포함된 경우 포함된 파일도 JSP 컴파일러에 의해 실행됩니다.
이 포함 파일이 동적인 경우 <jsp:param>을 사용하여 매개변수 및 매개변수 값을 전달할 수도 있습니다.
(3) 빈 생성: <jsp:useBean>
Bean 인스턴스를 생성하고 이름과 범위를 지정합니다.
<jsp:useBean id="beanInstanceName" range="page|request|session|application" class="package.className"/>
5개의 속성을 포함합니다.
id: 정의된 범위 내에서 Bean 변수를 확인하고, 프로그램에서 해당 Bean 인스턴스를 사용하기 위해 해당 ID를 사용합니다. id 값은 대소문자를 구분합니다.
Scope: Bean이 존재하는 범위와 id 변수명의 유효한 범위입니다. 기본값은 페이지입니다.
class: 클래스에서 빈을 인스턴스화하려면 new 키워드와 클래스 생성자를 사용하세요. 클래스는 추상일 수 없으며 인수가 없는 공개 생성자를 가져야 합니다.
type: 이 Bean이 지정된 범위에 이미 존재하는 경우 type을 사용하면 이 Bean에 데이터 유형이 할당됩니다. class나 beanName 없이 type을 사용하면 bean이 인스턴스화되지 않습니다.
beanName: beanName은 문자열 package.class 또는 jsp 표현식일 수 있으며 해당 값은 Beans.instantiate 메소드에 전달됩니다. type의 값은 beanName, 해당 기본 클래스 또는 구현하는 인터페이스와 동일할 수 있습니다.
(4) Bean 속성 설정: <jsp:setProperty>
<jsp:setProperty name="beanInstanceName" property="*"|property="propertyName" value="string|<%=expression%>"|param="parameterName"/>
name: <jsp:useBean>에 생성된 Bean 인스턴스의 이름, 즉 id를 나타낸다.
property: Bean의 속성을 일치시킵니다.
param: 요청 객체의 매개변수 이름을 참조하고, 해당 값을 Bean 속성에 설정합니다.
value: 지정된 값을 사용하여 Bean 속성을 설정합니다. 이 값은 문자열이거나 표현식일 수 있습니다. 문자열인 경우 Bean 속성의 유형으로 변환됩니다(예를 들어 "0.98"은 double 유형 0.98로 변환됩니다). 표현식인 경우 해당 유형은 Bean 속성 유형과 일치해야 합니다.
추신: Param 속성과 값 속성은 동일한 <jsp:setProperty>에서 동시에 사용할 수 없습니다.
(5) Bean 속성 가져오기: <jsp:getProperty>
기존 Bean 객체의 속성값을 가져와서 페이지에 표시합니다.
<jsp:getProperty name="beanInstanceName 속성="propertyName"/>
name: 기존 객체 인스턴스와 동일한 이름입니다.
property: 객체의 속성 이름
(6) 애플릿 플러그인 사용: <jsp:plugin>
HTML 코드
<jsp:plugin type="applet" code="MeidaPlay.class" codebase="../classes">
<jsp:파르마스>
<jsp:param name="way" value="Hall"/>
</jsp:params>
<jsp:대체>
<p>애플릿을 로드할 수 없습니다!</p>
</fallback>
</jsp:플러그인>
Applet이나 Bean을 삽입하려면 <jsp:plugin>을 이용하고, 필요하다면 Java Plug-in을 다운로드하여 실행한다.
(7) 매개변수 정의: <jsp:param>
<jsp:include>, <jsp:forward>, <jsp:plugin>에서 사용할 수 있습니다.
(8) 플러그인 오류 메시지: <jsp:fallback>
<jsp:plugin> 플러그인이 정상적으로 표시되지 않는 경우 프롬프트 메시지가 표시됩니다.
3. JSP 내장 객체
1. 요청(Request): 요청 객체입니다. 이 객체는 사용자가 제출한 정보를 캡슐화합니다. 캡슐화된 정보는 객체의 해당 메소드를 호출하여 얻을 수 있습니다.
요청 개체가 고객이 제출한 한자를 획득하면 문자가 깨져서 나타나므로 특수한 처리를 수행해야 합니다.
일반적으로 사용되는 방법:
getParameter(String parameterName): 양식 제출 정보를 가져옵니다.
getProtocol(): 고객이 사용하는 프로토콜을 가져옵니다.
getServletPath(): 고객이 정보를 제출한 페이지를 가져옵니다.
getMethod(): 고객이 제출한 정보를 가져오는 방법입니다.
getHeader(String str): HTTP 헤더 파일에서 accept, accept-encoding 및 Host 값을 가져옵니다.
getRermoteHost(): 고객의 IP 주소를 가져옵니다.
getServerName: 서버 이름을 가져옵니다.
getServerPort: 서버의 포트 번호를 가져옵니다.
getParameterNames(): 클라이언트가 제출한 모든 매개변수의 이름을 가져옵니다.
2. 응답: 응답 개체는 클라이언트의 요청에 동적으로 응답하고 클라이언트에 데이터를 보냅니다.
(1) contentType 속성에 동적으로 응답합니다. 페이지 명령을 사용하여 페이지의 contentType 속성을 동적으로 설정하는 경우 response.setContextType("text/html;charset=utf-8")을 사용합니다.
(2)응답 리디렉션
response.sendRedirect("index.jsp");
3. 세션: 세션 객체
(1) 세션 객체란 무엇입니까?
Session 객체는 세션 관리를 완료하기 위해 첫 번째 JSP 페이지가 로드될 때 자동으로 생성됩니다.
클라이언트가 브라우저를 열고 서버에 연결할 때 시작되고 클라이언트가 브라우저를 닫고 서버를 떠날 때 종료됩니다.
(2) 세션 객체의 ID
고객이 처음으로 서버의 JSP 페이지를 방문하면 JSP 엔진은 Session 객체를 생성하고 String 유형의 ID 번호를 할당합니다. 또한 JSP 엔진은 이 ID 번호를 클라이언트에 전송하고 이를 쿠키에 저장합니다. 클라이언트가 브라우저를 닫을 때까지는 클라이언트의 Session 객체가 서버에 의해 수정되지 않고 클라이언트와의 세션 통신이 사라집니다.
(3)공통적인 방법
public String getId(): Session 객체의 번호를 가져옵니다.
public void setAttribute(String str,Object obj): Session 객체에 매개변수 객체를 추가합니다.
public Object getAttribute(): 속성 이름을 기반으로 Session 객체의 속성을 가져옵니다.
public boolean isNew(): 신규 고객인지 확인합니다.
4. 응용 프로그램: 응용 프로그램 개체
(1)Application 객체란 무엇인가요?
이 Application 개체는 서버가 시작된 후 생성됩니다. 고객이 방문한 웹 사이트의 여러 페이지를 탐색할 때 Application 개체는 동일하며 모든 고객이 이 내장된 Application 개체를 공유합니다.
(2)공통적인 방법
setAttribute(String key,Object obj): 매개변수 개체를 Application 개체에 추가합니다.
getAttibute(String key): 속성 이름을 기반으로 Application 객체의 속성을 가져옵니다.
5. Out: 출력 객체
out 객체는 클라이언트에 데이터를 출력하는 데 사용되는 출력 스트림입니다.
out.print(): 다양한 형태의 데이터를 출력합니다.
out.newLine(): 개행 문자를 출력합니다.
out.close(): 스트림을 닫습니다.
6. Config: 구성 객체 일반적으로 일부 초기화 구성 정보를 얻기 위해 Config 객체를 사용합니다. 일반적으로 사용되는 메소드는 getInitParameter 및 getInitParameterNames입니다.
7.페이지: 페이지 개체
페이지 객체는 JSP 파일에 의해 생성된 실행 클래스 객체를 나타내며 일반 독자에게는 권장되지 않습니다.
8.PageContext: 페이지 컨텍스트 객체
JSP에 의해 도입된 PageContext 클래스를 사용하면 페이지의 다양한 속성에 액세스할 수 있습니다. pageContext 변수는 현재 페이지와 연관된 PageContext 객체의 값을 저장합니다. PageContext 클래스에는 getRequest, getResponse, getOut 및 getSession과 같은 메소드가 있습니다.
9.Exception: 예외 객체
예외 객체는 JSP 파일이 실행될 때 생성되는 예외 객체를 나타냅니다. 이 객체는 일반 JSP 파일에서만 사용할 수 있습니다.
< %@page isErrorPage="true"%>는 JSP 파일에서 사용됩니다. 이는 JSP 파일 실행 시 생성된 오류 객체가 버려지고 < %@pageisErrorPage="true"% > 태그를 사용하여 오류 객체를 가로채는 JSP에서만 가로챌 수 있기 때문입니다. 가장 일반적으로 사용되는 메소드는 오류 정보를 얻는 데 사용되는 getMessage입니다.
4. 인스턴스 로그인 페이지: index.jsp
HTML 코드
<%@ 페이지 언어="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<html>
<머리>
<title>시스템 로그인</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
<스타일 유형="텍스트/css">
.btn {
글꼴 모음: "Tahoma", "宋体";
글꼴 크기: 9pt;
색상: #001E3C;
테두리-하단: #6794BC 1px 솔리드;
테두리-왼쪽: #8BB8E0 1px 솔리드;
테두리 오른쪽: #6794BC 1px 솔리드;
테두리 상단: #8BB8E0 1px 솔리드;
배경 이미지: url(image/buttonbg.gif);
커서: 손;
글꼴 스타일: 일반;
왼쪽 패딩: 3px;
패딩 오른쪽: 3px;
}
</style>
<스크립트 유형="텍스트/자바스크립트">
함수 doLogin(){
var vform = document.loginform;
if(!loginform.username.value){
Alert("사용자 이름을 입력해주세요!")
반품;
}
if(!loginform.password.value){
Alert("비밀번호를 입력해주세요!")
반품;
}
vform.submit();
}
</script>
</head>
<body topmargin="0" leftmargin="0" >
<form action="receive.jsp" name="longinForm" method="post">
<테이블 너비="100%" 높이="100%">
<tr>
<td align="center" valign="가운데">
<TABLE id="form1"
cellpacing="0" cellpadding="0" border="0" 스타일="너비: 500;">
<CAPTION 스타일="표시: 없음">
</CAPTION>
<TR>
<TD>
<TABLE width="100%" height="100%" 셀 간격="0"
cellpadding="0" border="0" style="테이블 레이아웃: 고정">
<TR>
<TD valign="top">
<FIELDSET id="form1_group0" 스타일="너비: 100%;">
<LEGEND>시스템 로그인</LEGEND>
<DIV>
<DIV 스타일="너비: 100%; 높이: 100%">
<TABLE 너비="100%" 셀 간격="0"
cellpadding="4" border="0" style="테이블 레이아웃: 고정;">
<콜그룹>
<COL 너비="100"></COL>
<COL 너비="50%"></COL>
<COL 너비="100"></COL>
<COL 너비="50%"></COL>
</COLGROUP>
<TR>
<TD 정렬="오른쪽">
사용자 이름
</TD>
<TD class="InnerTableContentCell">
<input type="text" name="사용자 이름"
스타일="너비: 100%;">
</TD>
<TD 정렬="오른쪽">
비밀번호
</TD>
<TD>
<입력 유형="비밀번호" 이름="비밀번호"
스타일="너비: 100%;"
<input type="hidden" name="action2" value="0">
</TD>
</TR>
<TR>
<TD colSpan="4"
정렬="오른쪽">
<input type="button" name="login" value="Login" onclick="this.form.submit();" class="btn"/>
</TD>
</TR>
</TABLE>
</DIV>
</DIV>
</FIELDSET>
</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</td>
</tr>
</table>
</form>
</body>
</html>
데이터 수신 페이지: receive.jsp
HTML 코드
<%@ 페이지 언어="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" info="action tag"%>
<jsp:useBean id="userVo" class="exercise.vo.UserVo" 범위="요청">
<jsp:setProperty name="userVo" property="name" param="username"/>
<jsp:setProperty name="userVo" property="password" param="password"/>
</jsp:useBean>
<html>
<머리>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
</head>
<본문>
이것은 내 JSP 페이지입니다. <br>
<hr><jsp:getProperty>를 사용하여 양식에 제출된 값을 가져옵니다.<br>
이름:<jsp:getProperty property="name" name="userVo"/><br>
비밀번호:<jsp:getProperty property="password" name="userVo"/>
<br><br><시간>
<%
out.println("vo 개체에서 직접 가져오기:<br> name:"+userVo.getName()+
"<br>비밀번호:"+userVo.getPassword()+"<br>");
String serviceName = request.getServerName();//1.jsp 내부의 요청 객체
out.println("<br><hr>서버 이름: "+serviceName);
out.println("<br>MIME 유형: "+response.getContentType());//2.jsp 내부 응답 객체
session.setAttribute("sessionName","jsp 내부 세션 개체");//3.jsp 내부 세션 개체
out.println("<br>세션 객체: "+session.getAttribute("sessionName"));//4.jsp 내부 출력 객체
pageContext.setAttribute("pageContext","Context 환경 참조");//5.jsp 내부의 pageContext 객체
//6.신청
//7. ServletConfig 인스턴스 구성
//8. java.lang.Object 페이지의 인스턴스
//9. 예외는 페이지 지시문에 isErrorPage=true가 있는 페이지에서 java.lang.Throwable 인스턴스를 사용해야 합니다.
문자열 정보 = pageContext.getServletContext().getServerInfo();
out.println("페이지 명령에서 정보 속성을 가져옵니다: "+info);
%>
</body>