본문 바로가기
BackEnd

5/26 - JSTL

by Jiwon_Loopy 2025. 6. 1.
반응형

목차


JSTL


  • 커스텀 태그 중 가장 많이 사용되는 태그를 표준화하여 라이브러리로 제공하는 것

주로 사용하는 것


  • if, foreach, url 정도

이름 띄워보기


package pro14;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class IndexServlet
 */
@WebServlet("/index")
public class IndexServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 포워딩
		request.setAttribute("name", "홍길동");
		request.getRequestDispatcher("/index.jsp").forward(request, response);
	}

}

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	${name}
</body>
</html>

세션에 따른 로그인 유무 판별


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:if test = "${!empty loginSession}">
	${ loginSession.name }님 안녕하세요
	</c:if>
	<c:if test = "${empty loginSession}">
	로그인 정보가 없습니다.
	</c:if>
</body>
</html>
package pro14;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import member.MemberVO;

/**
 * Servlet implementation class IndexServlet
 */
@WebServlet("/index")
public class IndexServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		
		// 포워딩
		request.setAttribute("name", "홍길동");
		
		// 로그인 성공 후 MemberVO 객체 세션에 저장
		MemberVO vo = new MemberVO();
		vo.setName("김길동");
		request.getSession().setAttribute("loginSession", vo);
		
		request.getRequestDispatcher("/index.jsp").forward(request, response);
	}

}

 

리스트 값 넣고 받아오기


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:if test = "${!empty loginSession}">
	${ loginSession.name }님 안녕하세요
	</c:if>
	<c:if test = "${empty loginSession}">
	로그인 정보가 없습니다.
	</c:if>
	<hr>
	<c:forEach var="member" items="${list }">
	${member.name }<br>
	</c:forEach>
</body>
</html>

이미지 가져오기


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>	
	<img src = "<c:url value="/img/github.png"/>">
</body>
</html>

날짜, 숫자 포매팅


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	숫자 천단위 컴마 : <fmt:formatNumber value="${price} "></fmt:formatNumber><br>
	날짜 : <fmt:formatDate value="${date }" pattern="YYYY-MM-dd"  />
</body>
</html>

함수 호출


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page import= "pro14.Function" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	숫자 천단위 컴마 : <fmt:formatNumber value="${price}"></fmt:formatNumber><br>
	날짜 : <fmt:formatDate value="${date }" pattern="YYYY-MM-dd"/><br>
	메서드 호출<br>
	인스턴스 메서드 : ${func.result(60)};<br>
	static 메서드 : ${Function.result2()};
</body>
</html>
package pro14;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import member.MemberVO;

/**
 * Servlet implementation class IndexServlet
 */
@WebServlet("/index")
public class IndexServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		request.setAttribute("func", new Function());
		request.getRequestDispatcher("/index.jsp").forward(request, response);
	}

}

package pro14;

public class Function {
	public String result(int score) {
		return score >= 60 ? "합격" : "불합격";
	}
	
	public static String result2() {
		return "함수2 호출";
	}
}

 

  • 파일 업로드
