728x90

 

404는 정말 여러 원인이 있는데

대개 페이지이동 경로나 url 매핑 쪽 문제가 많다

 

메세지

HTTP 404 Origin 서버가 대상 리소스를 위한 현재의 representation을 찾지 못했거나, 그것이 존재하는지를 밝히려 하지 않습니다.

상황

페이징처리 코드 넣고 첫페이지는 잘 뜨는데 다른 번호 누르면 위의 에러메세지 뜸

원인

코드 따오는 과정에서 아래 이미지처럼 이동해야할 URL을 변경하지 않아 발생

해결

blist.bo를 컨트롤러에 등록한 url인 notice.bo(첫번째 이미지)로 교체

 

 

 

 

728x90
반응형
728x90

 

<input>나 <textarea> 같은 것들에 placeholder로 안내문구 주려는데

placeholder가 안먹힐 때가 있다. 왜그럴까?

 

placeholder 플레이스홀더는 글씨가 써지면 지워지기 때문에 input,textarea에 글씨가 들어가 있으면

글씨가 들어간 걸로 인식되서 애초에 placeholder가 안나오게 되므로 작동안하는게 아니니 주의!

 

아래처럼 오픈태그와 클로즈 태그 사이에 내용이 안들어가야 있어야 정상적으로 나옴

 

문자 뿐 아니라 엔터로 줄바꿈되도 데이터가 들어간 걸로 인식되서 placeholder가 사라지게 된다

 

728x90
반응형
728x90

 

마이바티스 최대 특징 중 하나 : 쿼리를 태그화 시킨 것

코드가 많이 줄고 편하다

 

DOCTYPE 설정

<!DOCTYPE mapper .... >

앞으로 DOCTYPE 다음 어떤 타입인지 나오므로 잘 확인하자

나머지는 코드 복붙해서 쓰면된다

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

1. 최상위 태그 <mapper>

namespace속성

마이바티스 설정파일(config.xml)에 등록한 매퍼파일의 값을 넣는 속성(element)

자바에서 어느 매퍼를 쓸지 알 수 있게 해주는 역할

<mapper namespace="memberMapper">
</mapper>

 

2. 쿼리문 태그 : <select>,<insert>,<update>,<delete>

이후로 나오는 태그들은 sql에서 썼던 CRUD의 명령어들이 태그화 된 것이므로 그대로 쓰면 되고,

속성(element)만 추가하면 된다

<mapper namespace="memberMapper">
	<select id="loginMember" parameterType="member.model.vo.Member" > 
     	쿼리문 내용
        ex)
            SELECT * 
            FROM MEMBER 
            WHERE USER_ID = #{userId} AND USER_PWD = #{userPwd} 
    </select>
</mapper>

1)id : 쿼리문의 고유 아이디(유일한 구분자)
   - mapper태그 안에 쿼리가 엄청 여러개이기 때문에 각각을 구분할 pk역할을 하는 id속성이 필요
 2)parameterType : 클래스의 풀네임 또는 (설정되었다면)별칭
 3)resultType : 반환받을 데이터의 데이터타입 지정
  - 쿼리 실행 후 나온 결과(ex:ResulSet) 옮겨 담을 객체를 정해주는 것

 

3.<resultMap>

vo클래스 필드명(담을 객체의 필드명)과 sql컬럼명 매핑시켜주는 태그

resultMap태그 속성값

1) type : 클래스 풀네임or별칭
2) id : pk역할. 이 resultMap이 어느 resultMap맵인지 식별용

<resultMap type="Member" id="memberResultSet">

 

resultMap 하위 태그

1)id태그 : pk역할(기본키) 하는 얘가 들어감.
- column : DB의 컬럼명
- property : 매핑 시킬 자바 vo의 필드명
2)result태그 : 일반 컬럼이 들어감

<!-- PK(기본키) -->
<id column="USER_ID" property="userId"/>
<!-- 일반 컬럼 -->
<result column="USER_PWD" property="userPwd"/>

 

<resultMap> 전체코드

