이클립스 켤때마다 utf-8 필요없음 환경변수설정하기 







JAVA_TOOL_OPTIONS

-Dfile.encoding="UTF-8"





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
System.out.println("HelloServlet doGet");
      
      resp.setContentType("text/html");
      
      PrintWriter out = resp.getWriter();
      
      out.println("<html>");      
      
      out.println("<head>");
      out.println("<title>타이틀</title>");
      out.println("</head>");
      
      out.println("<body>");      
      out.println("<h1>Hello Servlet</h1>");      
      out.println("</body>");      
      
      out.println("</html>");
      
      out.close();
 
cs

resp.setContentType("text/html; charset=utf-8");

req.setCharacterEncoding("utf-8");




출처 : https://m.blog.naver.com/PostView.nhn?blogId=skybrend&logNo=90173972968&proxyReferer=&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<form action="" method="post" id="_regiForm" name="regiForm">
                    
                    <table class="content_table" style="width: 75%">
                    <colgroup>
                        <col style="width:30%">
                        <col style="width:70%">
                    </colgroup>    
                    
                    <tr>
                        <th>아이디첵크</th>
                        <td>
                            <input type="text" id="c_id" size="30">
                            <a href="#none" id="_btnGetId" title="회원가입">
                                <img alt="회원가입" src="img/idcheck.png">
                            </a>
                            <div id="_rgetid"></div>
                        </td>                    
                    </tr>
                    <tr>
                        <th>아이디</th>
                        <td>
                            <input type="text" name="id" id="_userid" size="30" data-msg="아이디를" readonly="readonly">
                        </td>    
                    </tr>
                    
                    <tr>
                        <th>패스워드</th>
                        <td>
                            <input type="text" name="pw" id="_pw" size="30" data-msg="패스워드를">
                        </td>    
                    </tr>
                    
                    <tr>
                        <th>주소</th>
                        <td>
                            <input type="text" name="address" id="_address" size="30" data-msg="이름을 ">
                        </td>    
                    </tr>
                    
                    <tr>
                        <th>핸드폰 번호</th>
                        <td>
                            <input type="text" name="phone" id="_phone" size="30" data-msg="이메일을 ">
                        </td>    
                    </tr>
                    
                    <tr>
                        <th>이름</th>
                        <td>
                            <input type="text" name="name" id="_name" size="30" data-msg="이메일을 ">
                        </td>    
                    </tr>
  
                    
                    <tr>
                        <td colspan="2" style="height: 50px; text-align: center">
                        <a href="#none" id="regiBTN" title="회원가입">
                            <img alt="회원가입" src="img/regiBTN.png">
                        </a>
                        
                        <a href="#none" id="logBTN" title="로그인">
                            <img alt="회원가입" src="img/logBTN.png">
                        </a>
                        
                        </td>                    
                    </tr>
                    
                    
                    
                    </table>
                    
                    
</form>
 
cs


js 공백제어 , ajax 실행

1
2
3
4
5
6
7
8
$("#_btnGetId").click(function() {
    var id = $("#c_id").val();
    if(id == ""){
        alert("아이디를 입력해 주십시오");
    }else{
        idCheckFunc(id);
    }    
})
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function idCheckFunc(id) {
    //alert("idCheckFunc");
    
    $.ajax({
        
        type:"post",
        url:"checkID.do",
        async:true,
        data:"id=" + id,
        success:function(msg){
            alert("ajax success")
            idCheckMsg(msg);
        },
         error : function(){
            alert("ajax error");
        }
    });
}    
cs


8행 : 비동기 처리방식인 ajax를 동기방식으로 설정하고 싶을때는 async:false



>>>>>>>.1번 방법 : 

디비결과를 int로 바꾸어 컨트롤러에 보내고, 컨트롤러에서 int값에 따라 message를 set해준다

set한 message를 가지고 regi.jsp에서 새로운 함수(결과에 따라 뷰를 수정)에 값을 보낸다 

