'SpringMVC'에 해당되는 글 3건

  1. 2016.03.24 [Intellij] Intellij + SpringMVC + Tomcat
  2. 2013.01.04 SpringMVC + Mybatis + MSSQL 연동 맛보기
  3. 2012.03.09 [기초] Spring MVC 구성해 보기.

[Intellij] Intellij + SpringMVC + Tomcat

ITWeb/개발일반 2016.03.24 17:29

요즘 한참 web 개발을 안하다 보니 까먹고 산다고나 할까요.

그래서 기억을 돕기 위해 기록 합니다.


프로젝트 생성)

Intellij -> File -> New -> Project -> Maven -> maven-archetype-webapp


Spring MVC 추가)

Current Project -> Mouse Right Click -> Add Framework Support -> Spring MVC


Tomcat 연동)

연동 전에 다운로드를 먼저 받아 놓아야 합니다.

Run -> Edit Configures -> + -> Tomcat Server -> local -> Name 등록


실행은 그냥 Run 으로 등록한 Name 실행 하면 됩니다.


여기서 재밌는 사실 하나!

controller 만들고 jsp 만들어서 "Hello World" 변수 넘겨줘서 찍어 보면 동작 하지 않는 문제가 있습니다.

이것은 바로 servlet-api 의 version 문제 인데요.


위와 같이 spring mvc 프로젝트 생성 하시면 web.xml 에 아래와 같이 선언 됩니다.

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>


보이시죠 servlet-api 가 2.3 입니다.

근데 제가 선언한건 2.5 ㅡ.ㅡ;

이럴 경우 화면에 변수 출력이 정상적으로 되지 않고 그냥 ${message} 와 같이 출력이 됩니다.

그래서 아래와 같이 수정했습니다.


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

참 별거 아니지만 모르면 별거가 되는 것이고 알면 별거 아닌게 되고 그렇죠. ^^


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

SpringMVC + Mybatis + MSSQL 연동 맛보기

ITWeb/개발일반 2013.01.04 10:37

Reference

MSSQL JDBC Driver Maven Dependency 설정
  - MSSQL JDBC Driver Download 받기
    http://www.microsoft.com/ko-kr/download/details.aspx?id=11774
 
  - JDK 1.6.x 이상에서는 sqljdbc4.jar 사용 권장
  - JDK 1.6.0 29 버전에서는 excuteQuery 수행 시 hang 걸리는 이슈가 있어 버전 업그레이드 필요 (reference url 참고)
 
  - exe 파일 실행 후 적절한 위치에 압축 해제
  - spring mvc maven project 생성
  - 해당 project 의 java build path 에서 libraries 내 add external jars 로 sqljdbc4.jar 추가
  - maven local repository 에 sqljdbc4.jar 설치
    . command 창에서 실행
    . mvn install:install-file -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar -Dfile=D:\Application\sqljdbc_4.0\sqljdbc_4.0\kor\sqljdbc4.jar
  - pom.xml 에서 local repository 와 dependency 설정 추가
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>sqljdbc4</artifactId>
        <version>4.0</version>
    </dependency>
 
    <repositories>
        <repository>
        <id>local</id>
        <name>local</name>
        <url>file://C:/Users/nhn/.m2/repository</url>
        </repository>
    </repositories>
  - spring mvc project 내 jdbc 관련 설정
    jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
    jdbc.url=jdbc:sqlserver://localhost:1433;DatabaseName=nnote;
    jdbc.username=nnote
    jdbc.password=1111
SpringMVC + Mybatis + MSSQL 템플릿
    - spring-mvc4mybatis-mssql-template (이건 SpringMVC + Mybatis 글에 등록된 예제 참고 하시면 됩니다.)
템플릿 용 Schema DDL
create table xe_documents (
 document_srl bigint IDENTITY(1,1) not null,
 title varchar(256),
 content varchar(256),
 user_id varchar(256),
 nick_name varchar(256),
 email_address varchar(256),
 regdate datetime,
CONSTRAINT pk_xe_documents_srl PRIMARY KEY("document_srl")
);
 
insert into xe_documents(title,content,user_id,nick_name,email_address, regdate)
values('제목', '내용', '사용자아이디', 'henry', 'henry@naver.com', SYSDATETIME() );
 
select *
from xe_documents

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

[기초] Spring MVC 구성해 보기.

ITWeb/개발일반 2012.03.09 14:24
기냥 기초 부터 다시 작성해 보려 한다.

