본문 바로가기

Programming/국비학원

221005 - JSP - 예외 처리, welcome 페이지, 액션 태그

  • out 내장 객체로 출력하기
  • bmi.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>BMI</title>
</head>
<body>
	<form action="bmiResult2.jsp" method="post">
		이름 : <input type="text" name="name"><br>
		키 : <input type="text" name="height"><br>
		몸무게 : <input type="text" name="weight"><br>
		<input type="submit" value="계산하기">
	</form>
</body>
</html>

 

 

 

  • bmiResult2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
	String name = request.getParameter("name");
	int height = Integer.parseInt(request.getParameter("height"));
	int weight = Integer.parseInt(request.getParameter("weight"));
	int standard = (int)((height-100) * 0.9);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>BMI</title>
</head>
<body>
	<%
		if (name==null || name.length()==0){
	%>
	<h2>이름을 입력해주세요</h2>
	<a href='bmi.jsp'>비만도 체크</a>
	<%
		} else if (standard-5<=weight&&weight<=standard+5) {
	%>
	<h2><% out.print(name+"님 몸무게는"+weight+"kg으로, 정상몸무게입니다"); %></h2> 
    <%-- out 내장 객체 이용 --%>
	<%
		} else if (weight<standard-5){
	%> 
	<h2><%=name %>님은 <%=weight %>kg으로, 저체중입니다</h2>
	<%
		} else {
	%>
	<h2><%=name %>님은 <%=weight %>kg으로, 비만입니다</h2>
	<%
		} 
	%>
</body>
</html>

 

 

 

 

JSP 페이지 예외 처리
  • page 디렉티브 태그 이용한 예외 처리
  • adder.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>합계 입력 화면</title>
</head>
<body>
	<h2>숫자를 입력해주세요</h2>
	<form action="adder.jsp" method="get">
		1부터<input type="text" name="num">
		<input type="submit" value="계산하기">
	</form>
</body>
</html>

 

 

 

  • adder.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="adderException.jsp" %> <%-- 에러 발생시 adderException.jsp로 이동 --%>
<%
	int num = Integer.parseInt(request.getParameter("num"));
	int sum=0;
	for (int i=1;i<=num;i++){
		sum+=i;
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>합계</title>
</head>
<body>
	<h2>1부터 <%=num%>까지의 합 : <%=sum %></h2>
</body>
</html>

 

 

 

  • adderException.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isErrorPage="true"%> <%-- isErrorPage : 예외 처리용 페이지 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>에러 페이지</title>
</head>
<body>
	<h2><%=exception.toString() %></h2> <%-- exception 내장 객체 => 예외 내용 출력 --%>
	<h2><%=exception.getMessage() %></h2> <%-- 예외 메시지 출력 --%>
	<h2>숫자만 입력해주세요.</h2>
	<a href="adder.html">다시 하기</a>
</body>
</html>

//
java.lang.NumberFormatException: For input string: "fff"
For input string: "fff"
숫자만 입력해주세요.
다시 하기

 

 

 

 

  • web.xml 설정 이용한 예외 처리
  • errorTest/number.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>에러 테스트 페이지</title>
</head>
<body>
	<h1>ABC 쇼핑몰</h1>
</body>
</html>

=> 주소에 /num.jsp 오타 입력 시 404 에러
=> 하단 코드 작성 시 500 에러 (받을 파라미터가 없어 null을 값으로 받는데 이때 parseInt 실행 불가함)
<%
int num = Integer.parseInt(request.getParameter("num"));
%>

 

 

 

  • errorProcess/error404.jsp (예외 처리용 페이지)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>404 예외처리 페이지</title>
</head>
<body>
	<img src="../images/error404.jpg" alt="404 에러" width=800>
	<h2>요청한 페이지가 존재하지 않습니다.</h2>
	<h2>주소를 다시 확인해주시기 바랍니다.</h2>
</body>
</html>

 

 

 

  • errorProcess/error500.jsp (예외 처리용 페이지)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>500 예외처리 페이지</title>
</head>
<body>
	<img src="../images/error500.jpg" alt="500 에러" width=800>
	<h2>서비스 실행 중 오류가 발생했습니다.</h2>
	<h2>다시 실행해주세요.</h2>
</body>
</html>

 

 

 

  • WEB-INF/web.xml
  <error-page>
  	<error-code>404</error-code>
  	<location>/errorProcess/error404.jsp</location>
  </error-page>
  <error-page>
    	<error-code>500</error-code>
  	<location>/errorProcess/error500.jsp</location>
  </error-page>

=> 코드 추가 시 해당 에러 발생했을 때 지정한 페이지로 이동

 

 

※ page 디렉티브 태그 & web.xml 동시 설정시 page 태그가 우선됨

 

 

 

 

welcome 페이지 설정

디렉토리만 입력해도 해당 웹페이지로 응답

 

  • main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인페이지</title>
</head>
<body>
	<h1>ABC 쇼핑몰</h1>
	<h2>다양한 가전제품을 프리미임 가격대로!</h2>
</body>
</html>

 

 

 

  • web.xml
  <welcome-file-list>
    <welcome-file>main.jsp</welcome-file>
  </welcome-file-list>

 

=> 추가

 

 

 

 

JSP 스크립트 요소
  •  
  • search.jsp
<%@ 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>회원정보 조회하기</h2>
	<form action="member.jsp">
		이름 : <input type="text" name="name"><br>
		<input type="submit" value="조회하기">
	</form>
</body>
</html>

 

 

 

  • member.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    import="java.util.*, jsp01.ex02.*"
%>
<%
	request.setCharacterEncoding("utf-8");
	String _name = request.getParameter("name");
	
	MemberVO vo = new MemberVO();
	vo.setName(_name); //회원 이름 세팅
	
	MemberDAO dao = new MemberDAO();
	List memberList = dao.listMembers(vo); //회원 객체 -> 리스트에 전달
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원정보 출력창</title>
</head>
<body>
	<h2>회원정보 출력</h2>
	<table border="1" align="center">
		<tr align="center" bgcolor="azure">
			<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td><td>가입일자</td>
		</tr>
		<%
			for (int i=0;i<memberList.size();i++){
				MemberVO show = (MemberVO) memberList.get(i);
				String id = show.getId();
				String pwd = show.getPwd();
				String name = show.getName();
				String email = show.getEmail();
				Date joindate = show.getJoindate();
		%>
		<tr align="center" bgcolor="beige">
			<td><%=id %></td><td><%=pwd %></td><td><%=name %></td><td><%=email %></td><td><%=joindate %></td>
		</tr>
		<%} %>
	</table>
</body>
</html>

 

 

 

  • MemberDAO.java
public class MemberDAO {

	private Connection con; 
	private PreparedStatement pstmt; 
	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) {
			System.out.println("DB 연결 실패");
		}
	}
	
	//회원정보 조회 (특정 회원 or 전체)
	public List<MemberVO> listMembers(MemberVO vo){
		List memberList=new ArrayList();
		String _name = vo.getName();
		try {
			con = dataFactory.getConnection();
			String query = "select * from member_list";
			if (_name!=null && _name.length()!=0) {
				query+=" where name=?";
				pstmt = con.prepareStatement(query);
				pstmt.setString(1, _name);
			} else { //null 또는 length=0 이면 전체 목록 조회
				pstmt = con.prepareStatement(query);
			}
			ResultSet rs = pstmt.executeQuery();
			while(rs.next()) {
				String id = rs.getString("id");
				String pwd = rs.getString("pwd");
				String name = rs.getString("name");
				String email = rs.getString("email");
				Date joinDate = rs.getDate("joindate");
				
				MemberVO vo2 = new MemberVO();
				vo2.setId(id);
				vo2.setPwd(pwd);
				vo2.setName(name);
				vo2.setEmail(email);
				vo2.setJoindate(joinDate);
				
				memberList.add(vo2);
			}
			rs.close();
			pstmt.close();
			con.close();
		} catch(Exception e) {
			System.out.println("DB 조회 중 에러");
		}
		return memberList;
	}

}

 

 

 

 

