[JSP/Servlet] JSP 동적 부분

JSP 동적 부분 담당


o 스트립트  - <% %>

1. 지시자(Directive) 태그  -> 서블릿을 JSP로 web container가 변환 할떄 web container에게 지시할 내용을 기술

  ex) <%@ 지시어    속성="값" [속성="값"] %>


● page -> import(패키지 import), contentType 지정

    ex) <%@page import="java.util.Date" %>

   <%@ page contentType="text/html;charset=UTF-8"%> --> response.setContentType("text/html;charset=utf-8")

● inclued

● taglib


2. 표현식(Expression) 태그 -> 출력 태그

ex) <%=출력할 내용 %> =   Java -> out.print(출력할 내용);  


3. 스크립트릿(Scriptlet) 태그 -> JSP에 동적인 처리(Java실행문)를 넣는 코드

-HTML과 함께 _jspService()의 실행문으로 들어갈 java 코드를 넣는다

ex) <% java 코드 %>


4. 선언자(Declaration) 태그 -> JSP가 서블릿으로 변환될때 서블릿 클래스의 member 변수나 member 메소드를 선언할 때 사용

- <%

member변수

member메소드 (jsp lifecycle 메소드 오버라이딩)

  %>



o Action Tag - JSP 내에서 Java 코드를 줄이기 위한 방법으로 제안된 태그들

  + 동작(동적 코드)를 태그화함

  + 스트립트 릿 태그의 Java 코드를 태그로 대신하기 위한 방법

 

 -종류

  +표준 Action Tag : JSP 스펙에서 제공하는 기본 액션 태그

- prefix로 jsp를 사용한다.

   <jsp:태그명>


- 주요태그

   + 빈 객체(VO)와 연동하기 위한 태그 = (request, session, application scope)의 속성을 사용하기 위한 태그

   + useBean, setProperty, getProperty


- 수행을 이동시키는 태그(RequestDispatcher를 이용해)

   + forward, include, param(forward, include의 하위태그)


  +Custom Tag : 사용자 정의 태그


- 구문

   <prefix:태그명 속성="값" [속성="값]>

   + prefix : 태그 구분자

   + 기본 문법은 xml 태그 문법과 동일

- 대소문자를 가린다

- 속성의 값은 반드시 따옴표로 감싼다

- 태그는 반드시 닫아야 한다(내용이 없어도 닫아야 한다)

ex) <c:forEaxh begin="1" end='10'>

내용

</c:forEach>

<jsp:useBean id="cust" class="vo.Customer"/>



※ Markup Language 특징 -> 속성="값"이 여러개 일때는 공백으로 구분한다.

   JSP에서 주석 

   1. HTML 주석 : <!-- 주석 -->

   2. JSP script 주석 : <%-- 주석 --%>

   3. Java 주석 : //한줄, /*블럭주석*/ -> 스크립트릿, 선언자 태그 안에 넣을 수 있다.


o JSP 내장 객체

- JSP (scriptlet 태그, expression 태그) 내에서 변수 선언 및 객체 생성 없이 사용할 수 있도록 기본적으로 제공되는 변수 및 객체


- request       => HttpServletRequest


- response     => HttpServletResponse


- out            => JspWriter (PrintWriter out = response.getWriter())


- session       => HttpSession


- application  => ServletContext


- config        => ServletConfig


- page          => this


- exception    => Throwable (지시자 태크고 JSP가 errorPage로 선언된 경우 생김)


- pageContext => PageContext (다른 내장객체를 생성하는 메소드 제공)



o Composite View 패턴

- action tag -> include (요청 디스패치 방식)

  ex) <jsp:include page="url"/>


- 지시자 tag -> 지시어 : include  (Copy&Paste)

  ex) <%@include file="url"%>


※ 포함될 page는 포함된 내용만 구현해야한다.


일반적 출력


<%@page import="vo.Member"%>  //import

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

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<h1>조회결과</h1>

<%

Member member = (Member) request.getAttribute("result");

%>


id : <%=member.getId() %><br>

패스워드 : <%=member.getPassword() %><br>

