100일 챌린지/빅데이터기반 인공지능 융합 서비스 개발자

Day 31 - servlet을 이용한 싱글 페이지 어플리케이션

ksyke 2024. 9. 4. 17:06

목차

    홈페이지 만들기

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
        <style rel="stylesheet" type="text/css">
        *{margin:0px;padding:0px;}
        .container{margin:0px auto;width:800px;}
        .header{margin: 20px 0px;}
        .header>h1{
            background-image:url("imgs/logo.png");background-repeat:no-repeat;
            height:41px;
            margin:0px 10px;
            text-indent:-999px;
        }
        #menu{height: 35px;background-color:black;border-bottom:5px solid black;}
        #menu>ul{
            list-style:none;
            width:400px;
            margin:0px auto;
        }
        #menu>ul>li{
            float:left;
            width:100px;
        }
        #menu>ul>li>a{
            color:white;
            display:block;
            height:35px;
            text-align:center;
            text-decoration:none;
            text-transform:uppercase;
            line-height: 20px;
        }
        #menu>ul>li>a:hover{border-bottom:5px solid yellow;box-sizong:border-box;}
        #footer{background-color:black;padding:30px;border-top:5px solid white;}
        #footer>p{text-align:center;font-size:0.8em;color:gray;}
        #container img{width:100%;}
        #p1{}
        #p1>.slider{}
        #p1 .bx-wrapper{
            position: relative;
        }
        #p1 .bx-controls-direction{
    
        }
        #p1 .bx-controls-direction>a:first-child{
            position: absolute;
            top: 0px;
            background-color: black;
            display: inline-block;
            height: 241px;
            width: 100px;
            line-height: 200px;
            text-align: center;
            opacity: 0.3;
            text-decoration: none;
            font-size: 72px;
            color:white;
        }
        #p1 .bx-controls-direction>a:nth-child(2){
            position:absolute;
            top:0px;
            background-color:black;
            display: inline-block;
            height: 241px;
            width: 100px;
            line-height:200px;
            text-align: center;
            opacity:0.3;
            text-decoration:none;
            font-size:72px;
            color:white;
            left: 700px;
        }
        #p1 .bx-pager{
            height: 100px;
            width:120px;
            margin: 0px auto;
        }
        #p1 .bx-pager>div{
            float: left;
            width: 20px;
        }
        #p1 .bx-pager>div>a{
            text-decoration:none;
        }
        #content>div>h2{text-align: center; text-transform: capitalize;}
        #content table{margin: 10px auto;border-collapse:collapse;width:90%;}
        #p3 table,#p3 table th, #p3 table td{border:1px solid gray;text-align:center;}
        #p3 td:first-child{width:80px;text-align:center;}
        #p3 td>a{display: block; height: 30px;}
        </style>
    
        <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
        <script type="text/javascript" src="js/jquery.bxslider.min.js"></script>
        <script type="text/javascript">
        var xmlParsing=function(){
            $.get('bbsList.xml',function(data){
                $('#p3 table>tbody').empty();
                $(data).find('row').each(function(idx,ele){
                    var num=$(ele).find('num').text();
                    var sub=$(ele).find('sub').text();
                    var id=$(ele).find('id').text();
                    var nalja=$(ele).find('nalja').text();
                    $('<tr/>')
                        .append($('<td/>').text(num))
                        .append($('<td/>').text(sub))
                        .append($('<td/>').text(id))
                        .append($('<td/>').text(nalja))
                        .appendTo('#p3 table>tbody');
                });
            },"xml");
        };
        var homecb=function(e){
            e.preventDefault();
            //console.log('home');
            $('#p1').show().next().hide().next().hide().next().hide();
        };
        var introcb=function(e){
            e.preventDefault();
            //console.log('intro');
            $('#p1').hide().next().show().next().hide().next().hide();
        };
        var bbscb=function(e){
            e.preventDefault();
            //console.log('bbs');
            $('#p1').hide().next().hide().next().show().next().hide();
            xmlParsing();
        };
        var logincb=function(e){
            e.preventDefault();
            //console.log('login');
            $('#p1').hide().next().hide().next().hide().next().show();
        };
            $(function(){
                $('#p1 .slider').bxSlider({
                    auto:true,
                    prevText:'<',
                    nextText:'>'
                });
                $('#menu a')
                    .eq(0).click(homecb)
                    .end().eq(1).click(introcb)
                    .end().eq(2).click(bbscb)
                    .end().eq(3).click(logincb);
                $('#menu a').eq(0).click();
            });
        </script>
    </head>
    <body>
        <div class="container">
            <div class="header">
                <h1>인제대학교</h1>
            </div>
            <div id="menu">
                <ul>
                    <li><a href="#">home</a></li>
                    <li><a href="#">intro</a></li>
                    <li><a href="#">bbs(xml)</a></li>
                    <li><a href="#">bbs(json)</a></li>
                </ul>
            </div>
            <div id="content">
                <div id="p1">
                    <div class="slider">
                        <img src="imgs/img1.jpg"/>
                        <img src="imgs/img2.jpg"/>
                        <img src="imgs/img3.jpg"/>
                        <img src="imgs/img4.jpg"/>
                        <img src="imgs/img5.jpg"/>
                        <img src="imgs/img6.jpg"/>
                    </div>
                </div>
                <div id="p2"><h2>intro page</h2></div>
                <div id="p3">
                    <h2>bbs page(xml)</h2>
                    <table>
                        <thead>
                            <tr>
                                <th>글번호</th>
                                <th>제목</th>
                                <th>글쓴이</th>
                                <th>날짜</th>
                            </tr>
                        </thead>
                        <tbody></tbody>
                    </table>
                </div>
                <div id="p4">
                    <h2>bbs page(json)</h2>
                    <table>
                        <thead>
                            <tr>
                                <th>글번호</th>
                                <th>제목</th>
                                <th>글쓴이</th>
                                <th>날짜</th>
                            </tr>
                        </thead>
                        <tbody></tbody>
                    </table>
                </div>
            </div>
            <div id="footer">
                <p>김해캠퍼스 (50834) 경남 김해시 인제로 197</p>
                <p>Copyright(c) 1996-2022 INJE University. All rights reserved.</p>
            </div>
        </div>
    </body>
    </html>

    src의 패키지에 servlet 만들기

    package com.bbs.xml;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class BbsList extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            //System.out.println("servlet run...");
    
            response.setContentType("application/xml; charset=utf-8");
            PrintWriter out = response.getWriter();
            out.println("<bbs>");
    
            String url="jdbc:oracle:thin:@localhost:1521:xe";
            String user="scott";
            String password="tiger";
    
            String sql="select num,sub,id,nalja from ";
            sql+="(select rownum as rn, num,sub,id,nalja from ";
            sql+="(select num,sub,id,nalja from bbs02 order by num desc))";
            sql+=" where rn between 1 and 10";
    
            Connection conn=null;
            Statement stmt=null;
            ResultSet rs=null;
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
    
                conn=DriverManager.getConnection(url,user,password);
                stmt=conn.createStatement();
                rs=stmt.executeQuery(sql);
    
                while(rs.next()) {
                    out.println("<row>");
                    out.println("<num>"+rs.getInt("num")+"</num>");
                    out.println("<sub>"+rs.getString("sub")+"</sub>");
                    out.println("<id>"+rs.getString("id")+"</id>");
                    out.println("<nalja>"+rs.getDate("nalja")+"</nalja>");
                    out.println("</row>");                
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if(rs!=null)rs.close();
                    if(stmt!=null)stmt.close();
                    if(conn!=null)conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
    
            out.println("</bbs>");
            out.close();
        }
    }

    web.xml에 servlet 매핑하기

      <servlet>
          <servlet-name>xmlList</servlet-name>
          <servlet-class>com.bbs.xml.BbsList</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>xmlList</servlet-name>
          <url-pattern>/bbsList.xml</url-pattern>
      </servlet-mapping>

    servlet 클래스 파일 만들기