maven
프로젝트 생성
e:/workspace/:
mvn archetype:generate ^
-DarchetypeGroupId=org.apache.maven.archetypes ^
-DarchetypeArtifactId=maven-archetype-webapp ^
-DgroupId=com.bit ^
-DartifactId=day50
프로젝트 import

최초 import 후 eclipse 에선 servlet이 없다고 오류가 발생하지만 servlet은 tomcat에 있고
실행 시 tomcat을 통해 실행하기 때문에 실제 실행상의 문제는 없다.
배포환경에선 상관없지만 개발환경에 있어선 상속을 받아와서 쓴다던가 할 수 가 없다.
해결 1 build path에 servlet을 올려두기.
tomcat 올려버리기
이 방법 프로젝트을 옮겨 받을 때 마다 build path를 지정해줘야 하기 때문에 사용되지 않는다.


해결 2 pom.xml dependency 추가하기
다양한 servlet이 많지만 모든 WAS컨테이너를 받기 위해서 java servlet api로 라이브러리 추가
일반적인 라이브러리의 경우는 war에 추가되는데 scope 태그를 이용해서 포함되지않도록 설정해야 한다.
javax.servlet
javax.servlet-api
3.1.0
provided
web.xml 수정
Archetype Created Web Application
Project update

module을 바꿔주고 싶은데 되지않는다.

해당 프로젝트의 .settings 폴더를 찾아가서 세팅이 되어있는 xml파일을 열어서 수정한다.

jst.web 을 3.0으로 바꾼다.

project를 update 해준 뒤 바뀐 것을 확인

SPA Web
SPA로 페이지를 제작 시 히스토리가 쌓이지 않는 단점이 존재하는데
이를 극복하기 위해서 페이지 이동 시 url에 #(id값)을 포함되도록해서 히스토리를 쌓을 수 있다. a태그를 눌리게 되면 해당하는 id를 가지고 있는 곳으로 이동된다.
<a href="#list">list</a>
<br><br>...
<div class="content" id="list">
junit test
테스트 파일은 war에 포함되지 않으며 빌드 될 때 테스트가 성공해야만 빌드가 완료된다.
테스트 파일 생성


테스트 파일 작성
public class DeptDaoTest {
@Test
public void testSelectAll() throws SQLException, ClassNotFoundException {
DeptDao dao = new DeptDao();
// mysql Connection
Class.forName(Driver.class.getCanonicalName());
String url = "jdbc:mysql://localhost:3306/lecture";
String user = System.getenv("MYSQL_USER");
String password = System.getenv("MYSQL_PW");
dao.conn = DriverManager.getConnection(url,user,password);
// dao test
List<DeptDto> list = dao.selectAll();
assertNotNull(list);
assertTrue(list.size()>0);
}
}
테스트 결과
성공

실패 - mysql 패스워드 틀림

assertion Error
assertNotNull

asserTrue

cmd에서도 테스트 가능
mvn test

ConnectionPool

DB에 미리 연결해서 Connection 미리 가지고 있고 요청이 올 때마다 커넥션 객체들을 주고 반환 받고만 하기 때문에
동시접속 처리도 되고 DB를 연결했다 끊었다 하지 않기 때문에 자원소모도 적다.
처음 시작할 때 몇개의 커넥션을 물려놓고 대기시키는 것이 필요. 적은 수의 커넥션만 물려놓다가
요청에 따라 커넥션을 늘리기도 하고 줄이기도 할 수 있다. 테스트는 tomcat을 거치지 않기 때문에 ConnectionPool 을 사용할 수 없고 따로 커넥션을 해줘야만한다
프로젝트 Server에 Context.xml 의 맨아래에 아래 코드 붙여넣기
tomcat jdbc CP Document maxIdle : 최대 유지되는 커넥션 수 (해당 수 이상의 커넥션들은 반환 받지 않고 폐기함) minIdle : 최초 생성 커넥션 수 maxActive: 최대 동시 사용되는 커넥션 수 maxWait : 최대 대기 시간 (-1을 주면 무한대기) defaultAutoCommit="false" 를 주게 되면 DAO에서 conn.commit(), conn.rollback()을 이용해야한다.
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="scott"
password="tiger"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/lecture"/>
프로젝트의 WEB-INF/web.xml에 아래 코드 붙여 넣기
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
커넥션이 필요한 DAO 파일의 생성자로 구현
Connection conn;
public DeptDao() throws NamingException, SQLException {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB");
conn = ds.getConnection();
}
Web
CORS 관련 header 세팅
Controller
resp.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:5500"); // * 를 주면 전체 공개
resp.setHeader("Access-Contorl-Aloow-Methods", "GET"); // Method를 Get만 받도록 제한
SPA 뒤로가기 되도록
창이 변경될 때 onpopstate
location.href으로 url에 적혀있는 #XXX을 파악해서 페이지가 적용되도록
$(function(){
var p1 = $('#p1').html();
var p2 = $('#p2').html();
var p3 = $('#p3').html();
var p4 = $('#p4').html();
$('#p1,#p2,#p3,#p4').hide();
$(window).on('popstate', function(e){
if(location.href.endsWith('/#index')
|| location.href.endsWith('/')){
$('.content').html(p1);
}
if(location.href.endsWith('/#intro')){
$('.content').html(p2);
}
if(location.href.endsWith('/#list')){
$('.content').html(p3);
getList();
}
});
});
'회고록(TIL&WIL)' 카테고리의 다른 글
TIL 2023.02.17 Java Web 8 (H2 DB, Maven-eclipse, Cookie, Session) (0) | 2023.02.17 |
---|---|
TIL 2023.02.17 Java web 7(miniProject, H2, maven) (0) | 2023.02.17 |
TIL 2023.02.15 Java Web 5 (maven, 어노테이션, mongoDB) (0) | 2023.02.15 |
TIL 2023.02.14 Java Web 5 (SPA, libs, CORS, web.xml, modal) (0) | 2023.02.14 |
TIL 2023.02.13 Java Web 4 (MVC model2, maven) (0) | 2023.02.13 |