jsp는 동적인 웹 페이지를 개발하기 위한 웹 프로그래밍 기술입니다. 이름에서처럼 자바언어를 사용하여 서버 측에서 웹 페이지들을 생성해 웹 브라우저로 전송해줍니다. 자바를 서버 개발 언어로 자리 잡게하는 일등공신입니다.
■ 짧은 코드로 동적인 웹 페이지를 생성할 수 있다.
■ 기본적인 예외는 자동으로 처리된다
■ 많은 확장 라이브러리를 사용할 수 있다
■ 스레드 기반으로 실행되어 시스템 자원을 절약해준다
- 사용자의 요청을 서블릿(Controller)가 받습니다.
- 서블릿(Controller)은 웹브라우저의 요청을 받아 View 또는 Model로 보낼 것인지 정하여 전송한다
- View페이지는 사용자에게 보여주는 역할만 한다 / model은 실직적인 기능 부분을 담당한다
Model은 db연동에 사용되는 자바 객체들이고, DB의 연동 로직을 제공하면서, DB에서 검색한 데이터가 저장되는 장소이다. 백그라운드에서 동작하는 로직을 처리하며, 어플리케이션이 '무엇'을 할지 정의한다. 내부비지니스 로직 처리 역할이다. Model 부분에서는 대부분이 데이터베이스와 연동하여 SQL를 처리해 주는 코드로 구성되어 있다.
위: dto->Member / 아래: MemberMapper
사용자가 보게 될 결과 화면을 출력하고, 화면에 무엇을 보여주는 역할을 한다. 컨트롤러 하위에 종속되어, 모델이 모델/컨트롤러사 보여주고자 하는 것을 보여줄 것이다
이를 위해 HTML/CSS의 마크업 언어를 사용한다
사용자의 입력처리와 흐름제어를 담당하며, 모델이 어떻게 처리할지 알려주는 역할, 화면의 로직 처리 부분이다.
컨트롤러는 JSP에 작성된 자바코드를 나타내는 것이고 Model과 연동하여 그 결과값을 VIEW에 띄어주는 역할을 수행한다.
Service는 비지니스 로직을 수행하여 데이터베이스에 접근하기위해 DAO를 이용하여 Controller가 요정한 결과 값을 받아오는 역할을 수행한다
DB는 DAO에서 받은 호출(요청)에 따른 코드를 실행하고 결과값을 다시 DAO에게 반화하여 DAO는 다시 역순으로 반환하여 사용자에게 최종적으로 리턴됩니다.
● 실제로 DB에 접근하여 data를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행합니다.
● Service와 DB를 연결하는 고리 역할을 합니다.
● Repository package가 바로 DAO입니다.
DTO는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체(Java Beans) 입니다.각 계층이 데이터를 주고받을 수 있도록 설정된 객체를 담는 곳이라고 생각하면 쉽게 이해 할 수 있다.
● DTO는 즉, getter/setter 메서드만 가진 클레스를 의미한다.
● DB에서 데이터를 얻어서 Service나 Controller 등으로 보낼 때 사용합니다.
<!DOCTYPE html> <html> <head> <meta charset="EUC-KR"> <title>회원가입</title> </head> <body> <div> <h3>회원가입</h3> <form action="joinaction.jsp" method="post"> 아이디 : <input type= "text" name = "id"/> <br /> 암호 :<input type= "text" name = "pw"/> <br /> 암호확인 : <input type= "text" name = "pw2"/> <br /> 이름 : <input type= "text" name = "name"/> <br /> 나이 : <input type= "number" name = "age"/> <br /> 연락처 :<input type= "text" name = "phone"/> <br /> 성별 : <input type= "text" name = "gender"/> <br /> <input type="submit" value = "회원가입" /> </form> </div> </body> </html>
form action="joinaction.jsp" method="post" : joinaction.jsp 쪽으로 이동을 시켜라!
br : 줄바꿈
post는 안보이게 7개의 이름 정보를 전송, get은 보이게 전송
<!DOCTYPE html> <html> <head> <meta charset="EUC-KR"> <title>회원가입처리</title> </head> <body> <% String id = request.getParameter("id"); // join에 있는 name값이 들어간다 String pw = request.getParameter("pw"); String pw2 = request.getParameter("pw2"); String name = request.getParameter("name"); String age = request.getParameter("age"); String phone = request.getParameter("phone"); String gender = request.getParameter("gender"); MemberMapper mapper = MyBatisContext.getSqlSession().getMapper(MemberMapper.class); Member obj = new Member(); obj.setUserid(id); obj.setUserpw(pw); obj.setUsername(name); obj.setUserage(Integer.parseInt(age)); obj.setUserphone(phone); obj.setUsergender(gender); int ret = mapper.insertMemberOne(obj); if(ret == 1){ response.sendRedirect("joinok.jsp"); // 404표시 }else{ response.sendRedirect("join.jsp"); // 회원가입으로 이동 } out.print(id); out.print(pw); %> <% %> </body> </html>
● 여기는 자바 문법이 가능함.
● 여기는 기본적으로 몇가지 클레스의 객체를 생성해 놓았음.
● HTTPServletRequest request; //요청
● HTTPServletResponse response; //응답
● System객체 생성 되어 있음.
join에 있는 name값이 들어가야한다.
DB에 추가하고 적절한 페이지로 이동시켜야 한다.
@WebServlet("/login.do") public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getRequestDispatcher("/WEB-INF/login2.jsp").forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub super.doPost(req, resp); } }
주소는 join1.do 똑같은데 /WEB-INF/join2.jsp이름에 따라 페이지에 출력된 값이 다르다.
1.JoinServlet.java -> 2.WEB-INF -> 3.join2.jsp
● joinServlet.java
● join1.jsp
● 결과