<resultMap type="Member" id="memberResultSet">

		<!-- PK(기본키) -->
		<id column="USER_ID" property="userId"/>
		<!-- 일반 컬럼 -->
		<result column="USER_PWD" property="userPwd"/>
		<result column="USER_NAME" property="userName"/>
		<result column="NICKNAME" property="nickName"/>
		<result column="EMAIL" property="email"/>
		<result column="BIRTHDAY" property="birthDay"/>
		<result column="GENDER" property="gender"/>
		<result column="PHONE" property="phone"/>
		<result column="ADDRESS" property="address"/>
		<result column="ENROLL_DATE" property="enrollDate"/>
		<result column="UPDATE_DATE" property="updateDate"/>
		<result column="M_STATUS" property="mStatus"/>
	</resultMap>

 

 

 

728x90
반응형
728x90

 

MyBatis 설정 정보 파일 세팅

1)class의 alias(별칭) 설정

2)DB 연결 설정

3)sql 구문 경로 설정

 

기본적으로 여러 매퍼파일과 여러 환경들이 존재할 수 있기 때문에 각 태그에는 주식별자(PK) 개념의 역할을 하는 id속성 같은 것들이 있고, 

상위 태그 안에 관련 하위태그가 있는 방식이다

 


1. <environments>

Database 연결 설정 정보
실질적인 데이터는 여기  environments태그 안에 많이 담김

default 속성값 : environments 아래 하위 태그인 연결할 환경(environment)이 많은데 어떤 녀석을 기본값으로 부를지 지정

<environments default="development">
	<environment id="development">
	</environment>
</environments>

 

1)<environment>

id속성 : environment 구분

2)<transactionManager

트랜잭션(커밋,롤백)을 누가 관리할 것인지 설정

<environment id="development">
			<transactionManager type="JDBC"/>
</environment>

 

3)<dataSource>

ConnectionPool 사용 여부

<environment id="development">
	<transactionManager type="JDBC"/>
	<dataSource type="POOLED">
</environment>

dataSource type에 들어가는 속성값 3가지

1)UNPOOLED

db에 대한 요청이 올 때마다 실시간으로 커넥션을 만드는 것. 미리 커넥션 객체를 만들어 놓는 것이 아니기 때문에 좀 느릴 수 있음


 2)POOLED

미리 커넥션 객체를 만들어 놓고 가져다 쓰는 것. 커넥션 객체를 미리 만들어 놓고 관리하여 요청이 올 때마다 pool에서 꺼내서 재사용
  Web applicaion에서 많이 쓰는 방식

※ static이랑 상관없이 jdbc 자체가 pooled방식


 3)JNDI

외부에서 관리하는 방식


  

4)<property>

DB에 연결할 DB 정보와 계정정보

각각 driver, url 정보를 넣고 username과 password에는 연결할 db의 계정명과 비번을 넣으면 된다

아래의 방식은 EL을 이용해 외부에 따로 properties파일에 정보를 넣어놨고, 그냥 바로 value에다가 적어도 된다

    <property name="driver" value="${driver}"/> <!-- el형식. jsp에서 쓴 el이랑 똑같은 el은 아닌 걸 주의. 단순 expression language일 뿐 함수 사용이나 그런게 안된다는 의미 -->
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>

 

 

 

2.<mappers>

mappers등록

쿼리문을 많이 쓸 것이기 때문에 mappers등록하여 어떤 매퍼를 끌어올지를 알려주게 하는 설정

"mappers..." 앞에 /는 있어도 없어도 됨

	<mappers>
		<mapper resource="mappers/member-mapper.xml"></mapper>
		<mapper resource="/mappers/board-mapper.xml"/>
	</mappers>

 

 

 <MyBatis Configuration파일의 태그 순서>

설정 파일의 최상위 태그인 <configuration></configuration> 안에

태그들이 아래의 순서대로 있어야 에러없이 잘 작동한다


 (properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?, reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)

728x90
반응형
728x90

 

 

 

 

1. getElementsByClassName("user")하면 span태그의내용 전체를 가져오는 것

2. for문으로 user.length가져오니까 위에있는 span태그 6개 정보 다 가져옴

3. user[i]에서 0번인덱스면 첫번째 span태그, 1번 인덱스면 두번째 span태그를 의미

