본문 바로가기

말하는 감자 탈출하기

Java/JSP-3일차

Java

자바 메서드

public static String numbering(int int, int limit){
  /*
  * 여기서 메소드 numbering 앞의 String은 return 값의 데이터 타입을 나타낸다
  * 반환 값이 없을 때는 void를 사용한다
  */
}

클래스 변수와 메서드 변수가 모두 있을 때는 메서드 변수가 우선된다

메서드 변수가 있는 상태에서 클래스 변수에 접근하고자 할 때는 this.클래스 변수를 사용하면 된다

JSP

서블릿(.java)으로 변환되어 컴파일 후(.class) 실행된다

- 서블릿은 최초 요청시 생성된 인스턴스가 메모리에 남아 이후 요청에도 빠르게 대응할 수 있어 트래픽이 많아져도 빠른 응답이 가능하다.

- 또한 스레드 단위로 실행되어 같은 프로세스를 중복해서 여러개 만들지 않고 동시에 실행될 수 있어 응답 속도가 빠르다

- 웹 브라우저에서 수행되기때문에 서블릿의 접근 지정자는 항상 public이다

- 서블릿으로 변환된 JSP 소스코드는 모두 _jspService() 메서드에 저장된다

- html form태그 내의 input 태그의 타입이 submit인 경우 form 태그의 action에 지정한 서블릿 파일이 요청된다

선언문

JSP에서 자바 코드를 확장하는 방법

JSP에서 메서드나 멤버변수를 선언할 수 있다

선언문보다는 빈즈 클래스를 사용하는 것이 좋다

<!% 선언태그의 모양 %> ( <% 이건 스크립틀릿이다 %>)

 

사용자 정의 메서드 외에 jspInit()/ jspDestroy()를 오버라이드해서 사용할 수 있다

표현식

<%= 메서드나 변수 또는 간단한 계산식을 넣을 수 있다%>

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

<%!
	// 멤버변수 선언 
	int num1, num2=0;
	int result=0;
	String op="";
	
	// 사용자 정의 메서드 선언
	public int calculator() {
		int result=0;
		if(op.equals("+")) {
			result=num1+num2;
		}
		else if(op.equals("-")) {
			result=num1-num2;
		}
		else if(op.equals("*")) {
			result=num1*num2;
		}
		else if(op.equals("/")) {
			result=num1/num2;
		}
	return result;
}
%>

<%
	
	//폼을 통해 전달된 post요청을 수행
	if(request.getMethod().equals("POST")){
		num1=Integer.parseInt(request.getParameter("num1"));
		num2=Integer.parseInt(request.getParameter("num2"));
		op=request.getParameter("operator");
	}

%>

<!-- html -->
<html>
<head>
    <meta charset="UTF-8">
    <title>calculator</title>
</head>
<body>
    <div>
        <h3>calculator</h3>
        <hr>
        <form name =form1 action=/test/CalcServlet2 method=post>
            <input type="text" name= "num1" width=200 size="5">

            <select name="operator">
            <option selected>+</option>
            <option>-</option>
            <option>*</option>
            <option>/</option>
            </select>

            <input type="text" name="num2" width=200 size="5">
            <input type="submit" value="계산" name="b1">
            <input type="reset" value="다시입력" name="b2">
        </form>
        <hr>계산 결과:<%=calculator() %> <!-- 표현식/ 위에서 선언한 메서드 사용 -->
    </div>
</body>
</html>

스크립트릿

JSP문서 내에 자바 코드를 기술하는 부분

<% 이 안에 작성하면 된다 %>

로직을 작성한 수 표현은 표현식으로 한다

태그 내부에 작성한 로직이 복잡하면 유지보수가 어려워지고

다양한 프레임워크(스프링) 및 JSP 빈즈MVC 패턴의 상용화로 인해 더이상 권장되지 않는다

주석

<%@ 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>
<!--이 주석은 클라이언트(개발자 모드)가 볼 수 있습니다  -->
<h2>jsp 주석 테스트</h2>
<%--이 주석은 클라이언트단에서 보이지 않습니다. --%>
</body>
</html>

수정을 하고 저장을 안하면 적용을 안시켜준다

JSP 내장객체

_jspService()메서드 안에서 사용자의 JSP소스코드 이전에 선언 및 초기화되어 JSP 내에서 선언하지 않고 사용하는 객체

JSP가 서블릿으로 자동 변환된 코드 내에 포함된 멤버변수, 매개변수 등의 객체

