[JSP]
얘는 대체 얼마나 더 정리해야 하는가....
JSP 는 웹 상에서 동적인 어플리케이션을 개발하는 방법 중의 하나로 사용자로부터 호출 될 때 자동으로 servlet으로 변환된다.
JSP는 내부적으로 서블릿에서 Exception보다 한 단계 위 클래스인 Throwable클래스를 try ~catch하기때문에 서블릿처럼 예외처리를 안 해줘도 됨! 기본적인 예외는 처리 됨
자바 코드와 HTML 코드를 적절히 조합하여 사용이 가능하다(하지만 규모가 커지면 분리 해 줘야 함)
디자인 부분과 로직 부분을 분리시킬 수 있다. (java가 로직, html은 디자인이라고 생각)
서블릿보다 쉽고, 빠르다.
(프로그래머가 직접 코딩한 Servlet보다 최적화된 Servlet을 생성시켜 효율적인 코드가 만들어진다.)
파일은 어디서 찾는 가..
이클립스로 작업시에는 workspace아래
.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work아래에 서 찾으면 됨
[JSP구성요소] - 우선 크게보고 자세한건 하나 씩 !!
1.지시어 (Directive) : 형태는 <%@지시어%> , 띄어쓰기 저 형태는 띄어쓰기 하면 안됨 !!
1-1.page 지시어 : servlet 컨테이너에게 JSP파일에 대한 "정보"를 알려주는 역할 ex) import,info, errorPage
1-2.include 지시어 : 페이지를 삽일 할때 사용.
1-3.taglib : EL(Expression Language), JSTL(JSP Standard Tag Library), Custom Tag를 JSP 페이지내에 사용할때 사용한다.
2.스크립팅 원소 : jsp페이지에서 자바 코드를 직접 작성할 수 있게 하는 기능
2-1선언부 : <%! 자바코드 %> , _jspService() 메소드 외부에 선언된다.(클래스 안에 생성!!)
2-2 스크립트렛 : <% 자바코드 %> , _jspService() 메소드내에 삽입되기 때문에 이 안에서는 메소드를 구성할 수 없다
2-3 표현식 : <%= 자바코드 %> , 결과를 화면에 출력함!(system.out.println() 같은거라 끝에 절대 ; 안 붙임!!)
[page 지시어 중 에러 페이지 관련 : errorPage, isErrorPage(두개가 한 쌍이라고 생각!!) ]
여기서도 코드 작성 하다 보면 에러가 뜨겠지...
젤 무섭다 시뻘건 에러... 여기서도 try~catch 로 에러 잡을 수 있고 에러 페이지를 띄워주는 방법도 있다 !
우선 에러가 날 수 있는 코드 작성(HTML문서)-- 이건 에러가 발생하는 페이지의 body에 작성
<body>
<fieldset class=" form-group border p-3">
<legend class="w-auto px-3">에러를 발생시킬 페이지</legend>
<form>
<div class="form-group">
<label for="age">나이를 입력하세요?</label>
<input class="form-control" type="text" name="age" id="age"/>
</div>
<input class="btn btn-success" type="submit" value="확인"/>
</form>
<% if(after10Years !=-1) {%> <!-- 사용자 입력 전에는 안보이게 하려고 if절로 묶음! 물론 제대로 입력 할 땐 떠야지 !-->
당신의 10년 후 나이는<%= after10Years %>살 입니다.
<% }; %>
</fieldset>
</body>
사용자가 숫자가 아닌 문자를 입력하면 에러 뙇!!!
이걸 잡아야 겠죠
방법 1. 에러페이지로 이동시키기 !
errorPage: 에러가 발생하는 페이지 ! 상단부분 !
자바코드로 사용자 입력 값 받고 에러처리 할 로직을 작성한다 .
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
errorPage="ErrorInfo.jsp" <!---요거로 페이지 연결!! page지시어의 errorPage속성 사용 ---->
%>
<%
//사용자가 입력한 값 받기
String stringAge=request.getParameter("age");
//out.println("stringAge:"+stringAge);
int after10Years=-1;
String errorMessage="";
if(stringAge != null){ //최초 페이지 요청 시 null 체크 이거 안하면 처음엔 걍 에러페이지 뜸 !
//방법1.에러페이지 띄우기 page지시어의 errorPage속성 사용 : try~catch 불필요
after10Years = Integer.parseInt(stringAge)+10;
}
%>
isErrorPage: 현재 JSP 가 에러처리를 담당하는 페이지가 맞는지 구분하는 속성( 쉽게말해 에러나면 보이는 페이지!!)
ex) "false"(기본값)/ "true"
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isErrorPage="true" <!---요거를 true로 하고 body안에 띄울 에러 내용을 넣는다!--->
%>
<body>
<fieldset class=" form-group border p-3">
<legend class="w-auto px-3">에러발생</legend>
<h2>관리자에게 문의하세요 ☎ 010-1234-5678</h2>
<h3 class='text-danger'>에러 내용</h3>
<!--
JSP의 exception내장객체는 page지시어의 isErrorPage속성이
true인 jsp페이지에서만 사용가능
-->
<%= exception.getMessage() %>
</fieldset>
</body>
방법2. 여기서도 try~catch 가 가능함! 이건 별도 페이지를 만들지 않아도 된다!
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
errorPage="ErrorInfo.jsp"
%>
<%
//사용자가 입력한 값 받기
String stringAge=request.getParameter("age");
//out.println("stringAge:"+stringAge);
int after10Years=-1;
String errorMessage=" ";
if(stringAge != null){ // 최초 페이지 요청 시 null 체크
//방법 1. trycatch로 직접처리 !!
try{
after10Years = Integer.parseInt(stringAge)+10;
}
catch(NumberFormatException e){
errorMessage="나이는 숫자만 !!!";
}
}
%>
<body>
<fieldset class=" form-group border p-3">
<legend class="w-auto px-3">에러를 발생시킬 페이지</legend>
<form>
<div class="form-group">
<label for="age">나이를 입력하세요?</label>
<input class="form-control" type="text" name="age" id="age"/>
</div>
<input class="btn btn-success" type="submit" value="확인"/>
</form>
<% if(after10Years !=-1) {%> <!-- 사용자 입력 전에는 안보이게 하려고 if절로 묶음! 물론 제대로 입력 할 땐 떠야지 !-->
당신의 10년 후 나이는<%=after10Years %>살 입니다.
<% }; %>
<!-- try catch로 에러잡을 때 사용 -->
<% if(errorMessage.length() !=0 ){ %>
<div class="alert alert-warning mt-2">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Not Number!</strong><%= errorMessage %>
</div>
<% } %>
</fieldset>
</body>
[Include] : <%@ include 지시어 %>
A,B 두개의 jsp 파일이 있는데
B.jsp 파일 자체를 A.jsp 파일안으로 삽입시키는 것.
이 때 중요한 사실 !!
A.jsp파일을 서블릿으로 변환 할 때 B.jsp파일은 변환되지 않는다 .
A파일
<body>
<nav class="navbar navbar-expand-sm bg-secondary navbar-dark fixed-top">
<!-- Brand -->
<a class="navbar-brand" href="#">
<img src="../images/logo.png" alt="로고이미지" style="width:70px;"/>
</a>
<!-- Toggler/collapsibe Button -->
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
<span class="navbar-toggler-icon"></span>
</button>
<!-- Navbar links -->
<div class="collapse navbar-collapse justify-content-end" id="collapsibleNavbar">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="#">Link1</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link2</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link3</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown">
Link4
</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Link 1</a>
<a class="dropdown-item" href="#">Link 2</a>
<a class="dropdown-item" href="#">Link 3</a>
</div>
</li>
<li class="nav-item">
<form class="form-inline" action="#">
<input class="form-control mr-sm-2" type="text" placeholder="검색어 입력">
<button class="btn btn-success" type="submit">검색</button>
</form>
</li>
</ul>
</div>
</nav>
<div class="container" style="margin-top:50px;">
<div class="jumbotron bg-warning">
<h1>include 지시어</h1>
</div>
<%@ include file="IncludedPage.jsp" %> <!--- 요렇게 연결시키는 것 !!---->
<h2>오늘은 <%=getDate("yyyy-MM-dd")%>일 입니다.</h2>
현재 페이지명은 <%= currentPageName %>입니다.
</div>
</body>
B파일
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- IncludedPage.jsp -->
<!-- 여러 JSP페이지에서 공통으로 사용할 변수나 상수, 메소드 정의 -->
<%!
// 공용으로 쓰는데 private?? 어차피 통채로 가져가서 쓸거라 괜춘!
private SimpleDateFormat dateFormat = new SimpleDateFormat();
//공통 메소드
private String getDate(String pattern){
dateFormat.applyPattern(pattern);
return dateFormat.format(new Date());
}
%>
<%
//공통 변수
String requestURL = request.getRequestURL().toString();
String currentPageName=requestURL.substring(requestURL.lastIndexOf("/")+1);
%>
'학원 > JSP' 카테고리의 다른 글
11/18 46-5 [JSP] scripting_2(UseInCSS) (0) | 2022.11.19 |
---|---|
11/18 46-4 [JSP] scripting_1(Basic) (0) | 2022.11.19 |
11/18 46-2 [JSP] JSP 및 Servlet테스트 (0) | 2022.11.19 |
11/18 46-1 [JSP] jsp와 html의 개념설명 (0) | 2022.11.19 |
11/17 45-6 [JSP] 환경설정 (0) | 2022.11.17 |