package sec01.exam01;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@WebServlet("/upload.do")
public class FileUpload extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}
	
	
	private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String encding = "utf-8";
		File currentDirPath = new File("D:\\\\file_repo");
		DiskFileItemFactory factory = new DiskFileItemFactory();
		factory.setRepository(currentDirPath);
		factory.setSizeThreshold(1024*1024);
		ServletFileUpload upload = new ServletFileUpload(factory);
		try {
			List items = upload.parseRequest(request);
			for(int i = 0; i < items.size(); i++) {
				FileItem fileItem = (FileItem)items.get(i);
				if(fileItem.isFormField()) {
					System.out.println(fileItem.getFieldName()+"="+fileItem.getString(encding));
					
				}else {
					System.out.println("매개변수이름"+fileItem.getFieldName());
					System.out.println("파일 이름"+fileItem.getName());
					System.out.println("파일 크기"+fileItem.getSize()+"bytes");
					if(fileItem.getSize() > 0) {
						int idx = fileItem.getName().lastIndexOf("\\\\");
						if(idx == -1) {
							idx = fileItem.getName().lastIndexOf("/");
						}
						String fileName = fileItem.getName().substring(idx + 1);
						File uploadFile = new File(currentDirPath + "\\\\" +fileName);
						fileItem.write(uploadFile);
						
					}
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

}

DB에서 가져와 테이블 형태로 출력하기


package member;

import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class MemberDAO {

	private PreparedStatement pstmt;
	private Statement stmt;
	private Connection con;
//	private String driver = "oracle.jdbc.OracleDriver";
//	private String url = "jdbc:oracle:thin:@localhost:1521/xe";
//	private String user = "testuser";
//	private String pwd = "test1234";
	private DataSource dataFactory;
	
	public MemberDAO() {
		try {
			Context ctx = new InitialContext();
			Context envContext = (Context)ctx.lookup("java:/comp/env");
			dataFactory = (DataSource)envContext.lookup("jdbc/oracle");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	public List<MemberVO> listMembers() {
		List<MemberVO> list = new ArrayList<>();
		try {
//			connDB();
			// 커넥션풀에서 객체 가져오기
			con = dataFactory.getConnection();
			String query = "SELECT * FROM t_member";
//			ResultSet rs = stmt.executeQuery(query);
			pstmt = con.prepareStatement(query);
			// 1,2,3.... set
			ResultSet rs = pstmt.executeQuery();
			while (rs.next()) {
				MemberVO vo = new MemberVO();
				vo.setId(rs.getString("id"));
				vo.setPwd(rs.getString("pwd"));
				vo.setName(rs.getString("name"));
				vo.setEmail(rs.getString("email"));
				vo.setJoindate(rs.getDate("joindate"));
				list.add(vo);
			}
			rs.close();
			pstmt.close();
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}
	
	public void addMember(MemberVO m) {
		try {
			con = dataFactory.getConnection();
			String query = "INSERT INTO t_member (id,pwd,name,email) VALUES (?,?,?,?)";
			pstmt = con.prepareStatement(query);
			pstmt.setString(1,  m.getId());
			pstmt.setString(2,  m.getPwd());
			pstmt.setString(3,  m.getName());
			pstmt.setString(4,  m.getEmail());
			pstmt.executeUpdate();
			pstmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void delMember(String id) {
		try {
			con = dataFactory.getConnection();
			String query = "DELETE FROM t_member WHERE id=?";
			pstmt = con.prepareStatement(query);
			pstmt.setString(1, id);
			pstmt.executeUpdate();
			pstmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	// DB 연결
//	private void connDB() {
//		try {
//			Class.forName(driver);
//			con = DriverManager.getConnection(url, user, pwd);
//			stmt = con.createStatement();
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//	}
}

package pro14;

import java.io.IOException;

import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import member.MemberDAO;
import member.MemberVO;

/**
 * Servlet implementation class MemberServlet
 */
@WebServlet("/memberList")
public class MemberServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		MemberDAO dao = new MemberDAO();
		List<MemberVO> list = dao.listMembers();
		request.setAttribute("list", list);
		request.getRequestDispatcher("/WEB-INF/view/memberList.jsp").forward(request, response);
	}

}

파일 업로드


package pro14;

import java.io.IOException;

import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import member.MemberDAO;
import member.MemberVO;

/**
 * Servlet implementation class MemberServlet
 */
@WebServlet("/memberList")
public class MemberServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		MemberDAO dao = new MemberDAO();
		List<MemberVO> list = dao.listMembers();
		request.setAttribute("list", list);
		request.getRequestDispatcher("/WEB-INF/view/memberList.jsp").forward(request, response);
	}

}

Ajax


  • 이전 페이지 띄워보기
<%@ 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>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
$(function(){ // 이게 핵심!
    $("#btn").click(function(){
        $.ajax({
            url: '/pro15/test01/upleadForm.jsp',
            success: function(res){
                $("#wrap").html(res);
            },
            error: function(xhr, status, error){
                alert("에러 발생: " + error);
            }
        });
    });
});

</script>
</head>
<body>
	<div id="wrap">
<input type="button" id="btn" value="ajax">
	</div>
</body>
</html>
  • 요청 응답 받기
    • 버튼 누를 때마다 텍스트 추가
package ex01.ex01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AjaxTest1
 */
@WebServlet("/ajaxTest1") // 그대로 유지
public class AjaxTest1 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandler(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandler(request, response);
	}

	private void doHandler(HttpServletRequest request, HttpServletResponse response)	throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		String param = (String) request.getParameter("param");
		System.out.println("param = " + param);
		PrintWriter writer = response.getWriter();
		writer.print("안녕하세요.서버입니다.");
	}

}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
function fn_process(){
    $.ajax({
        type: "get",
        dataType: "text",
        url: "/pro16/ajaxTest1", 
        data: { param: "Hello,jquery"	 },
        success: function (data, textStatus){
            $('#message').append(data);
        },
        error: function(data, textStatus){
            alert("에러가 발생했습니다.");
        },
        complete: function(data, textStatus){
            alert("작업을 완료했습니다");
        }
    });	
}
</script>
</head>
<body>
    <input type="button" value="전송하기" onClick="fn_process()" /><br><br>
    <div id="message"></div>
</body>
</html>

메모


  • 선언문
    • <%! %>
  • 스클립틀릿
    • <% %>
  • 표현식
    • <%=값 %>
  • 디렉티브 (지시어)
  • EL
    • 출력 용도, null 처리 불필요
    • ${값}
    • 저장소에서 꺼내줌, 꺼내는 순서
    • page → request → session → application
  • 비교 연산자
    • 원래 연산자 + 키워드 (줄임말) ex) == → eq →, ! = ⇒ ne ..
  • empty (비어있는지) (true : null , ‘’) ex) 로그인 상태 → not empty 세션변수
  • 내장객체 → 파라미터 (param)
  • ctrl + spacebar
728x90
반응형

'BackEnd' 카테고리의 다른 글

5/28 - Spring  (0) 2025.06.01
5/27 - ajax, JSON  (1) 2025.06.01
5/23 - 서블릿, 쿠키와 세션, 필터와 리스너, JSP  (0) 2025.06.01
5/22 - Servlet, 쿠키, 세션  (0) 2025.06.01
5/21 - 서블릿 응답 처리 방법  (0) 2025.06.01