'Spring'에 해당되는 글 33건
- 2020.04.22 :: 인텔리제이(IntelliJ) JSP 파일 수정시 서버에 반영되지 않는 문제 4
- 2020.04.22 :: 인텔리제이(IntelliJ) 서버 로그 문자열 깨지는 문제
- 2020.04.21 :: 스프링 부트(Spring Boot) 프로젝트 생성
- 2020.04.20 :: 이클립스(Eclipse) Apache Tomcat 설정
- 2020.04.20 :: Apache Tomcat 한글 깨짐
- 2020.04.19 :: 스프링(Spring) 커넥션풀
- 2020.04.19 :: 스프링(Spring) JdbcTemplate
- 2020.04.19 :: 스프링(Spring) JDBC
- 2020.04.18 :: 스프링(Spring) 리다이렉트(Redirect), 인터셉트(Intercept)
- 2020.04.18 :: 스프링(Spring) 세션(Session), 쿠키(Cookie)
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
인텔리제이(IntelliJ)에서 서버가 실행된 상태로 JSP 파일을 수정 후 웹 브라우저를 새로고침 하면 변경한 결과가 반영되지 않는다. 서버를 껐다 켜야만 변경한 결과가 반영되는데, 아래 그림의 로그에서 알 수 있듯이 war explored라는 자바에서 패키징 되어있는 파일의 형태로 톰캣에 등록되어있기 때문이다. 설정을 변경하여 JSP 변경 결과를 서버에 바로 반영되도록 해보자.
1. 서버를 중지하고, 상단의 Edit Configurations...를 클릭
2. Deployment탭에서 우측의 연필모양 클릭
3. Output directory의 target부터 뒷 부분을 지우고, src\main\webapp로 수정 후 OK 클릭
4. OK 클릭
5. 서버를 실행하고, JSP 내용을 수정 후 새로고침하여 변경한 내역이 바로 반영되는 것 확인
'Spring > Solve' 카테고리의 다른 글
인텔리제이(IntelliJ) 서버 로그 문자열 깨지는 문제 (0) | 2020.04.22 |
---|---|
Apache Tomcat 한글 깨짐 (0) | 2020.04.20 |
스프링(Spring) The specified JRE installation does not exist 에러 (0) | 2020.04.15 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
인텔리제이(IntelliJ)에서 톰캣(Tomcat) 서버를 실행하면 아래 그림과 같이 문자열이 깨져서 보이는 경우가 있다. 간단한 설정을 통해 문자열을 정상적으로 표시할 수 있다.
1. 우측 상단의 Edit Configurations... 클릭
2. VM options에 -Duser.language=en -Duser.region=us를 입력하고 OK 클릭
3. 서버를 다시 실행하여 로그가 정상적으로 표시되는 것 확인
'Spring > Solve' 카테고리의 다른 글
인텔리제이(IntelliJ) JSP 파일 수정시 서버에 반영되지 않는 문제 (4) | 2020.04.22 |
---|---|
Apache Tomcat 한글 깨짐 (0) | 2020.04.20 |
스프링(Spring) The specified JRE installation does not exist 에러 (0) | 2020.04.15 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
스프링 부트(Spring Boot)는 상용화 가능한 제품 수준의 스프링 기반 애플리케션을 만들 때 빠르고, 쉽게 만들 수 있도록 도와준다.
1. Create New Project 클릭
2. 좌측의 Maven 선택 후 Next 클릭
3. Name, GroupId, ArtifactId 입력 후 Finish 클릭
4. pom.xml에 <parent>, <dependency>, <build> 추가
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.moomini</groupId>
<artifactId>spring-boot-getting-started</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
|
cs |
5. src\main\java 디렉토리를 생성하고, 그 안에 패키지 폴더 생성 후 Application.java 생성
6. Application.java에 @SpringBootApplication 어노테이션을 추가하고, 메인메소드에서 run 입력 후 실행
package com.moomini;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
|
cs |
7. localhost:8080에 접속해서 에러페이지가 정상적으로 표시되는 것 확인
'Spring > Study' 카테고리의 다른 글
스프링(Spring) 커넥션풀 (0) | 2020.04.19 |
---|---|
스프링(Spring) JdbcTemplate (0) | 2020.04.19 |
스프링(Spring) JDBC (0) | 2020.04.19 |
스프링(Spring) 리다이렉트(Redirect), 인터셉트(Intercept) (0) | 2020.04.18 |
스프링(Spring) 세션(Session), 쿠키(Cookie) (0) | 2020.04.18 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
1. 이클립스(Eclipse)를 실행하고 하단의 Servers탭에서 No servers are available. Click this link to create a new server... 클릭
2. 설치한 Apache Tomcat의 버전을 선택 후 Finish 클릭
3. Servers탭에서 추가된 Tomcat을 더블클릭
4. Use Tomcat installation, Publish module contexts to separate XML files를 선택하고, 포트번호를 8090으로 변경 후 저장
5. 서버 실행
6. 웹 브라우저에서 localhost:8090을 입력하여 정상적으로 실행이 되는 것 확인
'Spring > Install' 카테고리의 다른 글
이클립스(Eclipse)에 STS(Spring Tool Suite) 설치 (0) | 2020.04.14 |
---|---|
Apache Tomcat 설치 (0) | 2020.04.07 |
Maven 설치 (0) | 2020.04.07 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
터미널에서 Apache Tomcat을 실행하는 경우 아래 그림과 같이 한글이 깨져서 나타나는 경우가 있다.
터미널의 Encoding 문제인데, 터미널 제목 표시줄 마우스 우클릭 - 속성(P)을 클릭하여 확인해보면 현재 코드 페이지가 959로 되어있는 것을 확인할 수 있다. 이 값을 UTF-8인 65001로 변경하여 한글이 깨지는 문제를 해결할 수 있다.
1. Win + R 키를 눌러 실행에서 regedit을 입력하여 레지스트리 편집기 실행
2. HKEY_CURRENT_USER\Console 마우스 우클릭 - 새로 만들기(N) - 키(K) 클릭
3. HKEY_CURRENT_USER\Console에 Tomcat이라는 키 생성
4. 우측 영역에서 마우스 우클릭 - 새로 만들기(N) - DWORD(32비트) 값(D) 클릭
5. 이름을 CodePage로 지정하고, CodePage를 더블클릭하여 단위를 10진수, 값을 65001로 수정
6. 아래 그림과 같이 설정된 것을 확인하고 레지스트리 편집기 종료
7. 터미널에서 Apache Tomcat을 다시 실행하여 한글이 정상적으로 표시되는 것 확인
'Spring > Solve' 카테고리의 다른 글
인텔리제이(IntelliJ) JSP 파일 수정시 서버에 반영되지 않는 문제 (4) | 2020.04.22 |
---|---|
인텔리제이(IntelliJ) 서버 로그 문자열 깨지는 문제 (0) | 2020.04.22 |
스프링(Spring) The specified JRE installation does not exist 에러 (0) | 2020.04.15 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
커텍션풀은 데이터베이스 연결을 미리 준비해놓고 사용하는 것으로, 서버의 부하를 최소화 할 수 있다.
C2p0 모듈의 ComboPooledDataSource
- 예외처리가 반드시 필요
MemberDao.java
@Repository public class MemberDao implements IMemberDao { private String driver = "oracle.jdbc.driver.OracleDriver"; private String url = "jdbc:oracle:thin:@localhost:1521:xe"; private String userid = "scott"; private String userpw = "tiger"; private ComboPooledDataSource dataSource; private JdbcTemplate template; public MemberDao() { dataSource = new ComboPooledDataSource(); try { dataSource.setDriverClass(driver); dataSource.setJdbcUrl(url); dataSource.setUser(userid); dataSource.setPassword(userpw); } catch (PropertyVetoException e) { e.printStackTrace(); } template = new JdbcTemplate(); template.setDataSource(dataSource); } } | cs |
스프링 설정파일을 이용한 DataSource 설정
servlet-context.xml
<beans:bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<beans:property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<beans:property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe" />
<beans:property name="user" value="scott" />
<beans:property name="password" value="tiger" />
<beans:property name="maxPoolSize" value="200" />
<beans:property name="checkoutTimeout" value="60000" />
<beans:property name="maxIdleTime" value="1800" />
<beans:property name="idleConnectionTestPeriod" value="600" />
</beans:bean>
|
cs |
MemberDao.java
@Repository public class MemberDao implements IMemberDao {
private JdbcTemplate template;
@Autowired public MemberDao(ComboPooledDataSource dataSource) { this.template = new JdbcTemplate(dataSource); } } |
'Spring > Study' 카테고리의 다른 글
스프링 부트(Spring Boot) 프로젝트 생성 (0) | 2020.04.21 |
---|---|
스프링(Spring) JdbcTemplate (0) | 2020.04.19 |
스프링(Spring) JDBC (0) | 2020.04.19 |
스프링(Spring) 리다이렉트(Redirect), 인터셉트(Intercept) (0) | 2020.04.18 |
스프링(Spring) 세션(Session), 쿠키(Cookie) (0) | 2020.04.18 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
데이터베이스와 통신을 하기 위해서는 드라이버 로딩, DB 연결, 자원 해제의 작업들을 반복적으로 입력해 주어야 했다. JdbcTemplate은 이러한 작업들을 스프링 프레임워크에서 자동으로 처리하게 하여 JDBC의 단점을 보완하기 위해 사용한다. 데이터베이스 연결과 관련된 정보를 가지고 있는 DataSource는 스프링 또는 c3p0에서 제공하는 클래스를 이용할 수 있다.
pom.xml
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>12.1.0.2</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
|
cs |
MemberDao.java (c3p0 이용)
@Repository public class MemberDao implements IMemberDao { private String driver = "oracle.jdbc.driver.OracleDriver"; private String url = "jdbc:oracle:thin:@localhost:1521:orcl"; private String userid = "moomini"; private String userpw = "1234"; private DriverManagerDataSource dataSource; private JdbcTemplate template; public MemberDao() { dataSource = new DriverManagerDataSource(); dataSource.setDriverClass(driver); dataSource.setJdbcUrl(url); dataSource.setUser(userid); dataSource.setPassword(userpw); template = new JdbcTemplate(); template.setDataSource(dataSource); } @Override public int memberInsert(final Member member) { int result = 0; final String sql = "INSERT INTO member (memId, memPw, memMail) values (?,?,?)"; result = template.update(sql, new PreparedStatementSetter() { @Override public void setValues(PreparedStatement pstmt) throws SQLException { pstmt.setString(1, member.getMemId()); pstmt.setString(2, member.getMemPw()); pstmt.setString(3, member.getMemMail()); } }); return result; } } | cs |
'Spring > Study' 카테고리의 다른 글
스프링 부트(Spring Boot) 프로젝트 생성 (0) | 2020.04.21 |
---|---|
스프링(Spring) 커넥션풀 (0) | 2020.04.19 |
스프링(Spring) JDBC (0) | 2020.04.19 |
스프링(Spring) 리다이렉트(Redirect), 인터셉트(Intercept) (0) | 2020.04.18 |
스프링(Spring) 세션(Session), 쿠키(Cookie) (0) | 2020.04.18 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
JDBC란 Java Database Connectivity의 약자로, 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다.
MemberDao.java
@Repository
public class MemberDao implements IMemberDao {
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String userid = "scott";
private String userpw = "tiger";
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
@Override
public int memberInsert(Member member) {
int result = 0;
try {
// 드라이버 로딩
Class.forName(driver);
// 연결
conn = DriverManager.getConnection(url,userid, userpw);
String sql = "INSERT INTO member (memId, memPw, memMail) values (?,?,?)";
// SQL 쿼리 준비
pstmt = conn.prepareStatement(sql);
// 데이터 바인딩
pstmt.setString(1, member.getMemId());
pstmt.setString(2, member.getMemPw());
pstmt.setString(3, member.getMemMail());
// 쿼리실행 및 결과 처리
result = pstmt.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
// 자원해제
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
}
|
'Spring > Study' 카테고리의 다른 글
스프링(Spring) 커넥션풀 (0) | 2020.04.19 |
---|---|
스프링(Spring) JdbcTemplate (0) | 2020.04.19 |
스프링(Spring) 리다이렉트(Redirect), 인터셉트(Intercept) (0) | 2020.04.18 |
스프링(Spring) 세션(Session), 쿠키(Cookie) (0) | 2020.04.18 |
스프링(Spring) Controller 객체 구현 2 (0) | 2020.04.17 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
리다이렉트(Redirect)
- 리다이렉트(Redirect)는 컨트롤러에서 뷰를 분기하는 방법으로, 현재 페이지에서 특정 페이지로 전환하는 기능이다.
Model
@RequestMapping(value = "/modifyForm")
public String modifyForm(Model model, HttpServletRequest request) {
HttpSession session = request.getSession();
Member member = (Member) session.getAttribute("member");
if(null == member) return "redirect:/";
else model.addAttribute("member", service.memberSearch(member));
return "/member/modifyForm";
}
|
cs |
ModelAndView
@RequestMapping("/removeForm")
public ModelAndView removeForm(HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
HttpSession session = request.getSession();
Member member = (Member) session.getAttribute("member");
if(null == member) {
mav.setViewName("redirect:/");
} else {
mav.addObject("member", member);
mav.setViewName("/member/removeForm");
}
return mav;
}
|
cs |
인터셉트(Intercept)
- 리다이렉트를 사용해야 하는 경우가 많은 경우 HandlerInterceptor를 이용하여 효율적으로 관리할 수 있다.
- preHandle() : Controller 작업 전
- postHandle() : Controller 작업 후
- afterCompletion() : Controller와 View 작업 후
MemberLoginInterceptor.java
public class MemberLoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession(false);
if(session != null) {
Object obj = session.getAttribute("member");
if(obj != null) return true;
}
response.sendRedirect(request.getContextPath() + "/");
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
super.afterCompletion(request, response, handler, ex);
}
}
|
cs |
servlet-context.xml (2개의 방법 모두 사용가능)
<interceptors>
<interceptor>
<mapping path="/member/modifyForm"/>
<mapping path="/member/removeForm"/>
<beans:bean class="com.bs.lec21.member.MemberLoginInterceptor"/>
</interceptor>
</interceptors>
|
cs |
<interceptors>
<interceptor>
<mapping path="/member/**"/>
<exclude-mapping path="/member/joinForm"/>
<exclude-mapping path="/member/join"/>
<exclude-mapping path="/member/loginForm"/>
<exclude-mapping path="/member/login"/>
<exclude-mapping path="/member/logout"/>
<exclude-mapping path="/member/modify"/>
<exclude-mapping path="/member/remove"/>
<beans:bean class="com.bs.lec21.member.MemberLoginInterceptor"/>
</interceptor>
</interceptors>
|
'Spring > Study' 카테고리의 다른 글
스프링(Spring) JdbcTemplate (0) | 2020.04.19 |
---|---|
스프링(Spring) JDBC (0) | 2020.04.19 |
스프링(Spring) 세션(Session), 쿠키(Cookie) (0) | 2020.04.18 |
스프링(Spring) Controller 객체 구현 2 (0) | 2020.04.17 |
스프링(Spring) Controller 객체 구현 1 (0) | 2020.04.17 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
웹 서비스는 HTTP 프로토콜을 기반으로 하는데, HTTP 프로토콜은 클라이언트와 서버의 관계를 유지하지 않는 특징이 있다. 이러한 특징 때문에 서버의 부하를 줄일 수는 있지만, 매번 새로운 연결이 생성되므로 로그인 상태 유지 등의 기능을 구현하기가 어렵다. 따라서 세션(Session)과 쿠키(Cookie)를 이용하여 서버의 연결을 유지시키게 되는데, 세션은 서버에서 연결 정보를 관리하고, 쿠키는 클라이언트에서 연결 정보를 관리한다는 차이점이 있다.
세션(Session)
HttpServletRequest를 이용한 세션 사용
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String memLogin(Member member, HttpServletRequest request) {
Member mem = service.memberSearch(member);
HttpSession session = request.getSession();
session.setAttribute("member", mem);
return "/member/loginOk";
}
|
cs |
HttpSession을 이용한 세션 사용
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String memLogin(Member member, HttpSession session) {
Member mem = service.memberSearch(member);
session.setAttribute("member", mem);
return "/member/loginOk";
}
|
cs |
invalidate() 메소드를 이용한 세션 삭제
@RequestMapping("/logout")
public String memLogout(Member member, HttpSession session) {
session.invalidate();
return "/member/logoutOk";
}
@RequestMapping(value = "/remove", method = RequestMethod.POST)
public String memRemove(Member member, HttpServletRequest request) {
service.memberRemove(member);
HttpSession session = request.getSession();
session.invalidate();
return "/member/removeOk";
}
|
cs |
쿠키(Cookie)
쿠키 생성
- 쿠키 생성 시 파라미터의 첫 번째는 쿠키의 이름, 두 번재는 쿠키의 값이 들어간다.
@RequestMapping("/main")
public String mallMain(Mall mall, HttpServletResponse response){
Cookie genderCookie = new Cookie("gender", mall.getGender());
if(mall.isCookieDel()) {
genderCookie.setMaxAge(0);
mall.setGender(null);
} else {
genderCookie.setMaxAge(60*60*24*30);
}
response.addCookie(genderCookie);
return "/mall/main";
}
|
cs |
쿠키 사용
- @CookieValue로 쿠키를 사용한다. value에 명시한 쿠키가 없을 경우 Exception이 발생하는데, required를 false로 설정해서 해당하는 쿠키가 없어도 Exception이 발생하지 않도록 할 수 있다. (requied의 Default는 true)
@RequestMapping("/index") public String mallIndex(Mall mall, @CookieValue(value="gender", required=false) Cookie genderCookie, HttpServletRequest request) { if(genderCookie != null) mall.setGender(genderCookie.getValue());
return "/mall/index"; }
|
'Spring > Study' 카테고리의 다른 글
스프링(Spring) JDBC (0) | 2020.04.19 |
---|---|
스프링(Spring) 리다이렉트(Redirect), 인터셉트(Intercept) (0) | 2020.04.18 |
스프링(Spring) Controller 객체 구현 2 (0) | 2020.04.17 |
스프링(Spring) Controller 객체 구현 1 (0) | 2020.04.17 |
스프링(Spring) Service & DAO 객체 구현 (0) | 2020.04.16 |