이름 :  <%=member.getName() %><br>

이메일 : <%=member.getEmail() %><br>

포인트 :  <%=member.getPoint() %>

</body>

</html>



usebean 사용


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

<jsp:useBean scope="request" id="result" class="vo.Member"/>


<%--

vo.Member result = (vo.Member)request.getAttribute("result")

if(result==null){

result = new vo.Member();

request.setAttribute("result", result);

}


useBean : 속성영역에서 속성객체(VO)를 가져오는 태그 없으면 만들어서 넣어준다

태그의 속성 

- scope : 속성영역지정 - page(기본값), request, session, application

- id : 속성명지정, 가져온 속성객체의 식별자

- class : 속성의 클래스 명을 지정, 패키지명을 포함해서 설정해야함

--%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

ID : <jsp:getProperty property="id" name="result"/><br>

이름 : <jsp:getProperty property="name" name="result"/>

</body>

</html>


태그 구성


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

<%@ page import="java.util.Date, java.util.ArrayList, java.text.SimpleDateFormat" %>

<%! //선언자 태그 - servlet의 member변수/메소드 를 선언 및 정의(구현) 

  int counter =0; //instance변수

  //JSP lifecycle 메소드 : jspInit() : init(), jspDestroy() : destroy(), 

 // _jspService() : service() => 오버라이딩 하면 안됨

 public void jspInit(){

System.out.println("counter.jsp의 jspInit()");

 }

 public void jspDestroy(){

System.out.println("counter.jsp의 jspdestroy()");

 }

%>

<%//int counter = 0; %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<%

//현재시간 저장

Date d = new Date(); //java.util

ArrayList list = new ArrayList();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 HH시 mm분 ss초");

String current = sdf.format(d);

int size = (int)(Math.random()*6)+1; //1~6

%>


현재 시간 : <%=current %><br>

<font size="<%=size%>"><%=size %></font><p>


카운터 : <%=++counter %>

<!-- HTML 주석 : Web Browser -->

<%--JSP 주석 : Web Container --%>

</body>

</html>



JSP usebean을 이용해 요청 파라미터값을 받아서 Servlet에 전달하기




request.jsp


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

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<form action="/myjsp/findById" method="post">

조회할 ID <input type="text" name="id">

<input type="submit" value="검색">

</form>

<h1>등록</h1>

<form action="/myjsp/actiontag/forward.jsp" method="post">

ID : <input type="text" name="id"><br>

패스워드 : <input type="password" name="password"><br>

이름 : <input type="text" name="name"><br>

이메일 : <input type="text" name="email"><br>

포인트 : <input type="text" name="point"><br>

<input type="submit" value="등록">

</form>

</body>

</html>



RegisterServlet.java


package servlet;


import java.io.IOException;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import vo.Member;


public class RegisterServlet extends HttpServlet{

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

Member member = (Member)req.getAttribute("member");

System.out.println("요청파라미터 : "+member);

//비지니스 로직 - memberService.addMember(member)

//req.getRequestDispatcher("/actiontag/response3.jsp").forward(req, resp);

resp.sendRedirect("/myjsp/actiontag/response3.jsp");

}


}



forward.jsp

<%@ page contentType="text/html;charset=UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean scope = "request" id="member" class="vo.Member"/>

<jsp:setProperty property="*" name="member" />

<%
//요청 디스패치 방식으로RegisterServlet으로 이동
//request.getRequestDispatcher("/register").forward(request,response);
%>
<jsp:forward page="/register"/> <!-- 요청디스패치방식으로 page에 지정한 url로 이동 -->

<!-- 
Member member = (Member)request.getAttribute("member");
if(member==null){
member = new Member();
request.setAttribute("member",member);
}
---setProperty--
<jsp:setProperty property="id" name="member" param="id"/>   --property와 param이 같으면 param 생략
--property = "*" 일괄적으로 넣어라.
=> member.setId(request.getParameter("id"))   <-- 위의 값의 의미
 -->



response3.jsp


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

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

등록되었습니다.

</body>

</html>

댓글

Designed by JB FACTORY