4. user[i].innerText = name.value;에서 span태그의 name속성의 value(값)을 innerText로 텍스트값만 얻어옴

5. 4번에서 innerText로  추출된 데이터가 해당 인덱스 번호에 맞게 user[i]에 저장되고 최종적으로 var user에 담아지게 됨

ex) user[i]에 user[0]이면 첫번째 span태그의 name속성의 value(값)인 beverage가 user[0]에 저장되고 이게 최종적으로 var user변수에 저장됨

 

728x90
반응형
728x90

 

EL

JSP 2.0버전에서 추가된 표현언어로, Expression Language의 약자

화면에 데이터 출력 시키는 것이 메인 기능

 

화면에 표현하고자 하는 부분을  ${ value }과 같은 형식으로 코드로 구현

(jQuery의 $표시와 혼동 주의)

JSP의 <%= 출력할 데이터 %>나 System.out.print(출력할 데이터)와 비슷

<%= request.getParameter(“name”) %> ${ param.name }

 

 

EL 연산자 기호

EL 연산자가 적용되는 우선순위

 

 

EL 기본 내장 객체

 

 

예시

데이터 가져올 뷰화면 코드

<form action=”loginEx.jsp” method=”get” >
	<label for=”id”>아이디 : </label> 
    <input type=”text” name=”id” id=”id” <label for=”pass”> 
    <input type=”text” name=”id” id=”id”/><br>
    
    <label for=”pass”> 암호 : </label> 
    <input type=”password” name=”pass” id=”pass” /><br> 
    <input type=”submit” value=”로그인” />
</form>

 

데이터 받을 jsp 페이지

<h1>표현식 버전</h1>
아이디 : <%=request.getParameter(“id”) %>
암호 :  <%=request.getParameter(“pass”) %>

<h1>EL 버전</h1>
아이디 : ${param.id }
암호 : ${param.pass }

 

728x90
반응형
728x90

 

JSP Action Tag

이전 버젼의 JSP문법을 XML기술을 이용하여 업그레이드한 태그

웹 브라우저가 아닌 웹 컨테이너에서 실행되고 결과만 브라우저로 보냄

 

표준 액션 태그와 커스텀 액션태그로 나뉨

 

1)표준 액션 태그

JSP에서 기본적으로 제공하는 태그

태그 앞에 jsp:라는 접두어 필수이고, jsp파일에서 바로 사용 가능

<jsp:include page="index.jsp"></jsp:include>

 

2)커스텀 액션태그(JSTL)

JSP 커스텀 태그 공통으로 사용하는 코드의 집합을 사용하기 쉽게 태그화 하여 표준으로 제공한 것

 

사용을 위해 라이브러리 파일 추가가 필수이며, 사용할려는 라이브러리에 맞는 접두어를 사용한다

접두어로 core의 c를 많이 사용

<c:set var="test" value="500"></c:set>

 

728x90
반응형
728x90

 

jsp:param

jsp:include, jsp:forward의 하위 요소로 사용되며 해당 페이지에 전달할 값을 기록할 때 사용

<jsp:param **name**=”파라미터 변수” **value**=”값”/>

 

jsp:setProperty

Java객체 사용 시 Setter와 동일한 역할

빈(bean)의 속성에 값을 설정하는 태그

    - name : jsp:useBean 태그에 정의된 빈(bean) 인스턴스 이름

       ex) useBean의 id속성값에서 객체(여기서는 vo클래스)를 호출해오고

    - property : 값을 설정하고자 하는 빈(bean) 속성의 이름

                     설정 시, servletRequest안의 모든 인자들 중 빈(bean) 속성과 데이터 형이 일치하는 것을 찾아 각각의 속성                         들을 각각의 인자 값으로 설정함

                ex) vo객체 안에 값을 저장할 setter명을 지정하기

     - value : 빈(bean) 속성에 설정할 값

    - param : 뷰에서 보낸 데이터를 받아오는 역할

<jsp:setProperty name = “빈 이름” property=”프로퍼티 명” value=”저장할 값”/〉

 

jsp:getProperty

Java객체 사용 시 Getter와 동일한 역할

빈의 속성값읕 얻는데 사용

name : 속성을 얻고자 하는 빈 인스턴스의 이름

