레이블이 JSP&Servlet인 게시물을 표시합니다. 모든 게시물 표시
레이블이 JSP&Servlet인 게시물을 표시합니다. 모든 게시물 표시

jsp와 java, html의 퓨전으로 성적 계산 처리하는 예제

안녕하세요

이번에는 이클립스 환경에서

jsp, java, html 각각의 소스로 성적 계산을 하는 예제를 올려봅니다.


옛날에 html, javascript 를 블로그에도 조금 올리고 다루었지만

1달 정도 안했더니 이게 완전 리셋된것처럼 적응이 안되네요 ㅜ

역시 프로그래밍 언어는 하루에 조금씩이라도 계속 손을 대야 녹슬지 않고 유지되는것 같습니다.


자 어쨋든 예제 소스 코드 올려봅니다.

파일 구성은 jsp 파일 두개입니다.

데이터를 입력 받는 클래스와 그 결과를 처리하는 클래스 두개입니답~!!



==========================================================

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!doctype html>
<html>
   <head><title>::성적 계산::</title>
   <link rel="stylesheet" type="text/css" href="../css/memo.css">
   <script type="text/javascript">
   //유효성 체크하는 함수 만들기
   var send=function(){
      //학번 체크
   
      //var n = getElementById('num');
      if(!f.num.value){
         alert('학번을 입력하세요.');
         f.num.focus();
         return;
      }
      if(isNaN(f.java.value)){
         alert('자바점수가 숫자가 아니에요');
         f.java.select();
         return;
      }
      if(isNaN(f.db.value)){
         alert('DB점수가 숫자가 아니에요');
         f.db.select();
         return;
      }
      if(isNaN(f.jsp.value)){
         alert('JSP점수가 숫자가 아니에요');
         f.jsp.select();
         return;
      }
      f.submit();
   }
 
   </script>
 
</head>
   <body>
   <h1>성적입력</h1>
   <form name="f" action="Result.jsp" method="post">
   <table border=1>
      <tr>
         <td colspan="2">학번</td>
         <td>
         <input type="text" name="num" id="stuNum">
         </td>
      </tr>
      <tr>
         <td rowspan="3">과목</td>
         <td>Java</td>
         <td>
         <input type="text" name="java" >
         </td>
      </tr>
      <tr>
         <td>Database</td>
         <td>
         <input type="text" name="db" >
         </td>
      </tr>
      <tr>
         <td>JSP</td>
         <td>
         <input type="text" name="jsp" >
         </td>
      </tr>
      <tr>
         <td colspan="3">
         <button type="button" onclick="send()">전송</button>
         </td>
      </tr>
   </table>
   </form>
   </body>

</html>


==========================================================

위 소스 코드를 실행하면..




위와 같은 창 화면이 빈 텍스트 창에 값을 입력하면

Result.jsp로 이동하면서 결과 화면이 출력됩니다.






Result.jsp 소스 코드는 바로 아래 올려드립니다.


==========================================================

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!doctype html>
<html>
<head><title>::성적 계산::</title>
<link rel="stylesheet" type="text/css" href="../css/memo.css">
<script type="text/javascript">

<%
//1. 사용자가 입력한 값 받기(num, java, db, jsp)
//내장객체 : request. HttpServletRequest 타입 : response. HttpServletResponse 타입
String num=request.getParameter("num");
String jav=request.getParameter("java");
String db=request.getParameter("db");
String jsp=request.getParameter("jsp");
out.println("학번 : "+num+", java="+jav+", db="+db+", jsp="+jsp);
// 유효성 체크 널 체크 => 요청 경로가 잘못된 경우
if(num==null||jav==null||db==null||jsp==null){
//response.sendRedirect("ex06.jsp");
%>
//자바스크립트 처리방식
<script type="text/javascript">
alert('잘못 들어온 경로입니다');
location.href='ex06.jsp';
</script>
<%
return;
}
//3. 빈문자열로 넘어올 경우 0점 처리 
if(jav.trim().isEmpty()){
jav="0";
}
if(db.trim().isEmpty()){
db="0";
}
if(jsp.trim().isEmpty()){
jsp="0";
}
int javInt=Integer.parseInt(jav.trim());
int dbInt=Integer.parseInt(db.trim());
int jspInt=Integer.parseInt(jsp.trim());
int sum=javInt+dbInt+jspInt;
float avg=sum/3.0f;

%>

<br> sum: <%=sum %>
<br> avg: <%=avg %>
</script>

