본문 바로가기

자바 웹/스프링

메이븐과 STS

728x90

 

 

 

 

메이븐 다운받고 환경변수 설정

 

XML파일 설정하기

 

레거시 프로젝트의 pom.xml : 프로젝트 정보가 표시되고, 스프링에서 사용되는 여러 라이브러리를 설정해 다운로드

 

 

레거시 프로젝트를 생성하면 위와 같은 XML 파일들이 자동으로 생성된다.

 

web.xml

  • 다른 설정 파일을 읽어들이는 부분과 디스패쳐서블릿을 매핑하는 부분이 자동으로 만들어짐
<?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 https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<!-- 스프링 실행시 servlet-context.xml의 설정 정보를 읽어들임 -->
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

</web-app>

 

servlet-context.xml

  • JSP의 위치를 지정하는 뷰리졸버와 JSP에서 사용하는 자바스크립트 파일 또는 이미지 같은 리소스 경로, 애너테이션 설등 등이 프로젝트 생성 시 자동으로 만들어진다.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<!-- JSP에서 사용될 자바스크립트나 이미지 파일 경로를 저장 -->
	<resources mapping="/resources/**" location="/resources/" />

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<!-- 뷰리졸버 빈을 생성하면서 응답할 JSP의 경로를 지정 -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
	<!-- 패키지와 애너테이션을 지정 -->
	<context:component-scan base-package="com.myspring.pro27" />
	
</beans:beans>

 

STS 환경에서 마이바티스 사용


pom.xml 사용해서 마이바티스 라이브러리 설치

 

오라클은 MySql과는 다르게 오픈 소스가 아니기 때문에 드라이버를 직접 다운로드해서 설치해야 한다. 따라서 WEB-INF에 lib 폴더를 만들어 오라클 드라이버(ojdbc6.jar 같은거)를 붙여넣는다.

 

그리고 pom.xml의 <dependencies>태그 안에 아래의 내용을 넣어줌

 

		<dependency>
			<groupId>commons-beanutils</groupId>
			<artifactId>commons-beanutils</artifactId>
			<version>1.8.0</version>
		</dependency>
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.2.2</version>
		</dependency>
		<dependency>
			<groupId>cglib</groupId>
			<artifactId>cglib-nodep</artifactId>
			<version>2.2</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.1.0</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.29</version>
		</dependency>
		<dependency>
			<groupId>jdbc.oracle</groupId>
			<artifactId>OracleDriver</artifactId>
			<version>12.1.0.2.0</version>
			<scope>system</scope>
			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ojdbc6.jar</systemPath>
		</dependency>

		<!-- 타일즈 관련 라이브러리 -->
		<dependency>
			<groupId>org.apache.tiles</groupId>
			<artifactId>tiles-core</artifactId>
			<version>2.2.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.tiles</groupId>
			<artifactId>tiles-jsp</artifactId>
			<version>2.2.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.tiles</groupId>
			<artifactId>tiles-servlet</artifactId>
			<version>2.2.2</version>
			</dependency>
			
		<!-- AOP -->
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-aop</artifactId>
		  <version>${org.springframework-version}</version>
	  </dependency>

	<!-- AspectJ -->
	<dependency>
	    <groupId>org.aspectj</groupId>
	    <artifactId>aspectjrt</artifactId>
	    <version>${org.aspectj-version}</version>
	</dependency>
 
	<dependency>
	    <groupId>org.aspectj</groupId>
	    <artifactId>aspectjweaver</artifactId>
	    <version>${org.aspectj-version}</version>
	</dependency>
	 
	<dependency>
	    <groupId>org.aspectj</groupId>
	    <artifactId>aspectjtools</artifactId>
	    <version>${org.aspectj-version}</version>
	</dependency>

 

데이터베이스 기능 관련 라이브러리, 마이바티스 관련 라이브러리, MySql과 오라클 드라이버 등을 설정

 

마이바티스 관련 XML 파일 추가

 

 

위와 같이 action-mybatis.xml 파일과 jdbc.properties 파일을 만들어준다. 내용은 이전에 사용했던걸 그대로 사용

 

 

그리고 web.xml에서 위와 같이 action-mybatis.xml 파일을 읽어들이도록 수정

 

 

