본문 바로가기
computing

javaweb 13 정리

by greentworkshop 2025. 11. 26.

루트 프로젝트를 바꿔라
프로젝트 경로를 바꿔라
버전, 그룹을 바꿔라 -> build gradle 코끼리 모양 아이콘 -> 
settings.gradle 이름 수정 -> tomcat gradle 이름이 수정된다

application context의미 - 서버에 배포할 이름 설정
application server -> tomcat 10.1.48
jdk version -> temurine 17

default constructor는 constructor가 하나도 존재하지 않을 때만 생성된다.

 

<!--JDBCController GPT수정본-->

package com.example.demo.controller;

import com.example.demo.domain.Actor;
import com.example.demo.domain.City;
import com.example.demo.domain.Country;
import com.example.demo.domain.CountryLanguage;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;

@WebServlet(name="jdbcController",
        urlPatterns = {"/sba2/country","/sba2/city", "/sba2/language",
                "/sba2/actor", "/sba2/save", "/sba2/delete", "/sba2/update-form",  "/sba2/update"})
public class JDBCController extends HttpServlet {
    private Connection conn = null;
    private Statement stmt = null;
    private PreparedStatement pstmt = null;
    private ResultSet rs = null;

    protected void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String dbServer = "jdbc:mysql://localhost:3306/";
        String jdbcUrl = dbServer + "world";
        String dbUser = "root";
        String dbPass = "cometrue";
        // URI에서는 마지막 '/' 뒷 부분을 서브스트링화
        String uri = request.getRequestURI();
        String tbName = uri.substring(uri.lastIndexOf('/') + 1);
        String query = "";

        if(tbName.equals("city")){
            query = "select * from city";
        }
        else if(tbName.equals("country")){
            query = "select * from country";
        }
        else if(tbName.equals("language")){
            query = "select * from countrylanguage";   // ★ 오타 수정(countrylauage → countrylanguage)
        }
        else if(tbName.equals("actor")){
            jdbcUrl = dbServer + "sakila"; // 다른 DB를 사용 지정함
            query = "select * from actor order by last_update desc"; // sakila DB에 포함된 actor 테이블에 질의
        }
        else if(tbName.equals("save")){
            jdbcUrl = dbServer + "sakila"; // 다른 DB를 사용 지정함

            query = "insert into actor(first_name, last_name) values ('" +  // ★ 문자열 오류 수정
                    request.getParameter("first_name") + "', '" +
                    request.getParameter("last_name") + "')";              // ★ last_name 제대로 반영
        }
        else if(tbName.equals("delete")){
            jdbcUrl = dbServer + "sakila"; 
            query = "delete from actor where actor_id = " + Integer.parseInt(request.getParameter("actor-id"));
        }
        else if(tbName.equals("update")){
            jdbcUrl = dbServer + "sakila"; 
            query = "update actor set first_name = '" + request.getParameter("first_name") +
                    "', last_name = '" + request.getParameter("last_name") +
                    "' where actor_id = " + Integer.parseInt(request.getParameter("actor_id"));
        }

        try { 
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try {
            conn = DriverManager.getConnection(jdbcUrl, dbUser, dbPass);
            stmt = conn.createStatement();

            if(tbName.equals("country")) {
                rs = stmt.executeQuery(query);
                ArrayList<Country> countries = new ArrayList<Country>();
                Country country = null;
                while (rs.next()) {
                    country = new Country();
                    country.setCode(rs.getString(1));
                    country.setName(rs.getString(2));
                    country.setContinent(rs.getString(3));
                    country.setRegion(rs.getString(4));
                    countries.add(country);
                }
                request.setAttribute("list", countries);
                request.getRequestDispatcher("/WEB-INF/sba2/country.jsp").forward(request, response);
            } 
            else if(tbName.equals("city")) {
                rs = stmt.executeQuery(query);
                ArrayList<City> cities = new ArrayList<City>();
                City city = null;
                while (rs.next()) {
                    city = new City();
                    city.setId(rs.getInt(1));
                    city.setName(rs.getString(2));
                    city.setCountryCode(rs.getString(3));
                    city.setDistrict(rs.getString(4));
                    city.setPopulation(rs.getInt(5));
                    cities.add(city);
                }
                request.setAttribute("list", cities);
                request.getRequestDispatcher("/WEB-INF/sba2/city.jsp").forward(request, response);
            }
            else if(tbName.equals("language")) {
                rs = stmt.executeQuery(query);
                ArrayList<CountryLanguage> countryLanguages = new ArrayList<CountryLanguage>();
                CountryLanguage countryLanguage = null;
                while (rs.next()) {
                    countryLanguage = new CountryLanguage();
                    countryLanguage.setCountryCode(rs.getString(1));
                    countryLanguage.setLanguage(rs.getString(2));
                    countryLanguage.setIsOfficial(rs.getString(3));
                    countryLanguage.setPopulation(rs.getString(4));
                    countryLanguages.add(countryLanguage);
                }
                request.setAttribute("list", countryLanguages);
                request.getRequestDispatcher("/WEB-INF/sba2/country-language.jsp").forward(request, response);
            }
            else if(tbName.equals("actor")) {
                rs = stmt.executeQuery(query);
                ArrayList<Actor> actors = new ArrayList<Actor>();
                Actor actor = null;
                while (rs.next()) {
                    actor = new Actor();
                    actor.setActorId(rs.getInt(1));
                    actor.setFirstName(rs.getString(2));
                    actor.setLastName(rs.getString(3));
                    actors.add(actor);
                }
                request.setAttribute("list", actors);
                request.getRequestDispatcher("/WEB-INF/sba2/actors.jsp").forward(request, response);
            }
            else if(tbName.equals("save")) {

                int i = stmt.executeUpdate(query);   // ★ INSERT는 executeUpdate()로 실행

                // ★ INSERT 후 다시 목록 조회해야 하므로 새로운 select 쿼리로 변경
                query = "select * from actor order by last_update desc";

                rs = stmt.executeQuery(query);

                ArrayList<Actor> actors = new ArrayList<Actor>();
                Actor actor = null;
                while (rs.next()) {
                    actor = new Actor();
                    actor.setActorId(rs.getInt(1));
                    actor.setFirstName(rs.getString(2));
                    actor.setLastName(rs.getString(3));
                    actors.add(actor);
                }
                request.setAttribute("list", actors);
                request.getRequestDispatcher("/WEB-INF/sba2/actors.jsp").forward(request, response);
            }

        } catch(SQLException e)  {
            System.out.println(e.getMessage());
        } finally {
            if (rs != null) try { rs.close(); } catch (Exception e) {}
            if (pstmt != null) try {pstmt.close(); } catch (Exception e) {}
            if (stmt != null) try {stmt.close(); } catch (Exception e) {}
            if (conn != null) try {conn.close(); } catch (Exception e) {}
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        process(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        process(request, response);
    }

}

 

servlet은  request scope와 동일한 기능

 

전역변수의 단점 : 메모리 가용성이 떨어짐, side effect가 발생할 수 있음

'computing' 카테고리의 다른 글

20251127-android13, 그래픽, Empty Views Activity menu해결  (0) 2025.11.27
20251124_iOS12  (0) 2025.11.24
20251117 - iOS12  (0) 2025.11.17
android11  (0) 2025.11.13
20251103_iOS10  (0) 2025.11.03