<table border='1'>
<tr>
<td colspan="2">학번</td>
<td>
<b><%=num%></b>
</td>
</tr>
<tr>
<td rowspan="3">과목</td>
<td>Java</td>
<td>
<b><%=javInt%></b>
</td>
</tr>
<tr>
<td>Database</td>
<td>
<b><%=dbInt%></b>
</td>
</tr>
<tr>
<td>JSP</td>
<td>
<b><%=jspInt %></b>
</td>
</tr>
<tr>
<td colspan="2">평균점수</td>
<td style="color:red">
<b><%=avg%></b>
</td>
</tr>
<tr>
<td colspan="3">
<button type="button" onclick="history.back()">입력화면</button>
</td>
</tr>
</table>
</html>

==========================================================

page 지시어를 이용한 예외 처리 페이지 지정

안녕하세요

이번 시간에는 오라클 DB에 접근하는데 접근 권한 거부나 계정 정보가 불일치하여

접근이 안되는 예외 상황이 발생하면 PAGE 지시어를 이용하여 예외 처리 페이지를

지정하는 예제를 올려봅니다.


저번에는 스샷을 안 찍었는데, 이번에는 스샷 찍겠습니답!!


일단 먼저 오라클 db에 접근하는 소스를 올려봅니다.

==========================================================

<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.sql.*"%>

<%@ page errorPage="error.jsp" %>
<%-- 이 페이지에서 예외가 발생하면 error.jsp에서 처리하겠다는 의미 --%>

<h1>page 지시어를 이용한 예외 처리 페이지 지정</h1>

<%
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:ORCL";
String user="scottt", pwd="tiger";
Connection con=DriverManager.getConnection(url,user,pwd);
out.println("<h1>DB연결 성공</h1>");

String sql="SELECT * FROM TAB";
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(sql);
%>

<h2 style="color:red"><%=user%>계정의 테이블 목록</h2>

<%
while(rs.next()){
String tname=rs.getString(1);
String type=rs.getString(2);
out.println("<li>"+tname+": "+type+"</li>");
}

if(rs!=null) rs.close();
if(st!=null) st.close();
if(con!=null) con.close();

//cmd->sqlplus -> purge recyclebin; 해서 scott 계정에 있는 찌거기 데이터 비우기 -> 출력 결과 깔끔하게 나옴
%>

=========================================================

위의 소스 코드를 실행하면 아래와 같은 화면이 출력됩니다.

scott 계정의 테이블 목록을 다 보여줍니다.



하지만 간혹..

'String user="scottt", pwd="tiger";' 와 같이

scott인 아이디에 't' 를 하나 붙여서 로그인을 실패하면

error.jsp 에서 예외가 발생된 상황에 대해 처리하는 소스를 기술해야 합니다.


자 그럼 바로 소스 올려봅니다.

딱히 별건 없습니답 ^^


=========================================================

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page isErrorPage="true" %>
<%
response.setStatus(response.SC_OK);
//ie에서는 위 코드를 지정해야 에러 처리 페이지가 동작한다
%>

<%-- error.jsp 페이지에서는 page 지시어에 반드시 isErrorPage 라는 속성값으로 true를 주어야 한다.
그래야 exception 이라는 내장 객체를 사용할 수 있다. --%>

<!DOCTYPE html>
<html>
<head><title>error 처리 페이지</title></head>
<body>
<div align="center">
<table style="width:600px;height:400px;background-color:#efefef">
<tr>
<td style="color:red;text-align:center">
<%
if(exception instanceof java.sql.SQLException){
out.println("서버오류: "+exception.getMessage());
}else{
out.println("오류발생: "+exception.getMessage());
}
exception.printStackTrace(); // 스택 기록 찍기(서버 콘솔에)
%>
</td>
</tr>
</table>
</div>
</body>
</html>

=========================================================

위의 계정이 틀렸으면 저 소스 코드 페이지로 이동되어 처리됩니다.





jsp 스크립팅 요소 - jsp Scripting Element

안녕하세요

이번 시간에는 jsp 구성 요소 중 스크립팅 요소에 대해 글을 써보겠습니다.

아 jsp 뭔가 적응이 안되네요;;

자바가 이제 적응되려고 했는데, jsp를 새로 배워보니 음..

하지만

문을 계속 두드리면 좋은 결과가 있을 겁니다.


JSP의 스크립팅 요소에는 크게 3가지가 있습니다.

