복붙노트

[SPRING] Spring MVC : 양식을 게시 할 때 추가되는 URL 경로

SPRING

Spring MVC : 양식을 게시 할 때 추가되는 URL 경로

나는 봄 mvc에 새로운 있습니다. 간단한 로그인 응용 프로그램을 만들었습니다. 하지만 내 경우에는 url을 게시하고 컨트롤러 메서드를 올바르게 호출하기위한 첫 번째 작업을 수행했습니다. 두 번째로 컨트롤러를 한 번 더 추가하면됩니다. 처음 게시물 :  // localhost : 8090 / springmvc / account / login 같은 페이지의 시간 : // localhost : 8090 / springmvc / account / account / login. 이 리디렉션 문제를 어떻게 수정합니까?

이 내 컨트롤러 페이지 :

@Controller
@RequestMapping("account")
public class AccountController {
    AccountService service = new AccountService();
    @RequestMapping(value = "account/default", method = RequestMethod.GET)
    public ModelAndView RegisterUser() {
        return new ModelAndView("/Account/Index","command",new User());
    }

    @RequestMapping(value = "/registeruser", method = RequestMethod.POST)
    public ModelAndView RegisterUser(User user) {
        user.setMessage(service.Register(user));
        return new ModelAndView("/Account/Index", "command", user);
    }

    @RequestMapping(value = "/register", method = RequestMethod.POST)
    public ModelAndView RegisterUer(User user) {
        user.setMessage(service.Register(user));
        return new ModelAndView("/Account/create", "command", user);
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public ModelAndView LoginUser(User user, ModelMap model) {
        String msg = service.isAuthendicated(user) ? "Logged in" : "Failed";
        user.setMessage(msg);
        return new ModelAndView("/Account/Index", "command", user);
    }
}

이 내 JSP 페이지 :

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags"%>

<t:genericpage>
    <jsp:body>
       <h2>Login</h2>
       <div>
            ${command.message} </div>
      <a href="account/register">Register</a>
    <form:form action="account/login" method="post">
        <div>
                <form:input path="username" />
            </div>
        <div>
                <form:input path="password" />
            </div>
        <input type="submit" value="Login">
    </form:form>
    </jsp:body>
</t:genericpage>

공통 페이지에 태그 라이브러리를 사용했습니다.

<%@tag description="Master Page" pageEncoding="UTF-8"%>
<html>
<body>
    <div id="pageheader">
        <h2>WElcome</h2>
    </div>
    <div id="body">
        <jsp:doBody />
    </div>
    <div id="pagefooter">
        <p id="copyright">Copyright</p>
    </div>
</body>
</html>

해결법

  1. ==============================

    1.사용중인 Spring의 버전에 따라 다음과 같은 옵션이 있습니다.

    사용중인 Spring의 버전에 따라 다음과 같은 옵션이 있습니다.

    스프링 3.1 이하 또는 스프링 3.2.3 이상

    컨텍스트 경로와 관련된 루트 - 관련 url / actions가 있어야합니다.

    <form:form action="${pageContext.request.contextPath}/account/login" method="post">
    

    참고 : Spring 3.2.3에서는 servletRelativeAction이 도입되었지만 사용한 적이 없습니다.

    봄 3.2

    아무 것도하지 말고, 컨텍스트 경로가 미리 추가됩니다. 실제로 이것은 급격한 변화 였고 결국 다시 롤백되었습니다.

    <form:form action="/account/login" method="post"> 
    //will produce action="/springmvc/account/login"
    
  2. ==============================

    2./로 양식 작업을 시작하십시오.

    /로 양식 작업을 시작하십시오.

    <form:form action="/account/login" method="post">
    

    그렇게하지 않으면 검색 주소창의 기존 URL에 작업을 추가하라는 메시지가 브라우저에 표시됩니다.

    그리고 HTML과 같은 링크를 Spring의 form : form을 사용하지 않는 곳에서 직접 사용하는 경우 c : url을 사용하여 컨텍스트 경로 등을 포함하는 URL을 올바르게 구성하십시오. 적절한 상대 URL을 구축하는 데는 많은 어려움이 있습니다.

    <a href="<c:url value="/account/register" />">Register</a>
    
  3. ==============================

    3.../를 사용하여 현재 컨텍스트 루트 URL 가져 오기 :

    ../를 사용하여 현재 컨텍스트 루트 URL 가져 오기 :

    <form:form action="../account/login" method="post"> 
    

    여기에서

  4. from https://stackoverflow.com/questions/18631147/spring-mvc-url-path-appending-when-posting-the-form by cc-by-sa and MIT license