action-mybatis.xml에서는 jdbc.properties의 경로 수정

 

 

그리고 위와 같이 매퍼 설정

 

 

modelConfig.xml에서는 위와 같이 설정

 

그리고 나머지 자바클래스와 JSP를 앞서 했던 파일들을 가져와서 실행하면 똑같은 결과를 얻을 수 있다.

 

 

컨트롤러의 getViewName()메서드만 위의 부분처럼 수정하면 된다.

 

log4j


실제 애플리케이션에서는 유지관리를 위해 접속한 사용자 정보나 각 클래스의 메서드 호출 시각 등 여러 정보들을 파일로 저장해서 관리한다. 이런 로그 관련 기능을 제공하는 것이 log4j이다.

 

log4j 기능은 독립적으로 라이브러리를 설치해서 사용할 수 있으며, 메이븐 같은 빌드 툴에서는 프로젝트 생성 시 자동으로 log4j  라이브러리가 설치된다.

 

log4j 기능 관련 설정은 log4j.xml 파일에서 수행한다. 

 

log4j.xml을 이루는 태그들의 특징

태그 설명
<Appender> - 로그의 출력 위치를 결정(파일, 콘솔, DB 등)
- API 문서의 xxxAppender로 끝나는 클래스들의 이름을 보면 출력 위치를 알 수 있음
<Layout> Appender를 어떤 형식으로 출력할지 출력 레이아웃을 결정
<Logger> - 로깅 메세지를 Appender에 전달, 개발자가 로그 레벨을 이용해 로그 출력 여부 조정
- logger는 로그 레벨을 가지고 있으며, 로그의 출력 여부는 로그문의 레벨과 록의 레벨을 가지고 결정

 

로그레벨

 

낮은 레벨로 코드의 메시지를 설정했다면 그 레벨보다 높게 설정한 메시지들은 모두 출력된다.

 

log4j.xml 사용해서 로그 메시지 출력(마이바티스 SQL문도 로그로 출력)

log4j.xml에서 <root> 태그는 애플리케이션 전체에 적용되는 로그 레벨을 설정하며, 이 태그의 하위 <priority> 태그의 value 속성 값을 debug로 변경한 후 다시 회원 조회를 요청하면 요청 시 실행되는 SQL문 관련 정보를 로그로 출력할 수 있다.

 

@Controller("memberController")
public class MemberController {
	
	//LoggerFactory 클래스를 이용해 Logger 클래스 객체를 가져옴
	private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
	
	@Autowired
	private MemberService memberService;
	@Autowired
	private MemberVO memberVO;
	
	@RequestMapping(value = "/member/listMembers.do", method = RequestMethod.GET)
	public ModelAndView listMembers(HttpServletRequest request, HttpServletResponse response) throws Exception{
		
		String viewName = getViewName(request);
		
		logger.info("info 레벨 : viewName = "+ viewName);//로그 레벨 info
		logger.debug("debug 레벨 : viewName = "+ viewName);//로그 레벨 debug
		
		List membersList = memberService.listMembers();
		ModelAndView mav = new ModelAndView(viewName);
		mav.addObject("membersList", membersList);
		
		return mav;
	}
    
    ...
}

 

먼저 위와 같이 로그를 출력하도록 정하고 실행하면 아래와 같은 결과가 출력된다.

 

 

DEBUG레벨보다 높은 INFO레벨의 로그만 출력된 것을 확인할 수 있다.

 

 

그리고 마이바티스 SQL문의 결과도 확인할 수 있다.

 

 

폴더도 자동으로 생성돼서 로그가 기록된다.

 

타일즈


일반적으로 JSP는 모든 화면 기능을 일일이 구현하는 것이 아니라 전체 화면 틀을 일정하게 만들어 놓고 본문 부분만 변경해서 사용한다.

 

일반적인 웹 애플리케이션 구조는 상단 부분이나 왼쪽 메뉴 그리고 하단 부분을 담당하는 페이지를 따로 만들어 놓고 브라우저에서 웹 페이지를 요청하면 본문 화면만 추가하여 보여준다.

 

이런 화면 레이아웃 기능을 제공하는 것이 타일즈다.

 