새로운 함수는( 아래의 다시js   idCheckMsg


컨트롤러

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@ResponseBody
    @RequestMapping(value="checkID.do", method={RequestMethod.GET, RequestMethod.POST})
    public MemIdCheck checkID(MemberDto mdto) {
        logger.info("MemberController checkID" + new Date());
        
        System.out.println(mdto);
        
        int count  = memberService.checkID(mdto);
        MemIdCheck mic = new MemIdCheck();
        logger.info("checkID.do count: " + count);
        
        if(count>0){
            mic.setMessage("YES");
        }else {
            mic.setMessage("NO");
        }
        
        return mic;
    }
cs

8행 : 디비에 접근하여 mdto(입력한정보) 가 있는지 확인한다

13행 : MemIdCheck 형태의 mic 에다가 setMessage 한다  12행일경우 YES

15행 : MemIdCheck 형태의 mic 에다가 setMessage 한다  12행이 아닐경 경우 NO

18행 : 반환값 mic   ( "YES" 또는 "NO" )



memberService


memberServiceImpl

1
2
3
4
5
6
7
@Override
    public int checkID(MemberDto mem) {
      System.out.println(mem);
      int i = memberDao.checkID(mem);
      System.out.println(i + "i는");
        return memberDao.checkID(mem);
    }
cs

결과메시지 출력할때 쉽게구분할수있도록 int형태로 반환


MemberDao


MemberDaoImpl

1
2
3
4
5
6
7
8
9
10
11
12
@Override
 
    public int checkID(MemberDto mem) {    
        System.out.println("MemberDaoImpl num");
        
        int num = sqlSession.selectOne(namespace + "checkID", mem);
        
        System.out.println("MemberDaoImpl num = " + num);
        
        return num;
    }
    
cs



member.xml

1
2
3
4
5
<select id="checkID" parameterType="kh.com.a.model.MemberDto" resultType="java.lang.Integer">
SELECT NVL(COUNT(*),0)
FROM MEMBER
WHERE ID=#{id}
</select>
cs


id가 존재하면 양수, 그렇지 않으면 음수로 return 

>>결과메시지 출력할때 쉽게구분할수있도록 int형태로 반환



다시 js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function idCheckMsg(msg) {
    
        if(msg.message == 'YES'){
            $("#_rgetid").html("사용할 수 없는 아이디");
            $("#_rgetid").css("margin""2px");
            $("#_rgetid").css("font-family""Nanum Gothic");
            $("#_rgetid").val("");        
        }else{
            $("#_rgetid").html("사용가능 아이디");
            $("#_rgetid").css("margin""2px");
            $("#_rgetid").css("font-family""Nanum Gothic");
            $("#_userid").val( $("#c_id").val() );        
        }        
    
    }
cs





dto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package kh.com.a.model;
 
import java.io.Serializable;
 
/*
DROP TABLE MEMBER
CASCADE CONSTRAINTS;
CREATE TABLE MEMBER(
    ID VARCHAR2(50) PRIMARY KEY,
    PWD VARCHAR2(50) NOT NULL,
    NAME VARCHAR2(50) NOT NULL,
    EMAIL VARCHAR2(50) UNIQUE,
    AUTH NUMBER(1) NOT NULL
);
*/
 
public class MemberDto implements Serializable {
    private String id;
    private String pwd;
    private String name;
    private String email;
    private int auth;    // 사용자/관리자
    
    public MemberDto() {
    }
 
    public MemberDto(String id, String pwd, String name, String email, int auth) {
        super();
        this.id = id;
        this.pwd = pwd;
        this.name = name;
        this.email = email;
        this.auth = auth;
    }
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getPwd() {
        return pwd;
    }
 
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public int getAuth() {
        return auth;
    }
 
    public void setAuth(int auth) {
        this.auth = auth;
    }
 
    @Override
    public String toString() {
        return "MemberDto [id=" + id + ", pwd=" + pwd + ", name=" + name + ",
                email=" + email + ", auth=" + auth + "]";
    }
}
 
 
 
cs



>>>> 두번째 방법

