[Spring] - (6) ajax, AOP

2022. 10. 10. 15:30Dev.Program/Java & Spring

728x90

< ajax >

https://mvnrepository.com/search?q=jackson

 

< pom.xml >


<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.4</version>
</dependency>

 

> ajax 는 주소값 이동을 안하고 출력결과를 리턴하기 때문에 데이터를 리턴함!

그래서 ajax 용 컨트롤러를 따로 만들어준다

======== AjaxController.java

package com.itwillbs.controller;

import org.springframework.web.bind.annotation.RestController;

@RestController
public class AjaxController {

}

 

< join,jsp >

<script src="<c:url value='/resources/script/jquery-3.5.0.js'/>"></script>
  • 제이쿼리 주소 변경
//아이디 중복 체크
$('.dup').click(function(){
if($('#id').val()==""){
$('#dupCheck').html("아이디 입력하세요");
return;
}
$.ajax('<c:url value="/member/idCheck"/>',{
data:{id:$('#id').val()},
success:function(rdata){
$('#dupCheck').html(rdata);
}
});
// $.ajax('dupCheck.jsp',{
// data:{id:$('#id').val()},
// success:function(rdata){
// $('#dupCheck').html(rdata);
// }
// });
});
  • 가상주소로 이동하게끔 변경

 

< AjaxController.java >

package com.itwillbs.controller;

import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.itwillbs.domain.MemberBean;
import com.itwillbs.service.MemberService;

@RestController
public class AjaxController {

@Inject
private MemberService memberService;

// /member/idCheck
@RequestMapping(value = "/member/idcheck", method = RequestMethod.GET)
public ResponseEntity<String> idCheck(HttpServletRequest request) {
ResponseEntity<String> entity = null;
String result = "";
try {
// id 파라미터 가져오기
String id = request.getParameter("id");
// getMember(id);
MemberBean mb = memberService.getMember(id);
if(mb != null) {
// 아이디 중복
result = "iddup";
} else {
// 아이디 사용가능
result = "idok";
}
// entity 결과 저장
entity = new ResponseEntity<String>(result, HttpStatus.OK); // 잘 넘어갔을 때
} catch (Exception e) {
e.printStackTrace();
entity = new ResponseEntity<String>(result, HttpStatus.BAD_REQUEST); // 잘 못넘어갔을 때
}
// 리턴 아이디 중복여부 ResponseEntity<String>데이터 리턴
return entity;
}

}
 
  • inject 필수

 

< join.jsp >

//아이디 중복 체크
$('.dup').click(function(){
if($('#id').val()==""){
$('#dupCheck').html("아이디 입력하세요");
return;
}

$.ajax('<c:url value="/member/idcheck"/>',{
data:{id:$('#id').val()},
success:function(rdata){
if(rdata=="idok") {
rdata="아이디 사용가능";
} else {
rdata = "아이디 중복";
}
$('#dupCheck').html(rdata);
}
});


// $.ajax('dupCheck.jsp',{
// data:{id:$('#id').val()},
// success:function(rdata){
// $('#dupCheck').html(rdata);
// }
// });
});

 

< top.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<header>
<%
// String id = (String)세션값 가져오기
String id=(String)session.getAttribute("id");
// 세션값 없으면  login join
//      있으면 ..님  logout
if(id==null){
%><div id="login"><a href="<c:url value='/member/login'/>">login</a> | <a href="<c:url value='/member/insert'/>">join</a></div><%
}else{
%><div id="login"><%=id %>님 | <a href="<c:url value='/member/logout'/>">logout</a> | 회원정보수정</div><%
}
%>
<div class="clear"></div>
<!-- 로고들어가는 곳 -->
<div id="logo"><img src="<c:url value='/resources/images/logo.gif'/>" width="265" height="62" alt="Fun Web"></div>
<!-- 로고들어가는 곳 -->
<nav id="top_menu">
<ul>
<li><a href="<c:url value='/member/main'/>">HOME</a></li>
<li><a href="../company/welcome.jsp">COMPANY</a></li>
<li><a href="#">SOLUTIONS</a></li>
<li><a href="<c:url value='/board/list'/>">CUSTOMER CENTER</a></li>
<li><a href="#">CONTACT US</a></li>
</ul>
</nav>
</header>

  • url 수정

 

< main.jsp >

<script type="text/javascript">
$(document).ready(function(){
$('.brown').one('click', function(){
$.getJSON('<c:url value="/board/list2"/>', function(rdata){
$.each(rdata, function(index, item){
$('table').append("<tr><td class='contxt'>"+item.subject+"</a></td><td>"+item.date+"</td></tr>");
})
});
// $.getJSON('main_json.jsp', function(rdata){
// $.each(rdata, function(index, item){
// $('table').append("<tr><td class='contxt'><a href='../center/content.jsp?num="+item.num+"'>"+item.subject+"</a></td><td>"+item.date+"</td></tr>");
// })
// });
});
});
</script>

 

< AjaxController.java >

@Inject
private BoardService boardService;

// /board/list2
@RequestMapping(value = "/board/list2", method = RequestMethod.GET)
public ResponseEntity<List<BoardBean>> list2() {
ResponseEntity<List<BoardBean>> entity = null;
try {
// 최근글 5개
// PageBean pb 객체 생성   멤버변수 값 저장 PageNum="1"  PageSize=5
PageBean pb = new PageBean();
pb.setPageNum("1");
pb.setPageSize(5);

// entity 결과 저장   boardService   getBoardList(pb)
entity = new ResponseEntity<List<BoardBean>>(boardService.getBoardList(pb), HttpStatus.OK); // 잘 넘어갔을 때
} catch (Exception e) {
e.printStackTrace();
entity = new ResponseEntity<List<BoardBean>>(HttpStatus.BAD_REQUEST); // 잘 못넘어갔을 때
}
// 리턴 게시판 글 5개 ResponseEntity<String>데이터 리턴
return entity;
  • inject 필수!
  • 메인화면에서 클릭시 최신글 5개 뽑아옴



< AOP 관점지향 프로그램 >

  • springProject 파일 안에 beans5.xml 파일이랑 sample5 파일 붙여넣기

  • 원래는 이렇게 출력함(로그 출력이 연결 안되어있을 때)
  • 바꿔주기(불러옴)
  • HelloApp.java 실행해보면 Console 창에 뜸

 

728x90

'Dev.Program > Java & Spring' 카테고리의 다른 글

[Spring] - (5)  (0) 2022.10.10
[Spring] - (4)MyBatis / 설정 및 연동  (0) 2022.10.09
[Spring] - (3)데이터베이스 연동  (0) 2022.10.09
[Spring] - (2)  (0) 2022.10.09
[Spring] - (1)설치 및 설정하기  (0) 2022.10.09