1. Spring MVC 구성해 보기.
2. Spring MVC 에 MyBatis 적용해 보기.
3. Spring MVC 에 Spring Security 적용해 보기. 
4. Spring MVC 에 Hibernate 적용해 보기. 
5. 2+3번 적용해 보기.
6. 3+4번 적용해 보기. 



[준비물]

- SpringSourceTool Suite 에서 Spring Project Template 중 MVC 로 기본 프로젝트 생성.
- 괜히 노가다 한다고 시간 빼지 말자.
- Eclipse 또는 STS
- JDK 1.6
- Maven
- Tomcat 

 

[pom.xml]
- 내가 가지고 있던 sts 버전땜시 spring framework 버전을 수정함. (3.0.6 -> 3.1.0)

<?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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>proto.ncms</groupId>

    <artifactId>board</artifactId>

    <name>board</name>

    <packaging>war</packaging>

    <version>1.0.0-BUILD-SNAPSHOT</version>

    <properties>

        <java-version>1.6</java-version>

        <org.springframework-version>3.1.0.RELEASE</org.springframework-version>

        <org.aspectj-version>1.6.9</org.aspectj-version>

        <org.slf4j-version>1.5.10</org.slf4j-version>

    </properties>

    <dependencies>

        <!-- Spring -->

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-context</artifactId>

            <version>${org.springframework-version}</version>

            <exclusions>

                <!-- Exclude Commons Logging in favor of SLF4j -->

                <exclusion>

                    <groupId>commons-logging</groupId>

                    <artifactId>commons-logging</artifactId>

                 </exclusion>

            </exclusions>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-webmvc</artifactId>

            <version>${org.springframework-version}</version>

        </dependency>


        <!-- AspectJ -->

        <dependency>

            <groupId>org.aspectj</groupId>

            <artifactId>aspectjrt</artifactId>

            <version>${org.aspectj-version}</version>

        </dependency>


        <!-- Logging -->

        <dependency>

            <groupId>org.slf4j</groupId>

            <artifactId>slf4j-api</artifactId>

            <version>${org.slf4j-version}</version>

        </dependency>

        <dependency>

            <groupId>org.slf4j</groupId>

            <artifactId>jcl-over-slf4j</artifactId>

            <version>${org.slf4j-version}</version>

            <scope>runtime</scope>

        </dependency>

        <dependency>

            <groupId>org.slf4j</groupId>

            <artifactId>slf4j-log4j12</artifactId>

            <version>${org.slf4j-version}</version>

            <scope>runtime</scope>

        </dependency>

        <dependency>

            <groupId>log4j</groupId>

            <artifactId>log4j</artifactId>

            <version>1.2.15</version>

            <exclusions>

                <exclusion>

                    <groupId>javax.mail</groupId>

                    <artifactId>mail</artifactId>

                </exclusion>

                <exclusion>

                    <groupId>javax.jms</groupId>

                    <artifactId>jms</artifactId>

                </exclusion>

                <exclusion>

                    <groupId>com.sun.jdmk</groupId>

                    <artifactId>jmxtools</artifactId>

                </exclusion>

                <exclusion>

                    <groupId>com.sun.jmx</groupId>

                    <artifactId>jmxri</artifactId>

                </exclusion>

            </exclusions>

            <scope>runtime</scope>

        </dependency>


        <!-- @Inject -->

        <dependency>

            <groupId>javax.inject</groupId>

            <artifactId>javax.inject</artifactId>

            <version>1</version>

        </dependency>


        <!-- Servlet -->

        <dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>servlet-api</artifactId>

            <version>2.5</version>

            <scope>provided</scope>

        </dependency>

        <dependency>

            <groupId>javax.servlet.jsp</groupId>

            <artifactId>jsp-api</artifactId>

            <version>2.1</version>

            <scope>provided</scope>

        </dependency>

        <dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>jstl</artifactId>

            <version>1.2</version>

        </dependency>


        <!-- Test -->

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.7</version>

            <scope>test</scope>

        </dependency>

    </dependencies>

    <build>

        <plugins>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <configuration>

                    <source>${java-version}</source>

                    <target>${java-version}</target>

                </configuration>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-war-plugin</artifactId>

                <configuration>

                    <warName>abc</warName>

                </configuration>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-dependency-plugin</artifactId>

                <executions>

                    <execution>

                        <id>install</id>

                        <phase>install</phase>

                        <goals>

                            <goal>sources</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-resources-plugin</artifactId>

                <version>2.5</version>

                <configuration>

                    <encoding>UTF-8</encoding>

                </configuration>

            </plugin>

        </plugins>

    </build>