타일즈도 pom.xml을 통해서 설치해 사용할 수 있는데, 위에서 이미 설치했다.

 

	<!-- 타일즈 실습 설정 -->
 	<!-- 스프링의 TilesConfigurer클래스를 이용해 tilesConfigurer빈을 생성 -->
    <beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
		<beans:property name="definitions">
			<!-- 패키지 tiles의 모든 설정 XML파일을 읽어 들인다. -->
			<beans:list>
				<beans:value>classpath:tiles/*.xml</beans:value>
			</beans:list>
		</beans:property>
		<beans:property name="preparerFactoryClass"
			          value="org.springframework.web.servlet.view.tiles2.SpringBeanPreparerFactory" />
	</beans:bean>
	<!-- 타일즈 뷰리졸버를 사용해 화면을 표시 -->
	<beans:bean id="viewResolver"
		class="org.springframework.web.servlet.view.UrlBasedViewResolver">
		<beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
	</beans:bean>

 

servlet-context.xml 파일에 위와 같이 타일즈 관련 빈을 생성하고, 원래 있떤 JSP 뷰리졸버를 주석처리한다.

 

JSP에 타일즈 사용


  1. tile.xml 작성
  2. 레이아웃용 JSP 작성
  3. 레이아웃에 표시할 JSP 작성
  4. 컨트롤러에서 tiles.xml에 설정한 뷰 이름 반환

위의 순서대로 JSP에 타일즈 기능을 적용한다.

 

tiles_member.xml

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
		<!-- 공통 레이아웃의 뷰이름을 지정 --> <!-- 전체 레이아웃을 정하는 JSP의 위치를 지정 -->
   <definition name="baseLayout"  template="/WEB-INF/views/common/layout.jsp">
      <put-attribute name="title" value="" />
      <put-attribute name="header" value="/WEB-INF/views/common/header.jsp" /><!-- 헤더 위치 지정 -->
      <put-attribute name="side" value="/WEB-INF/views/common/side.jsp" /><!-- 사이드 메뉴 위치 지정 -->
      <put-attribute name="body" value="" />
      <put-attribute name="footer" value="/WEB-INF/views/common/footer.jsp" /><!-- 푸터 위치 지정 -->
   </definition>

	<!-- 메인 화면의 뷰이름 지정 --> <!-- 기본적인 레이아웃은 baseLayout을 상속받음 -->
   <definition name="main" extends="baseLayout">
      <put-attribute name="title" value="메인페이지" /><!-- 레이아웃의 제목에 표시할 구문 지정 -->
      <put-attribute name="body" value="/WEB-INF/views/main.jsp" /><!-- 레이아웃 본문에 표시할 JSP 지정 -->
   </definition>

		<!-- 컨트롤러에서 반환되는 뷰이름 지정 --> <!-- 기본 레이아웃 상속 -->
   <definition name="/member/listMembers" extends="baseLayout">
      <put-attribute name="title" value="회원목록창" />
      <put-attribute name="body" value="/WEB-INF/views/member/listMembers.jsp" /><!-- 레이아웃 본문에 표시할 JSP 지정 -->
   </definition>
   

    
   <definition name="/member/loginForm" extends="baseLayout">
      <put-attribute name="title" value="로그인창" />
      <put-attribute name="body" value="/WEB-INF/views/member/loginForm.jsp" />
   </definition>
</tiles-definitions>

 

레이아웃에 사용되는 JSP

layout.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"  isELIgnored="false"
 %>
 <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <style>
      #container {
        width: 100%;
        margin: 0px auto;
          text-align:center;
        border: 0px solid #bcbcbc;
      }
      #header {
        padding: 5px;
        margin-bottom: 5px;
        border: 0px solid #bcbcbc;
         background-color: lightgreen;
      }
      #sidebar-left {
        width: 15%;
        height:700px;
        padding: 5px;
        margin-right: 5px;
        margin-bottom: 5px;
        float: left;
         background-color: yellow;
        border: 0px solid #bcbcbc;
        font-size:10px;
      }
      #content {
        width: 75%;
        padding: 5px;
        margin-right: 5px;
        float: left;
        border: 0px solid #bcbcbc;
      }
      #footer {
        clear: both;
        padding: 5px;
        border: 0px solid #bcbcbc;
         background-color: lightblue;
      }
      
    </style>
    <!-- tilies_member.xml의 <definition>의 하위 태그인 <put-attribute> 태그의 name이 title인 value을 표시 -->
    <title><tiles:insertAttribute name="title" /></title>
  </head>
    <body>
    <div id="container">
      <div id="header">
      	 <!-- tilies_member.xml의 <definition>의 하위 태그인 <put-attribute> 태그의 name이 header인 value을 표시 -->
         <tiles:insertAttribute name="header"/>
      </div>
      <div id="sidebar-left">
          <tiles:insertAttribute name="side"/> 
      </div>
      <div id="content">
          <tiles:insertAttribute name="body"/>
      </div>
      <div id="footer">
          <tiles:insertAttribute name="footer"/>
      </div>
    </div>
  </body>
</html>

 

header.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
  request.setCharacterEncoding("UTF-8");
%> 
<c:set var="contextPath"  value="${pageContext.request.contextPath}"  />

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
<title>헤더</title>
</head>
<body>
<table border=0  width="100%">
  <tr>
     <td>
		<a href="${contextPath}/main.do">
			<img src="${contextPath}/resources/image/gorani3.jpg" width="150" height="150" />
		</a>
     </td>
     <td>
       <h1><font size=30>스프링실습 홈페이지!!</font></h1>
     </td>
     
     <td>
     	<!-- isLogOn값이 true이면 로그아웃이 표시되도록 -->
        <c:choose>
          <c:when test="${isLogOn == true  && member!= null}">
            <h3>환영합니다. ${member.name }님!</h3>
            <a href="${contextPath}/member/logout.do"><h3>로그아웃</h3></a>
          </c:when>
          <c:otherwise>
	        <a href="${contextPath}/member/loginForm.do"><h3>로그인</h3></a>
	      </c:otherwise>
	   	</c:choose>  
     </td>
  </tr>
</table>
</body>
</html>

 

footer.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"   isELIgnored="false"
 %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>하단 부분</title>
  <style>
    p {
     font-size:20px;
      text-align:center;
    }
  </style>
</head>
<body>
<p> e-mail:admin@test.com</p> 
<p> 회사주소:서울시 강동구</p>
<p>찾아오는 길:<a href="#">약도</a></p>
</body>
</html>

 

side.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
  request.setCharacterEncoding("UTF-8");
%> 
<c:set var="contextPath"  value="${pageContext.request.contextPath}"  />
<!DOCTYPE html>

<html>
<head>
 <style>
   .no-underline{
      text-decoration:none;
   }
 </style>
  <meta charset="UTF-8">
  <title>사이드 메뉴</title>
</head>
<body>
	<h1>사이드 메뉴</h1>
	<h1>
		<a href="#"  class="no-underline">회원관리</a><br>
	    <a href="#"  class="no-underline">게시판관리</a><br>
	    <a href="#"  class="no-underline">상품관리</a><br>
    </h1>
</body>
</html>

 

MemberController

 

@Controller("memberController")
public class MemberController {
	
	//LoggerFactory 클래스를 이용해 Logger 클래스 객체를 가져옴
	private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
	
	@Autowired
	private MemberService memberService;
	@Autowired
	private MemberVO memberVO;
	
	@RequestMapping(value = "/member/listMembers.do", method = RequestMethod.GET)
	public ModelAndView listMembers(HttpServletRequest request, HttpServletResponse response) throws Exception{
		
		String viewName = getViewName(request);
		
		logger.info("info 레벨 : viewName = "+ viewName);//로그 레벨 info
		logger.debug("debug 레벨 : viewName = "+ viewName);//로그 레벨 debug
		
		List membersList = memberService.listMembers();
		ModelAndView mav = new ModelAndView(viewName);
		mav.addObject("membersList", membersList);
		
		return mav;
	}
	
	//회원 가입창에서 전송된 회원 정보를 바로 MemberVO 객체에 설정하고, 이를 SQL문으로 전달해 회원 등록
	@RequestMapping(value = "/member/addMember.do", method = RequestMethod.POST)
	public ModelAndView addMember(@ModelAttribute("member") MemberVO memberVO, HttpServletRequest request, HttpServletResponse response) throws Exception{
		
		request.setCharacterEncoding("utf-8");
		memberService.addMember(memberVO);
		ModelAndView mav = new ModelAndView("redirect:/member/listMembers.do");
		
		return mav;
	}
	
	//전송된 id에 해당하는 회원 삭제
	@RequestMapping(value = "/member/removeMember.do", method = RequestMethod.GET)
	public ModelAndView removeMember(@RequestParam("id") String id, HttpServletRequest request, HttpServletResponse response) throws Exception{
		
		request.setCharacterEncoding("utf-8");
		memberService.removeMember(id);
		ModelAndView mav = new ModelAndView("redirect:/member/listMembers.do");
		
		return mav;
	}
	
	@RequestMapping(value = "member/login.do", method = RequestMethod.POST)
	public ModelAndView login(@ModelAttribute("member") MemberVO memberVO, 
								RedirectAttributes rAttr,//로그인 실패시 다시 로그인창으로 리다이렉트하여 실패 메시지 전달
								HttpServletRequest request, HttpServletResponse response) throws Exception{
		ModelAndView mav = new ModelAndView();
		memberVO = memberService.login(memberVO);
		
		if (memberVO != null) {
			HttpSession session = request.getSession();
			session.setAttribute("member", memberVO);//세션에 회원정보 저장
			session.setAttribute("isLogOn", true);//세션에 로그인 상태를 true로 설정
			mav.setViewName("redirect:/member/listMembers.do");
		} else {
			rAttr.addAttribute("result", "loginFailed");//로그인 실패시 실패 메시지 로그인 창으로 전달
			mav.setViewName("redirect:/member/loginForm.do");
		}
		return mav;
	}
	
	@RequestMapping(value = "member/logout.do", method = RequestMethod.GET)
	public ModelAndView logout(HttpServletRequest request, HttpServletResponse response) throws Exception{
		HttpSession session = request.getSession();
		//로그아웃 시 세션에 저장된 로그인 정보와 회원 정보 삭제
		session.removeAttribute("member");
		session.removeAttribute("isLogOn");
		
		ModelAndView mav = new ModelAndView();
		mav.setViewName("redirect:/member/listMembers.do");
		return mav;
	}
	
	//요청명이 Form.do로 끝나면 form() 메서드를 호출
	@RequestMapping(value = "/member/*Form.do", method = RequestMethod.GET)
	public ModelAndView form(@RequestParam(value = "result", required = false)String result,
							HttpServletRequest request, HttpServletResponse response) throws Exception{
		
		request.setCharacterEncoding("utf-8");
		String viewName = getViewName(request);
		ModelAndView mav = new ModelAndView();
		mav.addObject("result", result);
		mav.setViewName(viewName);
		
		return mav;
	}
	
	private String getViewName(HttpServletRequest request) throws Exception {
		String contextPath = request.getContextPath();
		String uri = (String) request.getAttribute("javax.servlet.include.request_uri");
		if (uri == null || uri.trim().equals("")) {
			uri = request.getRequestURI();
		}

		int begin = 0;
		if (!((contextPath == null) || ("".equals(contextPath)))) {
			begin = contextPath.length();
		}

		int end;
		if (uri.indexOf(";") != -1) {
			end = uri.indexOf(";");
		} else if (uri.indexOf("?") != -1) {
			end = uri.indexOf("?");
		} else {
			end = uri.length();
		}

		String viewName = uri.substring(begin, end);
		if (viewName.indexOf(".") != -1) {
			viewName = viewName.substring(0, viewName.lastIndexOf("."));
		}
		if (viewName.lastIndexOf("/") != -1) {
			// /member/listMembers.do로 요청하면 member/listMembers를 파일 이름으로 가져옴
			viewName = viewName.substring(viewName.lastIndexOf("/",1), viewName.length());
		}
		return viewName;
	}
}

 

컨트롤러에서 위와 같이 요청 처리

728x90

'자바 웹 > 스프링' 카테고리의 다른 글

썸네일 이미지 사용  (0) 2022.07.04
다중 파일 업로드  (0) 2022.07.04
스프링 애너테이션 기능  (0) 2022.07.01
스프링 트랜잭션  (0) 2022.07.01
마이바티스  (0) 2022.06.30