Servlet은 HTML in Java이기 때문에 HTML에 해당하는 모든 태그들에 대해서 out.println()을 해줘야했지만
JSP는 Java in HTML이기 때문에 Java에 해당하는 부분만 script 문법으로 추가해준다.
Servlet programming 보다 훨씬 간편하고 간단하게 해결 가능
JSP 스크립팅 요소(Scripting Element)
1. 선언(Declaration)
멤버변수 선언이나 메소드를 선언 하는 영역
<%!
String name;
public void init(){
name = "땅지원";
}
%>
2. 스크립트릿(Scriptlet)
Client 요청 시 매번 호출 영역, Servlet의 service()에 해당되는 영역, request, response에 관련된 코드 구현
<%
for(int i=1;i<11;i++){
out.println("<li>"+i+"</li>");
}
%>
3. 표현식(Expression)
데이터를 브라우저에 출력할 때 사용
<h2>Name : <%= name%></h2>
4. 주석(Comment)
<%-- JSP 주석 : servlet으로 변환 -> complie시 코드 노출 x --%>
<!-- HTML 주석 : 코드 노출 o -->
** JSTL(JSP Standard Tag Library)
JSP에서 Java코드를 사용하기에 불편해서 나온 라이브러리
JSP는 if,for같은 조건문 반복문이 많음
jsp는 MarkUp language에 가까우려면 Tag로 이루어지면 가장 좋은 코드가 되겠다라고 되서EL, JSTL을 씀
=> script <% %>이런게 사라지고 Tag로 바꾼다
JSP 기본 객체
request
HTML 폼 요소의 선택 값 등 사용자 입력 정보를 읽어올 때 사용
response
사용자 요청에 대한 응답을 처리하기 위해 사용
session
클라이언트에 대한 세션 정보를 처리하기 위해 사용
applicaton
웹 서버의 애플리케이션 처리와 관련된 정보를 레퍼런스하기 위해 사용
* JSP에서 Object import 하는법
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="com.ssafy.ws.step3.dto.Book"
pageEncoding="UTF-8"%>
* JSP에서 객체 가지고 오기 - request.getAttribute()
<% Book book=(Book)request.getAttribute("book"); %>
* JSP의 name에 맞춰서 parameter 가져오기(In Servlet) - request.getParameter()
String id = request.getParameter("id");
String pass = request.getParameter("pass");
String[] hobby = request.getParameterValues("hobby");
* 문자열 name이름으로 Object형 데이터를 저장한다 - setAttribute
void setAttribute(String name, Object value)
request.setAttribute("book", book);
request.setAttribute("message", "로그인 실패");
session.setAttribute("user", new User(id, pass, "김싸피"));
* WEB Page(View select)
기존 요청 객체를 그대로 새로운 페이지에 전달, 메시지 바디의 데이터가 그대로 유지
request.getRequestDispatcher("/regist_result.jsp").forward(request, response);
요청 객체를 다시 생성해서 새로운 연결을 만든다, 메시지 바디의 데이터가 모두 사라진다
response.sendRedirect(request.getContextPath()+"/regist.jsp");
<regist.jsp>
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<style>
label{
display: inline-block;
width: 80px;
}
textarea {
width: 100%;
}
</style>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@ include file="/include/header.jsp" %>
<h1>SSAFY 도서 관리</h1>
<!-- action을 sendRedirect로 쓰기위해서 절대경로를 해야되기때문에 수정해줘야함 -->
<form method="post" action="/main">
<fieldset>
<legend>도서 입력</legend>
<!-- front-controller pattern에서 요청을 구분하기 위한 parameter -->
<input type="hidden" name="action" value="save">
<label for="isbn">도서번호</label>
<input type="text" id="isbn" name="isbn"><br>
<label for="title">도서명</label>
<input type="text" id="title" name="title"><br>
<label for="author">저자</label>
<input type="text" id="author" name="author"><br>
<label for="price">가격</label>
<input type="number" id="price" name="price"><br>
<label for="desc">설명</label>
<br>
<textarea id="desc" name="desc"></textarea><br>
<input type="submit" value="등록">
<input type="reset" value="취소">
</fieldset>
</form>
</body>
</html>
<regist_result.jsp>
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="com.ssafy.ws.step3.dto.Book"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@ include file="/include/header.jsp" %>
<h1>도서 등록 결과</h1>
<h3>등록 도서 정보</h3>
<% Book book = (Book)request.getAttribute("book"); %>
<table border = "1">
<tr>
<td>항목</td>
<td>내용</td>
</tr>
<tr>
<td>도서번호</td>
<td><%=book.getIsbn() %></td> <!-- ${book.isbn} -->
</tr>
<tr>
<td>도서명</td>
<td><%=book.getTitle() %></td> <!-- ${book.title} -->
</tr>
<tr>
<td>도서저자</td>
<td><%=book.getAuthor() %></td> <!-- ${book.author} -->
</tr>
<tr>
<td>가격</td>
<td><%=book.getPrice() %></td> <!-- ${book.price} -->
</tr>
<tr>
<td>설명</td>
<td><%=book.getDesc() %></td> <!-- ${book.desc} -->
</tr>
</table>
<a href = "./regist.jsp">추가 등록</a>
</body>
</html>
* 여러개 action을 Mapping 가능
@WebServlet(urlPatterns = {"/main", "/user"})
<MainServlet.java>
package com.ssafy.ws.step3.dto;
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 javax.servlet.http.HttpSession;
@WebServlet("/main")
public class MainServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public MainServlet() {
super();
}
//만약 doGet, doPost의 method가 틀리다면 각각 구현하지만 여기선 똑같으니까
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}
private void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
if (action.equals("login")) {
doLogin(request,response);
}
else if(action.equals("logout")) {
doLogout(request,response);
}
else if(action.equals("regist")) {
doregist(request,response);
}
else if(action.equals("save")) {
save(request,response);
}
else if(action.equals("home")) {
home(request,response);
}
}
//data validcheck -> business method call -> scope data save -> view select
private void doLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String id = request.getParameter("id");
String pass = request.getParameter("pass");
//MVC에서 business method로 User user = dao.loginCheck(id, pass); 따로 구현해서 해야됨
if (id.equals("ssafy") && pass.equals("1234")) {
//login 성공 - session 생성 후 정보 저장
HttpSession session = request.getSession(); //request.getSession(true);
session.setAttribute("user", new User(id,pass,"땅지원"));
} else {
//login 실패
request.setAttribute("message", "로그인 실패");
}
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
private void doLogout(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);
if (session != null)
session.invalidate(); //session 소멸
response.sendRedirect(request.getContextPath()+"/index.jsp");
}
private void doregist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect(request.getContextPath()+"/regist.jsp");
}
private void save(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Book book = new Book(request.getParameter("isbn"),
request.getParameter("title"),
request.getParameter("author"),
Integer.parseInt(request.getParameter("price")),
request.getParameter("desc")
);
request.setAttribute("book", book);
request.getRequestDispatcher("/regist_result.jsp").forward(request, response);
}
private void home(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
'Backend > Java' 카테고리의 다른 글
[JAVA] Origin 서버가 대상 리소스를 위한 현재의 representation을 찾지 못했거나, 그것이 존재하는지를 밝히려 하지 않습니다. (1) | 2022.09.21 |
---|---|
Cookie & Session (0) | 2022.09.20 |
Servlet Programming (0) | 2022.09.16 |
JDBC 프로그래밍 (0) | 2022.09.14 |
Java8 (0) | 2022.08.05 |