반응형
<MVC 아키텍쳐>
MVC | 이전 |
---|---|
Model | DAO |
View | HTML 영역 |
Controller | java영역(서블릿) |
MODEL(DAO)
package study;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class BangMyungDAO_OracleImpl implements BangMyungDAO
{
@Override
public void add(BangMyungVO vo) throws Exception
{
Connection conn = null;
Statement stmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn =
DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:32771/xe",
"system", "1234");
stmt = conn.createStatement();
String sql = "insert into bangmyung_t values (
seq_bangmyung.nextval, '"+
vo.getGul() + "', sysdate )";
stmt.executeUpdate( sql );
}
catch( Exception e ){ throw e; }
finally {
if( stmt != null ) stmt.close();
if( conn != null ) conn.close();
}
}
@Override
public List<BangMyungVO> findAll() throws Exception {
List<BangMyungVO> ls = new ArrayList<BangMyungVO>();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn =
DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:32771/xe",
"system", "1234");
stmt = conn.createStatement();
String sql = "SELECT no, gul, the_time FROM bangmyung_t order by
no desc";
rs = stmt.executeQuery( sql );
while( rs.next() ) {
BangMyungVO vo = new BangMyungVO();
vo.setNo( rs.getInt("no") );
vo.setGul( rs.getString("gul") );
vo.setTheTime( rs.getString("the_time") );
ls.add( vo );
}
}
catch( Exception e ){}
finally {
if( rs != null ) rs.close();
if( stmt != null ) stmt.close();
if( conn != null ) conn.close();
}
return ls;
}
}
VIEW(HTML)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="sso" %>
<!DOCTYPE>
<html>
<body>
<table border='1'>
<tr>
<td>No</td>
<td>글</td>
<td>작성시간</td>
</tr>
<sso:forEach varStatus="vs" var="vo" items="${ lst }">
<tr bgColor="${ (vs.count % 2 != 0)?'#aabbcc':'#bbccdd' }">
<td>${ vs.count }</td>
<td>${ vo.no }</td>
<td>${ vo.gul }</td>
<td>${ vo.theTime }</td>
</tr>
</sso:forEach>
</table>
<form method="POST" action="bangmyung_add.jsp">
<input type="text" name="gul" size="50"/>
<input type="submit"/>
</form>
</body>
</html>
CONTROLLER(JAVA)
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="java.util.List, study.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="sso" %>
<%!
public void submit() {
System.out.println("submit");
}
%>
<%
// 1. 변수선언
List<BangMyungVO> rl = null;
Exception err = null;
// 2. DB 연동
BangMyungDAO dao = new BangMyungDAO_OracleImpl();
try {
rl = dao.findAll();
} catch (Exception e) {
err = e;
}
// 3. 흐름 만들기
if ( rl == null || err != null ) {
response.setCharacterEncoding("utf-8");
response.sendRedirect("/study3/error.jsp");
} else {
request.setAttribute("lst", rl);
RequestDispatcher rd = request.getRequestDispatcher("/Test125_1.jsp");
rd.forward(request, response);
%>
<!DOCTYPE>
<html>
<body>
<table border='1'>
<tr>
<td>No</td>
<td>글</td>
<td>작성시간</td>
</tr>
<sso:forEach varStatus="vs" var="vo" items="${ lst }">
<tr bgColor="${ (vs.count % 2 != 0)?'#aabbcc':'#bbccdd' }">
<td>${ vs.count }</td>
<td>${ vo.no }</td>
<td>${ vo.gul }</td>
<td>${ vo.theTime }</td>
</tr>
</sso:forEach>
</table>
<form method="POST" action="bangmyung_add.jsp">
<input type="text" name="gul" size="50"/>
<input type="submit"/>
</form>
<% } %>
</body>
</html>
MVC 만들기
package mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Controller {
public String handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception;
}
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestMapping {
public String value();
}
package mvc;
//import 생략~
public class DispatcherServlet extends HttpServlet {
private Map<String, Controller> map = null;
@Override
public void init(ServletConfig config) throws ServletException{
map = new Hashtable<String, Controller>();
String cs = "mvc.CtrlList,mvc.CtrlAdd2";
for(String str : cs.split(",")){
try{
//해당 클래스 가져오고
Class<?> cls = Class.forName(str);
//RequestMapping에서 지정된 url 패턴 따오고
RequestMapping an = cls.getAnnotation(RequestMapping.class);
//얘 때문에 Controller에너는 Annotation!
System.out.println("this is an : " + an);
//해당 controller instance 받아오고
Controller value = (Controller) cls.newInstance();
// 이름이 str인 Controller 클래스 찾기
// url 따기
String key = an.value();
//url-pattern과 controller 매핑
map.put(key, value);
}catch (Exception e) {}
} //String[] cs2 = cs.split(","); for(int i=0;i<cs2.length;i++)
System.out.println(map.toString());
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse
response)
throws IOException, ServletException {
}
}
package mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@RequestMapping("/apple_list.do")
public class CtrlList implements Controller {
@Override
public String handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return null;
}
package mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@RequestMapping("/apple_add2.do")
public class CtrlAdd2 implements Controller{
@Override
public String handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return null;
}
}
JSP MODEL1 / MVC MODEL2
<model1>
가장먼저 들어오는 곳이 JSP이다.
JSP에서 비즈니스 로직, VIEW모든 것을 처리한다.
<model2>
가장먼저 요청하는 곳이 서브릿단이다.
비즈니스 로직을 처리하는 서블릿을 완전히 분리시켜서 VIEW단과 로직을 처리하는 단을 분리시킨다.
Controller 추가해야할 때
<servlet>
<servlet-name>abcd2</servlet-name>
<servlet-class>mvc.DispatcherServlet</servlet-class>
<init-param>
<param-name>controllers</param-name>
<param-value>
mvc.CtrlList,
mvc.CtrlAdd2
</param-value>
</init-param>
</servlet>
<!-- 여기 이렇게 controller를 추가하면 되지 않을까! -->
public void init(ServletConfig config) throws ServletException{
map = new Hashtable<String, Controller>();
String cs = config.getInitParameter("controllers");
HTML 소스 긁어오는애
package main;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;
public class Test126 {
public static void main(String[] args) throws Exception{
URL rl = new URL("http://localhost:8081/0802/apple_list.do");
URLConnection ucon = rl.openConnection();
InputStream in = ucon.getInputStream();
BufferedReader bin = new BufferedReader(new InputStreamReader(in,
"UTF-8")); //>> char 단위로 읽게해주는 adapter
//사실 UTF-8 빼도 되더라 얜 응답 내용
String l = null;
while((l = bin.readLine()) !=null){
System.out.println(l);
}
in.close();
}
}
java.net.URL은 이것 자체가 작은 웹브라우저의 역할을 한다. 요청을 날리고 그에 해당하는 응답을 받아들인
다 안드로이드 앱에서 버튼을 누르면 오늘의 배송정보가 넘어오는 ? 배송정보는 서버에 올라와 있는 상태! => 이
다운 받는 역할, 서버에 존재하는 배송정보를 다운받는 역할을 수행한다. 소켓으로 다 짜는 것이 아니라 http 프
로토콜로 서버와 통신할 때는 이 클래스를 주로 이용한다.
소켓으로 다 짜는 것이 아니라 http 프로토콜로 서버와 통신할 때는 이 클래스를 주로 이용한다.
앱 같은 경우에서 서버로부터 많은 데이터를 다운 받아야 할 경우에 URL 클래스를 이용하여 jsp 파일로부터 정
보를 다운받는다
이게 워낙 많이 쓰이다 보니 이를 강화한 오픈 소스 라이브러리가 등장 = apache http client 프로젝트 = 안
드로이드의 http 기반 표준 통신 수단
암호가 맞으면 다운, 아니면 안됨
<%@ page contentType="text/plain; charset=UTF-8" pageEncoding="EUC-KR" %><%
String pw = request.getParameter("pw");
if(pw.equals("1234")){
String[] l = {"사과", "귤", "배", "토마토"};
String nl = "\r\n"; //줄 바꿈 표시
for (int i = 0; i < l.length; i++) {%>
<%=l[i]%><%=nl%>
<%}}else{%>
암호틀림
<%}%>
public static void main(String[] args) throws Exception{
URL rl = new URL("http://localhost:8081/0802/Test126.jsp?pw=1230");
URLConnection ucon = rl.openConnection();
InputStream in = ucon.getInputStream();
BufferedReader bin = new BufferedReader(new InputStreamReader(in, "UTF8")); //>> char 단위로 읽게해주는 adapter
//사실 UTF-8 빼도 되더라 얜 응답 내용
String l = null;
while((l = bin.readLine()) !=null){
System.out.println(l);
}
in.close();
}
반응형
'Language Study > Java' 카테고리의 다른 글
5. 자바, 더 정확하게 (0) | 2019.09.08 |
---|---|
제주에서 자바_Week4 (0) | 2019.08.12 |
##자바 헷갈리는 이론 (0) | 2019.08.01 |
제주에서 자바_Week3_3 (0) | 2019.07.31 |
제주에서 자바_Week3_2 (0) | 2019.07.30 |