https://velog.io/@ansalstmd/JSP4.-%EC%95%A1%EC%85%98-%ED%83%9C%EA%B7%B8

액션 태그

: JSP에서 스트립트릿의 자바코드 제거, 더 쉽고 편리하게 작업할 수 잇는 태그 형태로 기능 제공

 

1. <jsp:include>
: 이미 있는 JSP를 현재 JSP에 포함하는 태그

2. <jsp:forward>
: 서블릿의 RequestDispatcher 클래스의 포워딩 기능을 대신하는 태그

3. <jsp:useBean>
: 객체 생성하는 new 연산자를 대신하는 태그
※ Bean: 자바 클래스 객체

4. <jsp:setProperty>
: setter 대신하는 태그

5. <jsp:getProperty>
: getter 대신하는 태그

 

 

 

 

  • include

flush=true
=> 출력 버퍼의 내용을 웹브라우저에 전달
=> HTTP 헤더 정보도 함께 전달되기 때문에 이후로는 헤더 정보를 추가해도 반영 X

 

 

 

  • vsimage.jsp (포함시킬 페이지)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
	String name = request.getParameter("name"); //jsp:param에서 매개변수 전달받음
	String imgName = request.getParameter("imgName");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>이름은 <%=name %>입니다</h2>
	<img src="./images/<%=imgName %>">
</body>
</html>

 

 

 

  • include1.jsp
<%@ 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>
	<h1>반려동물 쇼핑몰</h1>
	<jsp:include page="vsimage.jsp" flush="true"> <%-- page: 포함시킬 페이지 --%>
		<jsp:param value="달마시안" name="name" /> 
        <%-- param: 다른 페이지에 값 전달 value: 전달할 값 name: 매개변수명  --%>
		<jsp:param value="dalmatian.jpg" name="imgName" />
	</jsp:include>
	<h2>반려동물을 위한 선택!</h2>
</body>
</html>

 

 

 

  • include2.jsp
<%@ 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>
	<h1>반려동물 쇼핑몰</h1>
	<jsp:include page="vsimage.jsp" flush="true">
		<jsp:param value="셰퍼드" name="name" />
		<jsp:param value="shepherd.jpg" name="imgName" />
	</jsp:include>
	<h2>반려동물을 위한 선택!</h2>
</body>
</html>

 

 

 

 

  • forward 
  • login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
	<%
		String msg = request.getParameter("msg");
		if (msg!=null && msg.length()!=0){
	%>
	<h2><%=msg %></h2>
	<%} else { %>
		<h2>로그인</h2>
	<%} %>
	<form action="result.jsp" method="post">
		아이디 <input type="text" name="id"><br>
		비밀번호 <input type="text" name="pw"><br>
		<input type="submit" value="로그인">
		<input type="reset" value="다시 입력">
	</form>
</body>
</html>

 

 

 

  • result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% String msg = "아이디를 입력해주세요"; %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 결과</title>
</head>
<body>
	<%
		String id = request.getParameter("id");
	
		if (id.length()==0||id==null){
	%>
	<jsp:forward page="login.jsp">
		<jsp:param value="<%=msg %>" name="msg"></jsp:param>
	</jsp:forward>
	<%} %>
	<h2>환영합니다. <%=id %>님</h2>
</body>
</html>