REST API
예> checkbox
check된 값만 서버에 전달이 된다
이름을 먼저 조회하고 나중에 값을 얻을 수 있다
cf) java.util.Iterator vs java.util.Enumeration
while (ite.hasNext()){
ite.next();
}
Enumeration<String> enu = request.getParameterNames();
while(enu.hasMoreElements()) {
String name = enu.nextElement();
String value = request.getParameter(name);
System.out.println(name +" "+ value);
}
setAttribute(String name, Object o) 로 저장
getAttribute(String name) 로 조회
removeAttribute(String name) 로 삭제
getAttributeNames() 로 name부터 조회
1번 요청 (/SetServlet)
웹브라우저 ------------------>
doGet(HttpServletRequest req,...){
request.setAttribute("request", "홍길동");
String request_scope = (String)request.getAttribute("request");
}
2번 요청 (/GetServlet)
웹브라우저 ------------------>
doGet(HttpServletRequest req,...){
String request_scope = (String)request.getAttribute("request"); // null 반환
}
setAttribute(String name, Object o) 로 저장
getAttribute(String name) 로 조회
removeAttribute(String name) 로 삭제
getAttributeNames() 로 name부터 조회
id전송
JSESSIONID=5B5C1DC28B5133BE0E7B19931C4EC058
웹브라우저(크롬) ---------------------> Tomcat (요청한 크롬 웹브라우저 id 저장함)
id전송
JSESSIONID=12F7E322D0401F556A4A27F4B0610037
웹브라우저(엣지) ---------------------> Tomcat (요청한 엣지 웹브라우저 id 저장함)
<session-config>
<session-timeout>60</session-timeout>
</session-config>
session.setMaxInactiveInterval(60*60); // 3600초, 1시간
session.removeAttribute("key");
session.invalidate()
setAttribute(String name, Object o) 로 저장
getAttribute(String name) 로 조회
removeAttribute(String name) 로 삭제
getAttributeNames() 로 name부터 조회
doGet( , ) {
ServletContext application = getServletContext();
application.setAttribute("application", "유관순");
}
1- page directive 태그
: JSP에게 정보를 알려줄 때 (contentType, import 등)
: 여러 번 사용 가능
<%@ page 속성명="속성값" 속성명="속성값" ... %>
: 예>
<%@ page contentType="text/html; charset=utf-8" %>
==> 서블릿의 response.setContentType("text/html;charset=utf-8") 기능
<%@ page import="java.util.ArrayList" %>
==> 서블릿의 import java.util.ArrayList;
2- include directive 태그
: 화면을 재사용할 때
<%@ include file="속성값" %>
3- taglib directive 태그
<%@ taglib prefix="속성값" uri="속성값" %>
<%!
int num = 10; // 인스턴스 변수
public void a(){ // 인스턴스 메서드
System.out.println(num);
}
%>
<%
// 내장변수 (내장객체) 라고 부른다
request.메서드
response.메서드
session.메서드
application.메서드
config.메서드
out.print("값");
%>
<%
int num = 10;
int[] arr = {10,20};
for(int k : arr) {
System.out.println(k);
}
%>
<%
String userid = request.getParameter("userid");
HttpSession session = request.getSession();
request.setCharacterEncoding("utf-8");
%>
브라우저에서 출력됨
{리터럴값+1} : 산술 연산 가능
{리터럴값 >1 && 리터럴값 <20} : 논리 연산 가능
${ key } ★
서블릿에서 scope에 저장할 때 지정한 key값으로 자동으로 key에 해당하는 데이터를 얻고 웹브라우저에 출력함
- 서블릿 작업
request.setAttribute("userid", "홍길동");
- JSP 작업
가. <% %> 이용
<%
String userid =
(String)request.getAttribute("userid");
out.print(userid);
%>
나. %{key} 이용
${userid} // 훨씬 간단함
<%
User user = (User)request.getAttribute("user");
String username = user.getUsername();
int age = user.getAge();
%>
이름: <%= username %>
나이: <%= user.getAge() %>
이름: ${user.username}
나이: ${user.age}
List<User> list = Arrays.asList(new User("홍길동1", 20),
new User("홍길동2", 30));
request.setAttribute("userList", list);
<%
List<User> list = (List<User>)request.getAttribute("userList");
/* User user1 = list.get(0);
User user2 = list.get(1); */
%>
user1 이름 : <%= list.get(0).getUsername() %>
user1 나이 : <%= list.get(0).getAge() %>
user2 이름 : <%= list.get(1).getUsername() %>
user2 나이 : <%= list.get(1).getAge() %>
${userList}
user1 이름 : ${userList[0].username}
user1 나이 : ${userList[0].age}
user2 이름 : ${userList[1].username}
user2 나이 : ${userList[1].age}
request scope : ${requestScope.userid}
session scope : ${sessionScope.userid}
application scope : ${applicationScope.userid}
여러 커스텀 태그를 추려서 표준 (standard)로 제공. 이 표준화된 커스텀 태그를 JSTL이라고 부른다
다양한 기능 제공 (반복, 조건,...)
정확히는 JSTL은 spec임
EL과 같이 사용됨
JSP에서 커스텀 태그를 사용
커스텀 태그 작성 방법
java 클래스 + 태그 정의서 (TLD 파일)
=> .class + .tld
(*.jar)
1- lib 폴더에서 2개의 jar 파일 복사
2- 서블릿 만들고 scope에 저장
=> scope에 저장된 데이터를 EL + JSTL 이용해서 핸들링함
3- JSP 파일에 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 붙여넣어야 사용 가능!!
<body>
내용
<hr>
<%@ include file="copyright.jsp" %>
</body>
<body>
내용
<hr>
<jsp:include page="copyright.jsp" flush="true">
</body>
요청
웹브라우저 ----------------> 서블릿
|
| 위임 처리 (요청)
|
<----------------- JSP
응답
public void doGet (HttpServletRequest request, HttpServletResponse response) {
response.sendRedirect("타겟");
}
1- 요청 (/xxx)
웹브라우저 ------------------> MainServlet("/xxx")
2- doGet실행
HttpServletRequest request (100번지) 생성
request(100번지).setAttribute("xxx","홍길동")
3- response.sendRedirect(" a.jsp");
<--------------
4- 응답 (서블릿이 응답)
5- 재요청(a.jsp)
-----------------> a.jsp HttpServletRequest request 200번지)
<------------------ request.getAttribute("xxx"); null 반환
6- 응답
public void doGet (HttpServletRequest request, HttpServletResponse response) {
RequestDispatcher dis = request.getRequestDispatcher("타겟");
dis.forward(request, response);
}
서버
1- 요청
웹브라우저 ------------------> MainServlet("/xxx")
2- doGet실행
HttpServletRequest request(100번지) 생성
request(100번지).setAttribute("xxx","홍길동")
|
| 3- 포워드 위임 (요청)
request.getRequestDispatcher("a.jsp")
dis.forward(request(100번지), response);
<----------------- a.jsp
<%
request(100번지).getAttribute("xxx")
%>
EmpService(인터페이스)
JComponent04_JTextField <---> EmpServiceImpl <---> EmpDAO <---> MySQL
(main 메서드)
EmpService(인터페이스)
EmpListServlet <---> EmpServiceImpl <---> EmpDAO <---> MySQL
|
|
list.jsp
: 클라이언트 (웹브라우저)와 서버 (tomcat) 연결 관리
클라이언트 서버
브라우저 a.jsp (데이터:홍길동)
b.jsp
클라이언트에 저장 : 쿠키 서버에 저장 : 세션
Cookie 이용 HttpSession 이용
HttpSession session = request.getSession();
String n = (String)session.getAttribute("x");
if(n!=null) {
System.out.println(n.length); -> 에러 발생할 수 있음
} else {
// a.jsp를 거치도록 처리해야된다 (로그인 작업)
response.sendRedirect("a.jsp");
}