2. - 현재 WAP 구성 형태 순차적으로 처리
- Action 또는 View마다 하나의 자원(JSP)이 필요
- Static Method를 주로 사용
3. HTML 코드를 재사용 스크립틀렛을
줄이고 간략히
표현
- Client 요청을 처리하는 객체를 ServletController로 단일화
- Model -> Data Object , Controller -> Servlet, View -> JSP
값을 가져오는 형태
String name = request.getParameter(“name”);
값을 Request에 저장하는 형태
MemberDTO dto = new MemberDTO();
request.setAttribute(“dto”, dto);
4. CUSTOM TAG
예) 테이블 목록
<address mode=”list”/>
등으로 사용가능
1. <%@ page import="package.classFile" %>
2. <%@ taglib uri="/WEB-INF/taglib.tld" prefix="honey" %>
<honey:printName />
예) 프로필 사용
<profile id=”desk”/>
등으로 사용가능
5. SERVLET & DISPATCHER
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
String name = request.getParameter(“name”);
Member name = new Member(name);
....... 처리 .......
request.setAttribute("result", member);
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/view.jsp");
rd.forward(request, response);
또는 rd.include(request, response);
} 1. JSP를 View로 사용하고 (JSP는 Servlet에서 생성한 결과만 출력하는 기능)
} 2. Servlet내에 doGet, doPost (각각 get, post 메소드를 처리) 내에서 비지니스
로직을 처리
3. 응답은 request, session등 상황에 맞는 저장소에 저장
4. 페이지 제어권 용도에 따라서 forward, include를 통해 View로 결과 보냄
6. FILTER
Web어플리케이션 전반에 영향을 끼치는 모듈
클래스 작성
public interface Filter {
public abstract void init(FilterConfig filterconfig) throws ServletException;
public abstract void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException;
public abstract void destroy();
} 모든 URL에
필터적용
<filter-mapping>
SetCharacterEncdoin
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
gFilter 를 적용함
</filter-mapping>
예) 동작하는 필터
예 ) public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
if(request instanceof HttpServletRequest) {
HttpServletRequest httpRequest = (HttpServletRequest)request; // class casting
HttpServletResponse httpResponse = (HttpServletResponse)response; // class casting
String userAgent = httpRequest.getHeader("user-agent").toUpperCase();
}
7. JSTL : The expression language
기존 코드 유형
<% %> 안에 작성하는 JSP
<% if (user.getRole() == "member")) { %>
<p>Welcome, member!</p>
<% } else { %>
스크립트 코드들과 많은
<p>Welcome, guest!</p>
<% } %> 양의 HTML로 복잡해지는
JSTL 코드의 작성을 쉽게
<jsp:setProperty name="user" property="timezonePref"
value='<%= request.getParameter("timezone") %>'/>
JSTL, 표현식
<c:out value="${user.firstName}"/>
<c:set var="timezone" scope="session" value="CST"/>
http://slog2.egloos.com/3581446
8. 인증 실체 확인 : 로그인
<web-app xmlns="http://caucho.com/ns/resin" public class MyAuthenticator extends AbstractAuthenticator
xmlns:resin="urn:java:com.caucho.resin"> {
<-- Authentication mechanism --> private PasswordUser _user;
<resin:BasicLogin/>
public MyAuthenticator()
<-- Role-based authorization --> {
<resin:Allow url-pattern="/foo/*"> _user = new PasswordUser("harry", "quidditch",
<resin:IfUserInRole role="user"/> new String[] { "user" });
</resin:Allow> }
<-- The authenticator --> public PasswordUser getUser(String userName)
<resin:DatabaseAuthenticator'> {
<resin:data-source>test</resin:data-source> if (userName.equals(_user.getName()))
<resin:password-query> return _user;
SELECT password FROM login WHERE username=? else
</resin:password-query> return null;
<resin:cookie-auth-query> }
SELECT username FROM LOGIN WHERE cookie=? }
</resin:cookie-auth-query>
<resin:cookie-auth-update>
UPDATE LOGIN SET cookie=? WHERE username=? 예) 사용자 인증 코드
</resin:cookie-auth-update>
<resin:role-query>
SELECT role FROM LOGIN WHERE username=? <web-app xmlns="http://caucho.com/ns/resin"
</resin:role-query> xmlns:resin="urn:java:com.caucho.resin">
</resin:DatabaseAuthenticator> ...
</web-app> <resin:XmlAuthenticator password-digest="none">
<resin:user name="Harry Potter" password="quidditch" group=
사용자 인증에 대한 내 <resin:user name="Draco Malfoy" password="pureblood" group=
</resin:XmlAuthenticator>
...
용을 web.xml에 설정 </web-app>
9. 인가 자원에 대한 접근 권한
<web-app xmlns="http://caucho.com/ns/resin"
xmlns:resin="urn:java:com.caucho.resin">
<resin:BasicLogin/>
<resin:Allow url-pattern="/foo/*">
<resin:IfUserInRole role="user"/>
</resin:Allow>
<resin:XmlAuthenticator>
...
</resin:XmlAuthenticator>
</web-app>
<web-app xmlns="http://caucho.com/ns/resin"
...
xmlns:resin="urn:java:com.caucho.resin">
<resin:Allow url-pattern="/webdav/*">
view에서 권한
<resin:IfUserInRole role='webdav'/>
</resin:Allow>
...
에 따라 처리
</web-app>
인증, 권한에 대한 내용
을 코드가 아니라
web.xml에 설정
10. RESTFUL
1. HTTP 프로토콜의 PUT, GET, POST, DELETE 등과 같은
Method를 의미 그대로 사용한다.
2. Resource에 대한 접근을 URI를 이용한다.
예) HTTP request가 REST 웹 서비스
GET /book HTTP/1.1
Host: www.jaso.co.kr
Accept: application/xml
위의 HTTP request는 책 목록을 가져 오기 위한 요청입니다. 특정 책의 상세 정보를 요청하는 경우에는 다음과 같
이 할 수 있습니다.
GET /book/isbn_0001 HTTP/1.1
Host: www.jaso.co.kr
Accept: application/xml
특정 책 정보를 삭제하는 경우는 다음과 같습니다.
DELETE /book/isbn_0001 HTTP/1.1
Host: www.jaso.co.kr
Accept: application/xml