본문 바로가기
CLASS/SPRING,JSTL

🎫 spring note

by hingu 2024. 7. 19.

👀 배우진 않지만..너무 많은게 있다.. 공부하시길..

SPRING

AOP (  관점지향 프로그래밍(AOP) vs 객체지향 프로그래밍(OOP) )

Batch

initializr

..

이런 것들이 있다

 

👀 게시판 제작시 주의

모든 게시판의 리스트, 상세보기 => 무조건 GET으로 처리

모든 게시판의 글쓰기 => 무조건 POST

 

👀 [Servlet과 Spring의 차이점 ] 👀

  1. Spring과 Servlet 모두 Class 사용하지만
    Servlet : Module은 class를 쓰지만 Controller는 servlet을 사용함
  2. parameter값 받는 방식 차이 (Get이든 Post든)
    - Spring : HttpServletRequest req or 인자값 or DAO 으로 받을 수 있음
    - Servlet : HttpServletRequest 얘 말고는 방법이 없음
  3. Database 연결구조
    - Spring : class,xml(bean),properties로 연결 가능
    - Servlet : class,properties로 연결 가능
  4. MVC형태
    - Spring : Integer,int,long..... 등 숫자 관련된 메소드 외에 모두 사용 가능
    - Servlet : doPost,doGet,doService ...등 servlet에서 정해진 메소드만 사용 가능 (활용성 ↓)
  5. 라이브러리
    - Spring : pop.xml 전레 로드하여 라이브러리 활용
    - Servlet : 직접 프로젝트에 라이브러리를 다운받아 -> jump -> load해서 사용해야함
  6. View 형태
    - Spring : JSP, JTSL 도 사용 가능 
    - Servlet : JSP만 사용 가능

 

 

👀 [ Spring => Maven , Legacy ]

  • Maven : 개발자가 모든 라이브러리부터~ 모든 XML 직접 구성
  • Legacy : 기본적인 Controller ~ View 미리 셋팅 
                  단, 그 외 DB,DAO,bean,Properties 직접 추가 구성해야함            

=> 회사에선 둘중에 쓰는게 정해져있음 거의 

 

 

👀 spring legacy - js,css파일 로드 경로 지정

 

webapp/WEB_INF/spring/appServlet/servlet-context.xml 의

<resources mapping="/resources/**" location="/resources/" />

이 부분때문에 js파일 로드가 불가능하다!  404뜸 => 보안때문 

 

js파일 webapp/resource 폴더에 넣거나

<resources mapping="/js/**" location="/js/" />
<resources mapping="/css/**" location="/css/" />
<resources mapping="/upload/**" location="/upload/" />

<!-- 요렇게 확장자 지정도 가능 -->
<resources mapping="/css/*.css" location="/css/" />

폴더 지정 태그 추가 해주고 해당 폴더에 넣으면 됨 (image 폴더 등.. )

 

=> resources 태그 : 

특정 디렉토리를 설정하여 각종 속성파일을 로드 할 수 있도록 설정하는 보안 태그

 

 

 

👀 예외처리 전용 어노테이션

 

@Controller 에 사용

 

예외처리 전용 어노테이션이며, 

해당 Exception class를 이용하여 특정 페이지로 이동 또는 특정 페이지 view 출력 

@ExceptionHandler(MissingServletRequestParameterException.class)
public void han(MissingServletRequestParameterException ex, HttpServletResponse res) throws Exception{
    res.setContentType("text/html;charset=utf-8");
    this.pw = res.getWriter();
    this.pw.print("<script>"
            + "alert('올바른 접근 방법이 아닙니다---');"
            + "location.href='./gallery.do'"
            + "</script>");
}

 

 

단, @RequestParam(required = true)  필수값 핸들링이 되지 않아서 완전히 예외로 빠져버릴때 실행됨!

 

🔽 요것처럼

@GetMapping("/gallery_delete.do")
public void gallery_delete(
        @RequestParam(required = true) Integer gidx,
        HttpServletResponse res
    ) throws Exception{

    try {
        System.out.println(gidx);
    }catch(Exception e){

    }

}

 

👀 JSTL

JSTL은 단독으로 사용하는 경우는 없음 => do에서 호출받아서 사용 多 (Model, ModelandView)

 

- 자주 사용하는 JSTL 엔진

<!-- jstl 엔진 -->
<%@ taglib prefix="cr" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- jstl 각종함수 -->
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!-- jstl database 관련 -->
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

<!-- 
fmt : format-type 
=> 문자 포맷 변환 라이브러리 ex)금액에 ,찍을때만 거의 사용 
-->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

=> fmt 예제 여기있음  https://dev-eunse.tistory.com/220

 

👀 JSTL + database 연결

 

방식 1

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

<sql:setDataSource 
var="db"
driver="com.mysql.cj.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/cms"
user="hana"
password="hana1234" />

<!-- 요렇게도 쓰고 -->
<!-- <sql:query var="ps" sql="select * from coupon" dataSource="${db}" /> --!>

<!-- 요렇게도 쓰는데 이걸 더 추천 -->
<cr:set var="table" value="coupon"/>
<cr:set var="order" value="order by cidx desc"/>
<sql:query var="ps" dataSource="${db}">
	select * from ${table} ${order} 
</sql:query>



<!-- 예시 -->
<table border="1" cellpadding="0" cellspacing="0">
	<thead>
		<tr>
			<th>쿠폰명</th>
			<th>할인율</th>
			<th>사용가능 여부</th>
			<th>사용기한</th>
			<th>제작일</th>
		</tr>
	</thead>
	<tbody>
		<cr:forEach var="row" items="${ps.rows}">
			<cr:set var="cpname_length" value="${fn:length(row['cpname'])}" />
			<tr>
				<!-- 범위 글자수 이상이 되었을 경우 말줄임표가 나오도록 하는 부분 -->
				<cr:if test="${cpname_length>5}">
					<cr:set var="jum" value="dfsdf..."/>
				</cr:if>
				<td>${fn:substring(row['cpname'],0,10)}${jum}</td>
				<td>${row['cprate']}%</td>
				<td>${row['cpuse']}</td>
				<td>${row['cpdate']}</td>
				<td>${fn:substring(row['indate'],0,10)}</td>
			</tr>
		</cr:forEach>
	</tbody>
</table>

 

connect out 필요 없음