- 지역변수로 선언된 pageContext, application, config, session, out

- 메서드 매개변수response, request

페이지 간의 데이터를 공유할 때 사용한다

 

 

문법

지시어

JSP파일의 속성을 기술하여 컨테이너에게 해당 페이지를 어떻게 처리해야 하는지에 대한 내용

 

1) page

jsp 페이지로서의 기능을 수행하려번 page지시어는 반드시 있어야 한다

- contentType: mime형식 및 캐릭터셋 지정

- import: JSP내부에서 사용할 외부 자바 패키지 및 클래스를 불러온다

- errorPage : 현재 페이지에서 오류가 발생할 경우 호출될 페이지 지정

- isErrorPage: 오류를 처리하는 페이지인지(default=false)

- session: 세션 사용 여부

- buffer: 전송할 데이터의 단위 지정 - 오류가 발생하더라도 안정적인 데이터 전송이 가능함(이미 데이터가 어느정도 모여있기 때문)

- autoFlush: 버퍼를 자동으로 비울것인지 지정

- isThreadSafe: 서블릿의 장점인 스레드 단위 요청처리(동시성)를 안정적으로 할 수 있도록 해준다

 

2) include

하나의 html에서 기능별로 jsp 페이지를 나눠서 구현할 때 사용

각각의 파일을 포함한 뒤 하나의 컴파일 클래스를 생성하여 include_test.jsp 만 자바소스 및 클래스가 생성된다

html 설정은 include하는 jsp페이지에서 되어있으므로 따로 작성할 필요가 없음

간단한 사이트 구성에는 유용하지만 레이아웃 관리를 비롯한 고급 기능을 상요하기 위해서는 tiles/sitemesh 프레임워크를 사용하는 것이 좋다

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>지시어 테스트</title>
</head>
<body>
	<h2>include 지시어 테스트</h2>
	<hr>
	<%@ include file="main.jsp" %>
	<p>
	<table border=0 cellpadding=5 cellspacing=1>
	<tr>
	<td><font size=-1><%@include file="news.jsp" %></font></td>
	<td width="30">&nbsp</td>
	<td><font size=-1><%@include file="shopping.jsp" %></font></td>
	</tr>
	</table>
</body>
</html>
<%-- example news.jsp /html형식을 따로 작성하지 않음--%>

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

[최신뉴스]
<hr>
어쩌구
저쩌구<br>
어쩌구<br> 저쩌구<br>

3) taglib

JSP액션

include, forward, setProperty, getProperty, plugin, param, useBean

 

- useBean액션: JSP-자바 빈즈 크래스 연동을 지원 ⭐

useBean, setProperty, getProperty가 있다 set,get은 빈즈 클래스의 setter, getter를 자동으로 호출한다

- include액션: 각각 파일을 만든 후 실행시점에 파일을 호출한다

변수를 전달할 수 있다

JSP파일을 포함하거나 forward 액션을 통해 다른 JSP로 포워딩할 때 param태그를 이용해 속성 값을 전달할 수 있다.

전달된 매개변수는 request.getParameter() 메서드를 통해 접근 가능하다

- forward액션:현재 페이지를 완전히 다른 페이지로 전환할 대 사용(페이지 제어권 이동)

<%@ 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>
<h2>include_action.jsp에서 footer.jsp 호출하기</h2>

<%--footer.jsp로 매개변수 전달 --%>
<jsp:include page="footer.jsp">
	<jsp:param name="email" value="test@test.net"/>
	<jsp:param name="tel" value="000-000-0000"/>
</jsp:include>

</body>
</html>

 

footer.jsp로 전달하는 부분의 액션을 forward로 바꾸면 footer가 포함되어 나타나지 않고 페이지가 footer로 교체된다

- plugin액션: 웹브라우저에서 자바 플러그인을 사용하여 자바 애플릿이나 자바 빈즈 컴포넌트를 실행할 수 있게 한다. (대부분의 웹브라우저는 자바를 플러그인 형태로 지원한다) 웹브라우저(IE, Netscape)에따라 자동으로 태그(OBJECT, EMBED)를 생성해준다

 

 

'말하는 감자 탈출하기' 카테고리의 다른 글

감자의 에러  (0) 2023.05.04
JNDI에 대해 알아보자  (0) 2023.04.29
eclipse-servlet  (0) 2023.04.19
JAVA/JSP  (0) 2023.04.18
자바 설치 및 환경 변수 설정하기(feat. PostgreSQL)  (0) 2023.04.18