바로 선언문(declaration), 실행문(scriptlet), 출력식(expression) 입니다.



<1> 선언문(declaration)

선언문의 생김새는

<%! %> 입니다.

선언문의 용도는 멤버변수를 선언하거나 사용자 정의 메소드를 구성할 때 이곳에서 구성 하기 위해서 입니다.


<2> 실행문(scriptlet)

실행문의 생김새는

<% %> 입니다.

실행문에서 변수를 선언하면..

이 곳에서 작성된 코드는 모두 __jspService() 안에 들어갑니다.
또한 jsp 내장 객체들(out, request, response 등)도  __jspService() 메소드 안에 선언된 지역변수입니다.



확인 방법 (저는 루트가 MyJava 입니다. pc 마다 다르니 workspace부터 보면 될듯요 ^^)

C:\MyJava\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\MyWeb\org\apache\jsp\example

직접 들어가서 ex04.jsp를 들어가면 멤버변수, 지역변수의 위치가 다르다


<3> 출력문

출력문의 생김새는

<%=" "%> 입니다.

출력문의 용도는 말 그대로 어떤 변수에 담아 있는 값들을 출력하기 위해서 입니다.


이번 시간에는 개념적인 요소만 이야기 하고 글을 마무리 짓겠습니다

jsp를 계속 하기 위해서는 알아야 할 개념이니 유의하십시오~!



jsp로 구구단 만들기~!

안녕하세요

요즘 프로그램 만드는 게 있어서 한동안 블로그를 못했네요

이제 프로그램 만드는 것도 좀 끝나고 시간도 널널해서 다시 블로그를 시작하겠습니다

오늘은 jsp로 구구단 만들기를 한번 해보겠습니답~!

잘 봐주세요

ㄱㄱㄱㄱㄱㄱㄱㄱㄱ



==========================================================

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<h1>구구단</h1>

<table border="1">

<tr>
<%
for(int i=2;i<=9;i++)
{
%>
<td> <%= i+"단" %></td>

<%
}
%>
</tr>

<%
for(int i=1;i<=9;i++)
{
%>
<tr>

<%
for(int j=2;j<=9;j++)
{
%>
<td>
<%=j%> X <%=i%> = <%=j*i%>
</td>

<%
}
%>
</tr>

<%
}
%>
</table>

=========================================================

일단 결과 화면입니다..





사실 jsp로 구구단을 작성하는게 처음이라서..

이게 두번째 해보는건데 가물가물 하네요 ㄷㄷ

jsp는 적응 하려면 좀 걸릴것 같습니다 ㅜㅜ


GetServlet, PostServlet - 자바 Servlet 첫 시작

안녕하세요

오늘부터 자바 jsp/servlet을 진행할까 합니다

이것도 실무에서 많이 쓰이기 때문에 저도 블로그에 기록도 할 겸

다른 분들도 아셨으면 하는 차원에서 글을 써봅니다


이번 시간에는 get 방식과 post 방식에 대해서 이론적인 내용과

그리고 실제 코딩으로 구현한 예를 올립니다


get 방식과 post 방식은 http 프로토콜을 이용해서 서버에게 데이터를 전달 할 때

쓰이는 방식입니다.


그 두 개의 차이점은 제가 내일 아침이나 낮에 추가로 업로드 하겠습니다

잠깐 소스를 보여주기 전에 설명을 드리자면..

정리해서 흐름을 말하자면


html 파일을 작성할 때 <form> 태그 안에

'<form action="PostServlet" method="POST"> ' 을 기술해서

자바 파일에서

'@WebServlet("/PostServlet")' 으로 html 액션명과 자바 웹서블릿명을 맞춰야 합니다



그리고 html 파일에서

method='GET' 또는 method='POST' 방식으로 어떤 방식으로

데이터를 보낼지 기술합니다


자바 파일에서는

doGet()이나 doPost() 방식으로 html 방식에 맞게끔 메서드를 기술해주고

자바 파일에서 응답을 할 때는 아래와 같은 형태로 합니다.

//응답 유형 지정
res.setContentType("text/html; charset=UTF-8");

//스트림 얻어오기
PrintWriter out=res.getWriter();

// 출력
out.println('코드');


반대로 html 파일이 보낸 데이터를 받을 때는

req.setCharacterEncoding("UTF-8");

//사용자가 입력한 값 받아오기
String id=req.getParameter("userId");
String pw=req.getParameter("pwd");

위와 같은 방식으로 처리합니다.