뷰에서(id="_id") 받아온 값을 db에 접근하여 반환된 결과값으로(resultType="Integer")

뷰의 js안에서  if(map.cnt > 0){ }조건을 걸어 결과 처리(idCheckMessage)





컨트롤러

1
2
3
4
5
6
7
8
9
10
11
12
@ResponseBody //ajax 사용시
    @RequestMapping(value = "idCheck.do", method = RequestMethod.POST)
    public Map<Object, Object> idCheck(String id) throws Exception {
        logger.info("id 출력확인점1~~~" + id);
        int cnt = 0;
        Map<Object, Object> map = new HashMap<>();
        cnt = khMemberService.idCheck(id);
        logger.info("id 출력확인점2~~~" + cnt);    
        map.put("cnt", cnt);
 
        return map;
    }
cs


xml

1
2
3
4
5
    <select id="idCheck" parameterType="String" resultType="Integer">
        SELECT NVL(COUNT(*), 0)
        FROM MEMBER
        WHERE ID=#{id}    
    </select>
cs


regi.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$("#_btnGetId").click(function() {
    var _id = $("#_id").val();
    if(_id == ""){
        alert("아이디를 입력해 주십시오");
    }else{
        idCheckFunc(_id);
    }    
});
 
function idCheckFunc(id) {
    alert("idCheckFunc 발동");
 
    $.ajax({
        type:"post",
        url:"idCheck.do",
        async:true,
        data:"id=" + id,
        success:function(map){
            idCheckMessage(map);
        }        
    });
}
 
function idCheckMessage(map) {
    if(map.cnt > 0){
        $("#_rgetid").html("사용할 수 없는 아이디입니다");
        $("#_rgetid").css("background-color""#ff0000");
        $("#_rgetid").val("");        
    }else{
        $("#_rgetid").html("사용하실 수 있습니다");
        $("#_rgetid").css("background-color""#0000ff");
        $("#_userid").val( $("#_id").val() );        
    }    
}
cs






'자바 과정 11회차 > spring mvc1 게시판' 카테고리의 다른 글

[MVC] bbs write  (0) 2019.01.23
[MVC] 회원등록 regiAF , 로그인 loginAF  (0) 2019.01.21
[MVC] 스프링 셋팅 autowired  (0) 2019.01.09
[MVC] 회원가입 제어  (0) 2019.01.09
[mvc] 타일즈 적용  (0) 2019.01.09


autowired : 객체생성없이 사용할 메소드를 호출할수 있도록 해줌



컨트롤러

1
2
@Autowired
    KhMemberService khMemberService;
cs


> dto : Serializable

1
import java.io.Serializable;
cs

>service interface

1
public interface KhMemberService {}
cs

>serviceImpl : 같은 패키지 안에 새로운 패기지 @service , implement ~~{}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package kh.com.a.service.Impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import kh.com.a.dao.KhMemberDao;
import kh.com.a.model.MemberDto;
import kh.com.a.service.KhMemberService;
 
@Service
public class KhMemberServiceImpl implements KhMemberService{
 
    @Autowired
    private KhMemberDao khMemberDao;
 
}
cs

>daointerface

1
public interface KhMemberDao {}
cs


>daoImpl: 같은 패키지 안에 새로운 패키지 @Repository , @Autowired SqlSession sqlSession; , private String namespace = "MemberSql.";

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package kh.com.a.dao.Impl;
 
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 
import kh.com.a.dao.KhMemberDao;
import kh.com.a.model.MemberDto;
 
@Repository
public class KhMemberDaoImpl implements KhMemberDao{
 
    @Autowired
    SqlSession sqlSession;
 
    private String namespace = "MemberSql.";
}
cs

>sqls .xml <mapper namespace="MemberSql"></mapper>

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> -->
 
   
<mapper namespace="MemberSql">
 
 
</mapper>
cs

>sql작성

아이디 찾기

비밀번호찾기



특수문자 입력제한