property : 얻고자 하는 속성의 이름

<jsp:getProperty name = “빈 이름” property=”프로퍼티 명”/〉

 

jsp:plugin 액션 태그

자바 애플릿 또는 자바빈즈 컴포넌트를 클라이언트로 다운받아 사용할 수 있도록

브라우저에 맞는 HTML 코드를 생성해주는 역할

서버 측에서 사용되는 컴포넌트의 경우 서버에 부하를 주게 되는데 plugin 액션 태그를 이용해 서버의 부하를 줄여 줄 수 있다

<jsp:plugin type=”플러그인 타입” codebase=”클래스 파일 위치” code=”불러올 클래스 파일” width=”가로” height=”세로”>
	<jsp:params>
		<jsp:param name=”파라미터이름” value=”파라미터값”/> 
	<jsp:params>
</jsp:plugin〉

 

728x90
반응형
728x90

JSP 표준 액션 태그

JSP에서 기본으로 제공하는 태그

 

jsp:include

현재 페이지에 특정 페이지를 포함할 때 사용

공통 코드를 복붙 하기보다 각각 JSP 페이지에 구성을 하고 액션태그를 이용해 페이지를 포함시키는 것이 좋다 공통적으로 적용된 부분을 한꺼번에 수정할 수 있게 되어 유지보수가 수월

jsp include 지시자와의 차이

<%@ include file=“파일 명” %>과 쓰임이 동일하나 jsp파일이 java파일로 변환될 때 삽입되는 <%@ include %>와는 달리

jsp파일이 java파일로 바뀌고 컴파일이 완료되어 런타임 시 삽입

<jsp:include page=“파일 명“ flush=“true”/>
<jsp:include page=“./header.html”>
		<jsp:param name=“str” value=“안녕하세요”> 
</jsp:include>

 

 

jsp:forward

현재 페이지 접근 시, 특정 페이지로 이동

하나의 JSP페이지에서 다른 JSP페이지로 요청 처리를 전달할 때 사용 전달하는 페이지에서 request, response객체가 같이 전달되며, URL 변경x

RequestDispatcher 의 forward와 비슷

<jsp:forward page=”이동할페이지”>
		<jsp:param name=”변수명” value=”값” /> 
</jsp:forward>

 

<% if(str.equals(“A”)) { %>
		<jsp:forward page=“test1Class.jsp”>
<% } else { %>
		<jsp:forward page=“test2Class.jsp”> <% } %>

 

jsp:useBean

Java Bean객체를 사용하기 위한 태그

JSP에서 사용하는 VO, DTO, Entity와 동일

java class를 참조하여 빈(java bean) 객체를 생성하고 setProperty와 getProperty를 통해 값 저장 및 조회 가능

이미 같은 이름의 객체가 생성된 경우 기존의 객체 참조

 

   - id : 객체 인스턴스를 식별하는 이름

   - class : 완전한 형태의 클래스 이름

   - scope : 객체 참조의 유효범위(default : page)

<jsp:useBean id=”빈 이름” scope=”범위” class=”빈의 저장위치”/〉

<jsp:useBean id=“객체명“ class=“패키지 명. 클래스 명“ scope=“범위 지정자“/>
728x90
반응형
728x90

 

에러메세지

HTTP 상태 404 – 찾을 수 없음

Origin 서버가 대상 리소스를 위한 현재의 representation을 찾지 못했거나, 그것이 존재하는지를 밝히려 하지 않습니다.

상황

배운 코드를 써볼려고 새로 workspace와 프로젝트 파일을 생성하고 jsp뷰와 모델.vo 파일만해서 실행해봄. 수업 때는 저 두 파일만해서 페이지가 켜졌는데 에러나서 찾는 중

원인

이 에러메세지 원인의 상당 부분은 해당 경로가 잘못됬거나,경로가 지정하는 곳에 파일이 없는 것

지금의 경우에는 WEB-INF 아래 있는 파일들은 서버에서만 접근이 가능해서 서블릿을 통해야만 접근 할 수 있기 때문에

그래서 파일을 찾지 못한다고 나왔던 것

 

해결

파일들을 WebContent 아래로 이동

728x90
반응형

+ Recent posts