</project>



[기타설정]

WEB-INF/web.xml
WEB-INF/spring/root-context.xml
WEB-INF/spring/appServlet/servlet-context.xml 

일단 다른 애덜이랑 연동할 일이 없으니까 그냥 default 설정으로 놔둬도 된다. 

 

※ 추가 작성할 패키지는 향후 MyBatis 와 연동 하기 위한 구조로 작성함.

proto.board
proto.board.web : Controller
proto.board.service : Biz logic
proto.board.domain : VO
proto.board.dao  : Data Access Object



[Controller 작성]
- 기본 HomeController.java 가 있으니 작성하기 전에 이게 잘 뜨는지 확인

[BoardContentViewController.java]

package proto.board.web;


import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;


import proto.board.service.BoardContentViewService;


@Controller

public class BoardContentViewController {


    private static final Logger logger = LoggerFactory.getLogger(BoardContentViewController.class);


    @Autowired

    private BoardContentViewService boardContentViewService;


    @RequestMapping(value = "/boardContentView", method = RequestMethod.GET)

    public String boardContentView(Locale locale, Model model) {

        logger.info("Welcome home! the client locale is "+ locale.toString());

        logger.info("Autowired :  "+ boardContentViewService.getBoardContentVO());


        model.addAttribute("val", boardContentViewService.getBoardContentVO() );


        return "boardContentView";

    }

}


[boardContentView.jsp]

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ page session="false" %>

<html>

<head>

    <title>BoardContentView</title>

</head>

<body>

<h1>

    BoardContentView

</h1>


<P>  The Request is ${val.content}. </P>

</body>

</html>  



[Domain 작성]

[BoardContentVO.java]

package proto.board.domain;


public class BoardContentVO {

    private int documentSrl;

    private String title;

    private String content;

    private String nickname;

    private String email;

    private String regdate;


    public int getDocumentSrl() {

        return documentSrl;

    }


    public void setDocumentSrl(int documentSrl) {

        this.documentSrl = documentSrl;

    }


    public String getTitle() {

        return title;

    }


    public void setTitle(String title) {

        this.title = title;

    }


    public String getContent() {

        return content;

    }


    public void setContent(String content) {

        this.content = content;

    }


    public String getNickname() {

        return nickname;

    }


    public void setNickname(String nickname) {

        this.nickname = nickname;

    }


    public String getEmail() {

        return email;

    }


    public void setEmail(String email) {

        this.email = email;

    }


    public String getRegdate() {

        return regdate;

    }


    public void setRegdate(String regdate) {

        this.regdate = regdate;

    }

} 



[Service 작성]

[BoardContentViewServiceImpl.java]

package proto.board.service;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;


import proto.board.dao.BoardContentViewDAO;

import proto.board.domain.BoardContentVO;


@Service

public class BoardContentViewServiceImpl implements BoardContentViewService {


    @Autowired

    private BoardContentViewDAO boardContentViewDAO;


    public BoardContentVO getBoardContentVO() {

        return (BoardContentVO)boardContentViewDAO.getBoardContentVO();

    }

}


[BoardContentViewService.java]

package proto.board.service;


import proto.board.domain.BoardContentVO;



public interface BoardContentViewService {

    BoardContentVO getBoardContentVO();

}



[DAO 작성]

[BoardContentViewDAOImpl.java]

package proto.board.dao;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Repository;


import proto.board.domain.BoardContentVO;


@Repository

public class BoardContentViewDAOImpl implements BoardContentViewDAO {


    private BoardContentVO boardContentVO = new BoardContentVO();


    public BoardContentVO getBoardContentVO() {

        boardContentVO.setContent("CONTENT");


        return boardContentVO;

    }

}


[BoardContentViewDAO.java] 

package proto.board.dao;


import proto.board.domain.BoardContentVO;


public interface BoardContentViewDAO {

    BoardContentVO getBoardContentVO();

} 



※ 자 그럼 build 를 하고 실행을 하봅시다.
[Eclipse Console 로그확인]
- 아래 로그는 실제 servlet-context.xml 에서 component-scan 일 잘 되었는지 확인하기 위함 이다.
- 이게 정상적으로 나오지 않을 경우는 "not found url mapping" 어쩌구 에러가 발생 합니다.

INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String proto.board.HomeController.home(java.util.Locale,org.springframework.ui.Model)

INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/boardContentView],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String proto.board.web.BoardContentViewController.boardContentView(java.util.Locale,org.springframework.ui.Model)



[Tomcat 실행결과]



신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

티스토리 툴바