스크립팅 원소란? JSP페이지에서 java코드를 직접 작성할 수 있게 하는 기능이다.
선언부(Declaration)
- 형태는 <%!자바코드%>
- 멤버변수의 선언 또는 멤버 메서드를 선언하는 용도로 사용한다.
- _jspService() 메소드 외부에 선언된다.(클래스 안에 선언된다.)
<%!
//[선언부(Declaration)]
/*
선언부에 작성한 자바코드는 서블릿으로 변환시 Class안에 생성됨.
즉 멤버 변수 나 멤버 메소드 혹은 상수등을 선언부에서 선언함.
*/
//[멤버 상수]
public static final int INT_MAX = Integer.MAX_VALUE;
//[멤버 변수]
private String mVariable="<h3>선언부에서 선언한 변수</h3>";
//[멤버 메소드]
private int getMaxNumber(int num1,int num2){
return num1 > num2 ? num1 : num2;
}/////////////getMaxNumber
//[선언부에서 내장객체 사용하는 방법]
//방법1]
//멤버변수 선언]
private JspWriter out;
private void showMessage(String message){
try{
out.println(message);
}
catch(IOException e){e.printStackTrace();}
}//////////////////
//방법2]매개변수로 전달 받는다.
private void showMessage(String message,JspWriter out){
try{
out.println(message);
}
catch(IOException e){e.printStackTrace();}
}///////////////
%>
스크립트렛(Scriptlet)
- 형태는 <%자바코드%>
- 사용자의 요청에 따른 실행가능한 자바 코드를 작성.
- _jspService() 메소드내에 삽입된다.
- 이 안에서는 메소드를 구성할 수 없다.
- html 및 자바스크립트 코드 및 css코드안에도 사용가능
스크립틀릿안에 작성한 자바코드는 서블릿으로 변환시 _jspService()메소드 안에 생성됨.
고로 스크립트릿 안에서는 메소드 정의 불가.
※JSP에서 제공하는 내장객체는 _jspService()메소드 안에 선언된 변수(지역변수)로 고로
선언부에서는 사용 불가.(중요)
<%
//[스크립틀릿(Scriptlet)]
/*
스크립틀릿안에 작성한 자바코드는 서블릿으로 변환시 _jspService()메소드 안에 생성됨
고로 스크립트릿 안에서는 메소드 정의 불가.
※JSP에서 제공하는 내장객체는 _jspService()메소드 안에 선언된 변수(지역변수)로 고로
선언부에서는 사용 불가.(중요)
*/
//void method(){}//[x]메소드 정의 불가
String localVariable="<h4>스크립틀릿 안에서 선언한 변수(지역변수)</h4>";
out.println("<h1 class='display-4'>스크립틀릿으로 출력</h1>");
out.println(INT_MAX);
out.println(mVariable);
out.println(localVariable);
out.println("최대값:"+getMaxNumber(10, 100));
//클래스의 멤버변수(this.out) = 지역변수(out)
//선언부에서 선언된 out에 _jspService()메소드에서 선언된 out대입
this.out=out;
showMessage("<h4>this.out=out방식으로 선언부에 선언한 내장객체 전달</h4>");
//두번째 인자는 _jspService()메소드에서 선언된 내장객체]
showMessage("<h4>매개변수에 내장객체 전달</h4>",out);
%>
표현식(expression)
- 형태는 <%=자바코드%>
- _jspServive method 내의 자바 코드로 변환된다
- 문장의 끝에 세미콜론(;)을 붙이지 않는다
- 결과를 화면에 출력한다.
- 단순 표현식 외에 데이터의 연산이나 함수를 호출하는 것도 가능하다
- html 및 자바스크립트 코드 및 css코드안에도 사용가능
<!--
예]<%--="EXPRESSION" --%>
표현식은 _jspService()메소드 안에서 out.print("EXPRESSION");로 변환 됨
고로 표현식 안에서 ;을 붙이면 에러
out.print("EXPRESSION";);와 같이 변환됨으로 에러
-->
<%=INT_MAX %><!-- out.print(INT_MAX);변환됨 -->
<%=mVariable %>
<%=localVariable %>
<%="최대값:"+getMaxNumber(10, 100) %>
<%!
private int getTotal(int start,int end){
int sum=0;
for(int i=start;i<=end;i++) sum+=i;
return sum;
}////////////////
%>
<body>
<div class="jumbotron jumbotron-fluid bg-warning">
<div class="container-fluid">
<h1>Expression 정리</h1>
</div><!--container-fluid-->
</div><!--jumbotron-fluid-->
<div class="container">
<fieldset class="form-group border p-3">
<legend class="w-auto p-3">표현식(Expression) 사용하기</legend>
<h1 class="display-4">out내장객체를 사용한 출력</h1>
<h4>1부터 100까지 누적합</h4>
<%
out.println(getTotal(1, 100));
out.println("<h4>1부터 1000까지 누적합</h4>");
out.println(getTotal(1, 1000));
out.println("<h4>1부터 10000까지 누적합</h4>");
out.println(getTotal(1, 10000));
%>
<h1 class="display-4">표현식을 사용한 출력</h1>
<h4>1부터 100까지 누적합</h4>
<%=getTotal(1, 100) %>
<h4>1부터 1000까지 누적합</h4>
<%=getTotal(1, 1000) %>
<h4>1부터 10000까지 누적합</h4>
<%=getTotal(1, 10000) %>
</fieldset>
</div><!-- container -->
</body>
예제를 통해 사용해보자
CSSL안에서 스크립팅 요소를 사용해보자
1. HTML안에서 사용하기
<body>
<fieldset class="form-group border p-3">
<legend class="w-auto p-3">HTML안에서 사용하기</legend>
<% for(int i=1;i<=6;i++){ %>
<h<%=i %>>h<%=i %> Bootstrap heading</h1>
<%} %>
<form>
<input type="text" class="form-control mb-3" name="counter"/>
<input type="submit" class="btn btn-danger" value="이미지 카우터"/>
</form>
<%
String counter=request.getParameter("counter");
if(counter !=null){
char[] ch=counter.toCharArray();
for(char num : ch){
%>
<img src="<%=request.getContextPath() %>/images/num_<%=num %>.gif" alt="<%=num %>번 이미지"/>
<%
}//for
}//if %>
</fieldset>
</body>
▲숫자를 넣고 버튼을 누르면 해당 숫자를 이미지로 바꿔준다
2. CSS안에서 사용하기
<body>
<fieldset class="form-group border p-3">
<legend class="w-auto p-3">CSS안에서 사용하기</legend>
<span class="lead">CSS를 적용한 텍스트</span>
<form method="post">
<label>글자색</label>
<select name="color" class="form-control">
<option value="">색상 선택요망</option>
<option value="Red">빨강</option>
<option value="Green">그린</option>
<option value="Blue">블루</option>
</select>
<label>글꼴</label>
<select name="font" class="form-control">
<option value="">글꼴 선택요망</option>
<option value="굴림체">굴림체</option>
<option value="바탕체">바탕체</option>
<option value="휴먼옛체">휴먼옛체</option>
</select>
<input class="btn btn-info mt-2" type="submit" value="글꼴 및 색상 변경" />
</form>
</fieldset>
</body>
<%
//사용자 선택값 받기
String color=request.getParameter("color");
String font=request.getParameter("font");
//out.println(String.format("색상:%s,글꼴:%s",color,font));
if(color ==null || color.length()==0 ) color="black";
if(font ==null || font.equals("")) font="Helvetica Neue";
%>
<style>
span{
color:<%=color%>;
font-family:<%=font%>;
}
</style>
▲색을 선택하지 않으면 변수 color와 font가 null이므로 if문에 진입하여 기본색상과 기본글씨체를 적용하고 그렇지 않다면 value값을 가져와서 style에 적용한다.
3. 자바스크립트안에서 사용하기
<fieldset class="form-group border p-3">
<legend class="w-auto p-3">자바스크립트안에서 사용하기</legend>
<form class="form-inline">
<label>아이디</label> <input class="form-control mx-2 mt-2" type="text" name="id" />
<label>비밀번호</label> <input class="form-control mx-2 mt-2" type="password" name="pwd" />
<input class="btn btn-info ml-2 mt-2" type="submit" value="로그인" />
</form>
</fieldset>
<%
//사용자 입력값 받기
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
%>
▲ 자바코드
<script>
//파라미터 미 전달시 true
//파라미터 전달시 is not defined 에러
//console.log(<%=id%>==null);
//아래는 파라미터를 전달하든 안하든 에러는 안나지만 항상 false
//console.log("<%=id%>"==null);
//반드시 아래처럼 자스에서는 null체크 해야 한다
console.log("<%=id%>"=="null");
//방법1]자스로 null비교
if("<%=id%>"!="null"){
if("<%=id%>"==="KIM" && "1234" ==="<%=pwd%>"){
alert("<%=id%>님 즐감하세요");
}
else{
alert('회원가입후 이용하세요');
}
}
//방법2]스크립팅 요소안에서 자바로 null비교
<%
if(id !=null){
if("KIM".equals(id) && "1234".equals(pwd)){
out.println("alert('"+id+"님 즐감....');");
}
else{
out.println("alert(\"가입후 이용바람...\");");
}
}
%>
</script>
'JSP' 카테고리의 다른 글
[JSP]out 객체 (0) | 2022.04.29 |
---|---|
[JSP]response 객체 (0) | 2022.04.29 |
[JSP]request객체 (0) | 2022.04.29 |
[JSP]지시어(Directive) (0) | 2022.04.28 |
[JSP]JSP Basic (0) | 2022.04.27 |