- 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>
'Programming > 국비학원' 카테고리의 다른 글
221007 - EL - empty 연산자, 내장객체, 스코프 우선순위 (0) | 2022.10.09 |
---|---|
221006 - JSP - 액션태그, EL (0) | 2022.10.07 |
220930 - JSP - 스크립트릿, 스코프(Scope) (0) | 2022.10.01 |
220929 - 세션 바인딩, JSP (0) | 2022.09.30 |
220928 - 서블릿 - 쿠키, 세션 (0) | 2022.09.29 |