자 그러면 실제 자바 소스를 볼까요?


- Input.html -
=========================================================

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<h1>GET방식 테스트</h1>
<form action="GetServlet" method="GET">
<label>아이디</label>
<input type="text" name="userId"><p>
<label>비밀번호</label>
<input type="password" name="pwd"><p>
<button type="submit">보내기</button>
<button type="reset">다시쓰기</button>
</form>
</div>
</body>
</html>

실행 결과



-GetServlet.java-
input.html의 아이디, 비밀번호 값을 처리하는 서블릿(get방식)
=========================================================

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
/* 요청방식(method)
 * - GET 방식(DEFAULT)
 * - POST 방식
 * - PUT 방식
 * - DELETE 방식
 * - OPTION 방식
 * */

@WebServlet("/GetServlet")
public class GetServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

//get 방식의 요청 처리를 위해서는 doGet()을 오버라이드 하고
//post 방식의 요청 처리를 위해서는 doPost()를 오버라이드 한다
//input.html에서 get 방식으로 보내니 이쪽에서도 get으로 응수하자
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOException{

res.setContentType("text/html; charset=UTF-8");
PrintWriter out=res.getWriter();

//1. 사용자가 입력한 값 받아오기(아이디, 비밀번호 값)
String id=req.getParameter("userId");
String pw=req.getParameter("pwd");

//2. 유효성 체크
if(id==null||pw==null||id.trim().isEmpty()||pw.trim().isEmpty()){
out.println("<b>아이디, 비밀번호를 입력해야 해요</b>");
return;
}
out.println("<h1>GetServlet</h1>");
out.println("<h2>환영합니다. "+id+"님</h2>");
out.println("<h2>당신의 비밀번호는 "+pw+"이군요</h2>");
out.close();
}

}////////////////////////////



=========================================================

보시다시피 get 방식은 주소에 userid, pwd 값이 노출되는 점이 있어

일반적으로 회원가입과 같은 중요한 데이터를 처리하는 곳에서는 처리하지 않습니다

사실 일반적으로 다들 이렇게 아는데..

링크

위의 블로그에 들어가면 get과 post의 차이를 제대로 알려주는 곳이 있습니다

한번 참고하시길 바랍니다




자 이번에는 post 방식 예제를 올려봅니다

post 방식은 구현한 메소드명만 차이 있지 거의 비슷합니다

어쨋든 소스를 올려봅니다


-Input2.html-
=========================================================

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<h1>POST방식 테스트</h1>
<form action="PostServlet" method="POST">
<label>아이디</label>
<input type="text" name="userId"><p>
<label>비밀번호</label>
<input type="password" name="pwd"><p>
<button type="submit">보내기</button>
<button type="reset">다시쓰기</button>
</form>
</div>
</body>
</html>




-PostServlet.java-
input.html의 아이디, 비밀번호 값을 처리하는 서블릿(post 방식)

=========================================================

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;

@WebServlet("/PostServlet")
public class PostServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

//응답 유형 지정
res.setContentType("text/html; charset=UTF-8");

//스트림 얻어오기
PrintWriter out=res.getWriter();

/* get 방식은 한글이 안깨지고 post 방식은 한글이 깨진다
tomcat 7.0부터 get방식은 한글 안깨지게 해주고
post 방식은 바디에 포함되어 있는데 그 부분은 한글 인코딩 처리를 못해준다.
* */
//post 방식일 경우 한글 처리
req.setCharacterEncoding("UTF-8");

//사용자가 입력한 값 받아오기
String id=req.getParameter("userId");
String pw=req.getParameter("pwd");

//유효성 체크하기
if(id==null||pw==null||id.trim().isEmpty()||pw.trim().isEmpty()){
//out.println("<marquee><b>ID, PW를 입력해야 해요</b></marquee>");
//이번에는 자바 스크립트로 구현해보자
out.println("<script>");
out.println("alert('아이디,비번을 입력하세요')");
out.println("location.href='Input2.html'"); // 이전 페이지로 이동
out.println("</script>");
return;
}

//환영 메시지 출력
out.println("<marquee><h1>PostServlet</h1>");
out.println("<h2>환영합니다. "+id+"님</h2>");
out.println("<h2>당신의 비밀번호는 "+pw+"이군요</h2>");

//스트림 닫기
out.close();
}

}



get/post 방식 모두 다 정상적으로 실행을 했습니다

어때요? 참 쉽죠 ^^