1
2
3
4
5
6
7
8
9
10
11
$(document).ready(function() {
    $("input[name=name]").keyup(function(event){
     regexp = /[\[\]{}()<>?|`~!@#$%^&*-_+=,.;:\"'\\]/g;
     v = $(this).val();
     if( regexp.test(v) ) {
      alert("특수문자는 입력하실 수 없습니다");
      $(this).val(v.replace(regexp,''));
     }
    });
   });
cs


아이디 입력제한


비밀번호 입력제한

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//비밀번호 입력제한
$(function(){
   
    $("#alert-success").hide();
    $("#alert-danger").hide();
    $("input").keyup(function(){
        var pwd=$("#_pw").val();
        var pwdCheck=$("#_pwck").val();
        if(pwd != "" || pwdCheck != ""){
            if(pwd == pwdCheck){
                $("#alert-success").show();
                $("#alert-danger").hide();
                $("#submit").removeAttr("disabled");
            }else{
                $("#alert-success").hide();
                $("#alert-danger").show();
                $("#submit").attr("disabled""disabled");
            }    
        }
    });
});
cs



연락처 입력제한

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//연락처 입력제한
var phone =document.getElementById('_phone');
phone.onkeyup = function(event){
event = event || window.event;
var _val = this.value.trim();
this.value = autoHypenPhone(_val) ;
};
function autoHypenPhone(str) {
str = str.replace(/[^0-9]/g, '');
var tmp = '';
if (str.length < 4) {
   return str;
else if (str.length < 7) {
   tmp += str.substr(03);
   tmp += '-';
   tmp += str.substr(3);
   return tmp;
else if (str.length < 11) {
   tmp += str.substr(03);
   tmp += '-';
   tmp += str.substr(33);
   tmp += '-';
   tmp += str.substr(6);
   return tmp;
else {
   tmp += str.substr(03);
   tmp += '-';
   tmp += str.substr(34);
   tmp += '-';
   tmp += str.substr(7);
   return tmp;
}
return str;
}
cs



주소검색1   우편번호검색없음


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!-- 주소검색 -->
<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>
<script src="//dapi.kakao.com/v2/maps/sdk.js?appkey=발급받은 API KEY를 사용하세요&libraries=services"></script>
 
<script>
    var mapContainer = document.getElementById('map'), // 지도를 표시할 div
        mapOption = {
            center: new daum.maps.LatLng(37.537187127.005476), // 지도의 중심좌표
            level: 5 // 지도의 확대 레벨
        };
    //지도를 미리 생성
    var map = new daum.maps.Map(mapContainer, mapOption);
    //주소-좌표 변환 객체를 생성
    var geocoder = new daum.maps.services.Geocoder();
    //마커를 미리 생성
    var marker = new daum.maps.Marker({
        position: new daum.maps.LatLng(37.537187127.005476),
        map: map
    });
    function execDaumPostcode() {
        new daum.Postcode({
            oncomplete: function(data) {
                // 각 주소의 노출 규칙에 따라 주소를 조합한다.
                // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
                var fullAddr = data.address; // 최종 주소 변수
                var extraAddr = ''// 조합형 주소 변수
                // 기본 주소가 도로명 타입일때 조합한다.
                if(data.addressType === 'R'){
                    //법정동명이 있을 경우 추가한다.
                    if(data.bname !== ''){
                        extraAddr += data.bname;
                    }
                    // 건물명이 있을 경우 추가한다.
                    if(data.buildingName !== ''){
                        extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
                    }
                    // 조합형주소의 유무에 따라 양쪽에 괄호를 추가하여 최종 주소를 만든다.
                    fullAddr += (extraAddr !== '' ? ' ('+ extraAddr +')' : '');
                }
                // 주소 정보를 해당 필드에 넣는다.
                document.getElementById("_address").value = fullAddr;
                // 주소로 상세 정보를 검색
                geocoder.addressSearch(data.address, function(results, status) {
                    // 정상적으로 검색이 완료됐으면
                    if (status === daum.maps.services.Status.OK) {
                        var result = results[0]; //첫번째 결과의 값을 활용
                        // 해당 주소에 대한 좌표를 받아서
                        var coords = new daum.maps.LatLng(result.y, result.x);
                        // 지도를 보여준다.
                        mapContainer.style.display = "block";
                        map.relayout();
                        // 지도 중심을 변경한다.
                        map.setCenter(coords);
                        // 마커를 결과값으로 받은 위치로 옮긴다.
                        marker.setPosition(coords)
                    }
                });
            }
        }).open();
    }
</script> 
cs



0. layouts.xml 준비


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles
 Configuration 3.0//ENhttp://tiles.apache.org/dtds/tiles-config_3_0.dtd">
 
<tiles-definitions>
     <definition name="login.tiles" template="/WEB-INF/views/home.jsp">
    </definition>
<!-- 
<definition name="login.tiles" template="/WEB-INF/views/login/login.jsp">
</definition>
<definition name="bbslist.tiles" template="/WEB-INF/views/layouts-tiles.jsp">
    <put-attribute name="common" value="/WEB-INF/views/common/common.jsp"/>
    <put-attribute name="header" value="/WEB-INF/views/common/header.jsp"/>
    <put-attribute name="top_inc" value="/WEB-INF/views/common/top.jsp"/>
    <put-attribute name="top_menu" value="/WEB-INF/views/common/top_menu.jsp"/>
    <put-attribute name="left_main" value="/WEB-INF/views/common/left_bbslist.jsp"/>
    <put-attribute name="main" value="/WEB-INF/views/bbs/bbslist.jsp"/>
    <put-attribute name="bottom_inc" value="/WEB-INF/views/common/bottom.jsp"/>
</definition>
<definition name="bbswrite.tiles" extends="bbslist.tiles">
    <put-attribute name="main" value="/WEB-INF/views/bbs/bbswrite.jsp"/>
</definition>
-->
 
</tiles-definitions>
 
cs


20행 : 같은 템플릿 (layouts-tiles.jsp)을 사용할 경우(11행 , 22행 )extends

*템플릿으로 사용할경우 해당 jsp 파일에 추가

1
2
3
4
5
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
cs




1. xml 설정 


1.1 pom.xml 에 타일즈3 dependency 추가


1.2 servlet-context ( dispatcher servlet , sts : app servlet)  resolver 설정 , 레이아웃 위치 정의( 0번 연결)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!-- tiles 설정 : tiles 설정 -->
 
 <bean id="tilesConfigurer" class ="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
 
  <property name="definitions">
 
   <list>
 
    <value>/WEB-INF/views/layouts.xml</value>
 
   </list>
 
  </property>
 
 </bean>
 
 <!-- tiles 설정 "viewResolver 설정 -->
 
 <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
 
  <property name="requestContextAttribute" value="requstContext"/>
 
  <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"></property>
 
 </bean>
cs



2. web.xml 에 appservlet경로 정의

스프링 셋팅때 되어있음


2. 컨트롤러 

1
2
3
4
5
@RequestMapping(value="login.do", method=RequestMethod.GET)
    public String login(Model model) {
        logger.info("KhMemberController login" + new Date());
        return "login.tiles";
    }
cs

4행 : tiles 로 이동




3. 뷰 생성

상단에 소스 추가

login.jsp

1
2
3
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
cs



0. 이클립스 sts 연동


1. 다이나믹웹프로젝트 생성 > configure > convert to maver project > 개발환경 자바에서 스프링으로 변경 후 시작하기  


2. 이전포스팅 완료 후 시작하기






pom.xml dependency 추가 






WEB-INF 에서 spring/views/web.xml 생성  web.xml파일에 코드 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
version="3.1">
  
<display-name>프로젝트폴더명@@@@@@</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
    <!-- 서블릿 클래스 설정 -->
    <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>
          org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
    
    <init-param>
      <param-name>contextConfigLocation</param-name>
     <!-- dispatcher 위치-->
      <param-value>
              /WEB-INF/spring/servlet-context.xml
              /WEB-INF/spring/aop-context.xml
          </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
 
      <!-- 서블릿 클래스 등록 -->
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
          /WEB-INF/spring/applicationContext.xml
      </param-value>
  </context-param>
 
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
 
    <!--한글 깨짐 방지@@@@@@@ -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
 
cs


42행 : dispatcherServlet  ,  sts연동해서 했을경우 

1
2
3
4
5
6
7
8
9
<servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
cs



@@ 프로젝트폴더명

@@한글깨짐방지





index.jsp 생성 ( 컨트롤러로 이동하여 뷰를 열어줌, 맨처음 시작 점)


index.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 
<%
response.sendRedirect("login.do");
%>
 
</body>
</html>
cs





패키지 추가, jdbc추가

implements에 어노테이션


log4j.xml   <logger name="kh.com">




log4j.xml   <logger name="kh.com.a">




properties.file

1
2
3
4
5
6
7
# Local DB
jdbc.driverClassName = oracle.jdbc.driver.OracleDriver
jdbc.url = jdbc:oracle:thin:@127.0.0.1:1521:xe
jdbc.username = hr
jdbc.password = hr
jdbc.initialSize = 5
jdbc.maxActive = 20
cs







log4j.xml

<logger name="kh.com.a>주의


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
 
    <!-- Appenders -->
    <!-- ConsoleAppender -->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p: %c - %m%n" />
        </layout>
    </appender>
    
    <!-- Application Loggers 패키지명 주의-->
    <logger name="kh.com.a">
        <level value="info" />
    </logger>
    
    <!-- 3rdparty Loggers -->
    <logger name="org.springframework.core">
        <level value="info" />
    </logger>
    
    <logger name="org.springframework.beans">
        <level value="info" />
    </logger>
    
    <logger name="org.springframework.context">
        <level value="info" />
    </logger>
 
    <logger name="org.springframework.web">
        <level value="info" />
    </logger>
 
    <!-- Root Logger -->
    <root>
        <priority value="warn" />
        <appender-ref ref="console" />
    </root>
    
</log4j:configuration>
 
cs



sqls 폴더 생성



servlet-Context.xml  == dispatcherServlet  


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

<?xml version="1.0" encoding="UTF-8"?>
 
<beans xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/
schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/
schema/beans/spring-beans.xsd http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.3.xsd"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://www.springframework.org/schema/beans">
 
 
<!-- 스프링 MVC annotation을 활성화 -->
<context:annotation-config/>
 
 
<!-- viewResolver 설정 (사용자 view의 위치, 확장자명을 설정) -->
<!-- 
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean>
 -->
 
 
<!-- tiles 설정 -->
<bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" id="tilesConfigurer">
<property name="definitions">
    <list>
        <value>/WEB-INF/views/layouts.xml</value>
    </list>
 
</property>
</bean>
 
<!-- viewResolver 설정 -->
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="viewResolver">
    <property name="requestContextAttribute" value="requestContext"/>
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
</bean>
 
 
<!-- java 파일의 공통 package 설정 -->
<context:component-scan base-package="kh.com.a"/>
 
<!-- 주석문의 사용 허가 -->
<mvc:annotation-driven/>
 
<!-- spring에서 처리할 수 없는 요청은 tomcat에 위임 -->
<mvc:default-servlet-handler/>
cs

@@35행: 타일즈일때 viewResolver

@@15행 : annotation

@@ 49행 : default-servlet-handler/ 로 변경




그 외 필요할 때 추가 pds

<!-- file upload -->
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
    <property name="maxUploadSize" value="104857600"/>
    <property name="maxInMemorySize" value="102400"/>
    <property name="defaultEncoding" value="utf-8"/>
    <property name="uploadTempDir" value="upload"/>
</bean>


<!-- file download -->
<bean class="kh.com.a.arrow.DownloadView" id="downloadView"/>
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" id="downloadViewResolver">
        <property name="order">
            <value>0</value>
        </property>
    </bean>
</beans>




applicationContext.xml

applicationContext.xml


aop-Contex.xml

aop-context.xml




컨트롤러 내용작성


'자바 과정 11회차 > spring mvc1 게시판' 카테고리의 다른 글

[MVC] 회원가입 제어  (0) 2019.01.09
[mvc] 타일즈 적용  (0) 2019.01.09
spring 이클립스 sts연동  (0) 2019.01.05
0920 AOP실습 Anno  (0) 2019.01.05
0920 AOP실습 AOPxml  (0) 2019.01.05

help - ecl marketplace - sts 검색후 설치 





  spring 으로 변경       변경하지말기




프로젝트 파일 생성1.



프로젝트 파일 생성2.





프로젝트 파일 생성3




오류가 날경우 

maven project를 업데이트 하거나

m2. 파일 삭제하고 재실행 후 다시 maven update









실행하기 - 패키지 오른쪽버튼 run as - 컨트롤러를 거쳐가기 위해 web-inf안에 들어있는 '뷰폴더'



-----------------


jsp화면에서 시작하고 싶을땐 '뷰'를 webapp폴더안에 넣기 (컨트롤러를 거쳐가지 않음)

* 참고 

https://youtu.be/sKpBhm86kQk



추가 ++ * STS 연동 과정중 오류 날 경우



오류메시지



체크 후 다운



프로젝트 클릭후 업데이트




'자바 과정 11회차 > spring mvc1 게시판' 카테고리의 다른 글

[mvc] 타일즈 적용  (0) 2019.01.09
[mvc] 스프링셋팅 dao service controller 생성  (0) 2019.01.05
0920 AOP실습 Anno  (0) 2019.01.05
0920 AOP실습 AOPxml  (0) 2019.01.05
0920 AOP 설정  (0) 2019.01.04

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>AOPAnno</groupId>
  <artifactId>AOPAnno</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.1</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>
  
  <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.0.8.RELEASE</version>
    </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.0.8.RELEASE</version>
    </dependency>
      <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.13</version>
    </dependency>
        
  </dependencies>
  
</project>
cs


cats.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.aopex;
 
public class Cat {
    
    private String name;
    private int age;
    private String color;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    @Override
    public String toString() {
        return "Cat [name=" + name + ", age=" + age + ", color=" + color + "]";
    }
    
    public void catInfo() {
        System.out.println("이름:" + name);
        System.out.println("나이:" + age);
        System.out.println("컬러:" + color);
    }
    
    
 
}
cs


bean.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation=
        "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
 
    <aop:aspectj-autoproxy/>
 
    <bean id="logAOP" class="com.aopex.LogAOP"/>
            
    <bean id="myCat" class="com.aopex.Cat">
        <property name="name" value="야옹이"/>
        <property name="age" value="2"/>
        <property name="color" value="노랑"/>
    </bean>
 
</beans>
cs


9행 :  어노테이션 적용하기 위해 추가 



logaop.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.aopex;
 
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
 
@Aspect
public class LogAOP {
    
    @Around("within(com.aopex.*)")
    public Object loggerAop(ProceedingJoinPoint joinpoint)throws Throwable {
        
        String signatureStr = joinpoint.getSignature().toShortString();
        
        System.out.println(signatureStr + "시작");        
        System.out.println("실행전:" + System.currentTimeMillis());
        
        try {
            Object obj = joinpoint.proceed();    // 핵심기능 실행
            return obj;
        }finally {
            System.out.println("실행후:" + System.currentTimeMillis());            
            System.out.println(signatureStr + "종료");
        }
    }
 
}
cs


7행 : @Aspect   어노테이션

16행 : 출력


    

mainClass.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.aopex;
 
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class mainClass {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        AbstractApplicationContext ctx
        = new GenericXmlApplicationContext("classpath:bean.xml");
    
        Cat myC = ctx.getBean("myCat", Cat.class);
        
        myC.catInfo();
    }
 
}
cs



* 실행값


이름 : 야옹이

나이 : 2

컬러 : 노랑

실행 전 : 현재시간 1231533

Cat.catInfo() 종료

+ Recent posts