728x90

 

 

1번
href가 실행되게 되면 ${before}가
var속성에 설정된 var="before"를 호출하고 

 

2번
<c:url>에 같은 속성인 value에 있는 notice.bo로 데이터를 보내는데
<c:param>의 정보들도 같이 실어 보내야하니 ( name="page" value="${ pi.currentPage - 1 }

 

3번
notice.bo 호출

 

728x90
반응형
728x90

 

 

${ bdelete }

84번째 라인 ${ bdelete } 태그가 73번째 라인 var=”bdelete”를 가져다 쓰는거고 bdelete의 value속성은 url을 담고있음

삭제하기 버튼을 누르면 84번째 라인 ${ bdelete } 가 실행되고 var=”bdelete”가 호출되고 var=”bdelete”와 이어져있는 url인 bdelete.bo가 연결된 콘트롤러로 연결됨.

이때 74번째 라인 <c:param> 안에 pk역할을 하는 name=”bId”를 콘트롤러에서 데이터를 받게되면 ${ board.boardId } 를 받는데 db의 boardId 컬럼은 게시글 번호이므로 1,2,3,4 이런식으로 int값이 최종적으로 컨트롤러에 들어가게된다

삭제하기 버튼 누르면 bdelete쪽으로 넘길 때

<c:param name="bId" value="${ board.boardId }"/> 이부분을 가지고 넘김

 

@RequestMapping("bdelete.bo")
public String deleteBoard(@RequestParam("bId") int bId, 
						  @RequestParam("renameFileName") String renameFileName, HttpServletRequest request) {
	// boardDetailView
	// 어디서 접근해서 삭제할지도 지정해야하니 HttpServletRequest도 추가

	if(!renameFileName.equals("")) { // renameFileName이 비어있지 않다면
		deleteFile(renameFileName, request); // renameFileName을 넘겨준다, 어디서 삭제할 것인가:request
	}
	int result = bService.deleteBoard(bId);

 

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

 

에러메세지

HTTP 상태 404 – 찾을 수 없음

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

상황

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

원인

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

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

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

 

해결

파일들을 WebContent 아래로 이동

728x90
반응형
728x90

 

JSP 표준액션태그

 <jsp:useBean>

java class를 참조하여 빈(java bean) 객체를 생성하고 setProperty와 getProperty를 통해 값 저장 및 조회 가능 이미 같은 이름의 객체가 생성된 경우 기존의 객체 참조

id속성이 변수명이 되고 참조값이 됨

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

 

 

<%@ 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>

	<p>객체값 통째로 찍기</p>
	
	<jsp:useBean id="put_varName_n_ref" class="action.model.vo.Person" ></jsp:useBean>
	객체값 통째로 찍기 : <%= put_varName_n_ref %>
	 
	<br>
	<!-- 안에 있는 값을 가져올 것임  -->
	<!-- get역할을 하는 jsp:getProperty 사용  -->
	이름 : <jsp:getProperty property="name" name="put_varName_n_ref"/><br> <%-- <% person1.getName %> --%> <!-- person1이 레퍼런스가 되는 것임. 레퍼런스로 참조할 것이 person1. 여기서 가져올 것이 이름 가져올거라 name 기술하면됨 -->
	성별 : <jsp:getProperty property="gender" name="put_varName_n_ref"/><br>
	나이 : <jsp:getProperty property="nai" name="put_varName_n_ref"/><br>
	
	
<h2> 1.표준 액션 태그  useBean으로 vo클래스 객체 불러오기</h2>
	
	<jsp:useBean id="per" class="action.model.vo.Person"></jsp:useBean>
	
	<!-- set으로 a값 넣기 : value속성값 -->
	<jsp:setProperty property="name" name="per" value="a"/>
	
	jsp:useBean & getProperty로 vo클래스 값 가져오기 : 
	<jsp:getProperty property="name" name="per"/><br><br>


<h2> 2.표준 액션 태그 중 useBean을 사용하여 vo클래스에 데이터 초기화</h2>
	<jsp:useBean id="p" class="action.model.vo.Person" scope="request"/>
	<jsp:setProperty property="name" name="p" value="b"/>
	
	jsp:useBean & getProperty로 vo클래스 값 가져오기 : 
	<jsp:getProperty property="name" name="p"/><br><br>
	
	
	이름 : <jsp:getProperty property="name" name="p"/><br> 
	성별 : <jsp:getProperty property="gender" name="p"/><br>
	나이 : <jsp:getProperty property="nai" name="p"/>

</body>
</html>
728x90
반응형
728x90

 

 

에러메시지

java.lang.NosuchmethodError : action.model.vo.Person.getAge()

 - action부터 getAge()까지는 패키지명.게터명

 

상황

jsp 표준 액션태그의 property값이 어디에서 값을 참조해오는지 알아보기 위해 model.vo에서 필드값, 게터명, 생성자의 this 등 바꿔보는 중에 getAge()를 바꾸자 에러가 남

 

 

 

원인

표준 액션태그의 property값이 참조해올 getter의 이름명을 바꿔서 찾을 수 없기에 발생

 

해결

property의 속성값을 끌어올 값의 getter명과 일치 시킨다

 

 

 

728x90
반응형
728x90

 

 

에러메시지

javax.propertyNotFoundException: [age] 특성이 [action.model.vo.Person] 유형에 없습니다.

 

상황

El 내장객체 xxxScope 사용하여 값 출력 중 발생

 

원인

나이를 끌어오는 정보에서 값을 받아오는 부분이 게터명에서 데이터를 끌어오는 건데, 서블릿에서 Person p = new Person(name, gender, age);의 age에서 나이를 불러오는 줄 알고 age로 적어서 에러 뜸

vo 클래스의 필드명과 생성자들을 중간 nai로 바꿔서 헷갈린 듯

 

해결

requestScope.person.age에서

requestScope.person.nai로 코드 수정

 

 

 

728x90
반응형
728x90

 

404 error : Page Not Found(페이지를 찾을 수 없다)

image, file, page 등 못찾아서 발생하는 것

form action, servlet url 연결부분, href 등의 부분을 주로 살펴보면 대부분 고칠 수 있을 것이다.

 

 

이클립스 + 코드 이상 없는 경우

이클립스를 쓰고 있고,  경로랑 철자 등 코드에 문제가 없는데도 계속 HTTP 404 오류와 함께 경로를 찾을 수 없다고 뜬다면

코드를 복사하고 기존 파일을 삭제하고 새로 생성하므로써 해결했습니다.

이클립스 불안정한 부분인 듯 합니다.

 

728x90
반응형
728x90

 

400대 에러 : 브라우저와 관련된 에러

대표적으로

404 error : Page Not Found(내가 페이지를 찾을 수 없다)

image, file, page 등 못찾아서 발생하는 것

form action, servlet url 연결부분, href 등의 부분을 주로 살펴본다

 

500대 에러 : 로직 에러

대표적으로

500 error : 많은 로직이 있어서 특정 불가능. 로직으로 나는 모든 에러

nullpointer, arithmetic 등 그때그때 에러 내용 확인 할 것

SQLException, SQLSyntax 관련이라 뜨면 이쪽을 보면 됨

728x90
반응형
728x90

 

Servlet이란?

웹 서비스를 위한 자바 클래스

javax.servlet.http.HttpServlet클래스를 extends를 통해 인터페이스 상속 받아 사용

 

web.xml : 설정, 매핑,연결

index.html : 화면단

java class : extends HttpServlet 기능단

체크박스, 텍스트박스 등 사용자 데이터 받는 html 페이지

 

web.xml

<?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_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>0_Practice_Servlet</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>
  <!-- 위의 welcom-file태그는 시작 시 실행시키는 파일들을 명명하는 곳임 -->
  
 
 <servlet>
 	<servlet-name>pracServlet1_get</servlet-name>
 	<servlet-class>tryto.pracServlet1_get</servlet-class>
 </servlet>
 <servlet-mapping>
 	<servlet-name>pracServlet1_get</servlet-name>
 	<url-pattern>/pracServlet1_get.do</url-pattern>
 </servlet-mapping>
  
  
  
</web-app>

 

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Jumbotron Template for Bootstrap</title>

<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
</head>

<body>
	<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
		<a class="navbar-brand" href="#">Navbar</a>

		<div class="collapse navbar-collapse" id="navbarsExampleDefault">
			<ul class="navbar-nav mr-auto">
				<li class="nav-item active">
					<a class="nav-link" href="#">Home</a>
				</li>
				<li class="nav-item">
					<a class="nav-link" href="#">Link</a>
				</li>
				<li class="nav-item">
					<a class="nav-link disabled" href="#">Disabled</a>
				</li>
				<li class="nav-item dropdown">
					<a class="nav-link dropdown-toggle" href="#" id="dropdown01" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
		            <div class="dropdown-menu" aria-labelledby="dropdown01">
		            	<a class="dropdown-item" href="#">Action</a>
		            	<a class="dropdown-item" href="#">Another action</a>
		            	<a class="dropdown-item" href="#">Something else here</a>
		            </div>
				</li>
			</ul>
			<form class="form-inline my-2 my-lg-0">
				<input class="form-control mr-sm-2" type="text" placeholder="Search"
					aria-label="Search">
				<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
			</form>
		</div>
	</nav>
	
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">Hello, Servlet world!</h1>
			<p>
				서블릿이란, 웹 서비스를 위한 자바 클래스를 말하며 자바를 사용해 웹을 만들기 위해 필요한 기술로
				javax.servlet.http.HttpServle클래스를 상속받는다.<br>
				다시 말해 기존의 java파일에 웹 페이지 구현을 위한 html이 들어간 구조라고 볼 수 있다.<br>
				클라이언트의 요청을 처리하고 그 결과를 HTML을 사용하여 요청에 대한 응답을 다시 클라이언트에 전송하는 구현 규칙이 있다.<br>
				단, HTML변경 시 servlet을 재컴파일 해야한다는 단점이 있다.
				
			</p>
			<p>
				<a class="btn btn-primary btn-lg" href="#" role="button">Learn
					more &raquo;</a>
			</p>
		</div>
	</div>

	<div class="container">
		<!-- Example row of columns -->
		<div class="row">
			<div class="col-md-4">
				<h2>Servlet-1</h2>
				<p>
					<!-- get방식 헤더에 첨부되어 전송됨 -->
					GET방식은 URL에 변수(데이터)를 포함시켜 요청하는 것으로 보안 유지가 불가능하다.
					따라서 로그인 같은 경우 get방식은 부적합하다. GET방식에서 데이터를 header에 포함하여 전송하는데
					Body는 보통 빈 상태로 전송되며 header내용 중 body의 데이터를 설명하는 content-type헤더필드도 듣어가지 않는다.
					header에 데이터가 들어가기 때문에 전송하는 길이에 제한이 있으며 초과 데이터는 절단된다. 캐싱이 가능하다.
										
				</p>
				<p>
					<a class="btn btn-secondary" href="servlet/pracServlet1_get.html" role="button">View
						details &raquo;</a>
				</p>
			</div>
			<div class="col-md-4">
				<h2>Servlet-2</h2>
				<p>
					<!-- post방식 바디에 첨부되어 전송됨 -->
					POST방식은 URL에 변수(데이터)를 노출하지 않고 요청하는 것으로 보안 유지가 가능하다.
					데이터를 Body에 포함하여 전송하므로 Body의 데이터를 설명하는 content-type헤더 필드가 들어가고 어떤 타입인지 명시해줘야 한다.
					body에 데이터가 들어가 전송 길이는 제한이 없지만 최대 요청 받는 시간이 존재해 페이지 요청, 기다리는 시간이 있다.
					URL에 데이터가 노출되지 않아 즐겨찾기나 캐싱이 불가능하다.
										
					
				</p>
				<p>
				    <a class="btn btn-secondary" href="#.html" role="button">View
						details &raquo;</a>
				</p>
			</div>
			<div class="col-md-4">
				<h2>Servlet-3</h2>
				<p>
					서블릿은 화면에 표현될 html코드를 프로그램적으로 작성한다.
					이것으로 생기는 단점은 비즈니스 로직과 화면 구현 디자인이 같이 있어 가독성이 떨어지고 개발이 어렵다.
					이러한 구조는 협업을 중요시 하는 개발자들의 입장에서는 좋지 않은 코드로 비즈니스 로직과 디자인은 분리되는 것이 좋다.
					또한 html파일 수정 시 서버를 재시동해야하고 htm1에는 서버에서 얻어온 정보를 동적으로 반영하기 힘들다.
					
				
				</p>
				<p>
					<a class="btn btn-secondary" href="#" role="button">View
						details &raquo;</a>
				</p>
			</div>
		</div>

		<hr>

	</div>

	<footer class="container">
		<p>&copy; Company 2017-2018</p>
	</footer>
</body>
</html>
728x90
반응형

+ Recent posts