복붙노트

[SPRING] JSP에서의 Spring MVC 요청 URL

SPRING

JSP에서의 Spring MVC 요청 URL

Spring MVC를 사용하여 웹 애플리케이션을 작성 중이다. 콘트롤러 등에 대한 주석을 사용하고 있습니다. (폼 동작, 태그 등) 응용 프로그램의 실제 링크를 제외하고 모든 것이 잘 작동합니다. 현재,이 코드는 분명히 약식입니다.

//In the controller
@RequestMapping(value="/admin/listPeople", method=RequestMethod.GET)

//In the JSP
<a href="/admin/listPeople">Go to People List</a>

"http : // localhost : 8080 / MyApp / admin / listPeople"과 같은 URL을 직접 입력하면 페이지가 올바르게로드됩니다. 그러나 위 링크는 작동하지 않습니다. 응용 프로그램 이름 "MyApp"가 손실됩니다.

거기에 응용 프로그램 이름에 던져 봄을 구성하는 방법이 있다면 아는 사람 있습니까?

스프링 구성 중 어떤 것이 필요한지 알려주십시오. view resolver와 함께 표준 디스패처 서블릿을 사용하고 있습니다.

해결법

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

    1.링크에 컨텍스트 경로를 추가해야합니다.

    링크에 컨텍스트 경로를 추가해야합니다.

    // somewhere on the top of your JSP
    <c:set var="contextPath" value="${pageContext.request.contextPath}"/>
    
    ...
    <a href="${contextPath}/admin/listPeople">Go to People List</a>
    
  2. ==============================

    2.c : url 태그는 컨텍스트 경로를 URL에 추가합니다. 예 :

    c : url 태그는 컨텍스트 경로를 URL에 추가합니다. 예 :

    <c:url value="/admin/listPeople"/>
    

    또는 Spring MVC 애플리케이션에서 가능한 한 상대 URL을 사용하는 것을 선호한다. 따라서 페이지가 / MyApp / index에 있으면 링크를 통해 listPeople 페이지로 연결됩니다.

    URL 계층 구조에서 더 깊이있는 경우에도 작동합니다. ..를 사용하여 레벨을 트래버스 할 수 있습니다. 그래서 / MyApp / admin / people / aPerson의 페이지에서 를 사용하면 목록 페이지로 돌아갑니다.

  3. ==============================

    3.나는베이스 태그를 사용하는 것을 선호한다 :

    나는베이스 태그를 사용하는 것을 선호한다 :

    <base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/" />
    

    그런 다음 모든 링크는 다음과 같을 수 있습니다.

    <a href="admin/listPeople">Go to People List</a>
    
  4. ==============================

    4.난 그냥이 질문에 대한 답변을 찾으려고 노력하고 이것은 첫 번째 Google 결과입니다.

    난 그냥이 질문에 대한 답변을 찾으려고 노력하고 이것은 첫 번째 Google 결과입니다.

    이 작업은 이제 MvcUriComponentsBuilder를 사용하여 수행 할 수 있습니다.

    이것은 4.0 버전의 Spring MVC의 일부이다.

    http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.html

    필요한 메소드는 fromMappingName입니다.

    문서에서 :

    @RequestMapping("/people")
     class PersonController {
    
       @RequestMapping("/{id}")
       public HttpEntity getPerson(@PathVariable String id) { ... }
    
     }
    
    <%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
    
     <a href="${s:mvcUrl('PC#getPerson').arg(0,"123").build()}">Get Person</a>
    
  5. ==============================

    5.보통 "/"의 컨텍스트 루트를 사용하거나 전쟁을 ROOT.war로 배포하도록 tomcat을 구성합니다. 어느 쪽이든 전쟁 이름은 URL의 일부가되지 않습니다.

    보통 "/"의 컨텍스트 루트를 사용하거나 전쟁을 ROOT.war로 배포하도록 tomcat을 구성합니다. 어느 쪽이든 전쟁 이름은 URL의 일부가되지 않습니다.

  6. ==============================

    6.당신은 servletRelativeAction을 사용할 수 있습니다. 나는이 버전이 (현재 4.0.x를 사용하고있다) 어떤 버전을 사용할 수 있는지 잘 모르겠다. 그리고 이것에 대한 많은 문서를 보지 못했지만 스프링 폼을 뒷받침하는 코드를 보면 아마 추측 할 수있다. 패스하는 경로가 "/"로 시작하는지 확인하십시오.

    당신은 servletRelativeAction을 사용할 수 있습니다. 나는이 버전이 (현재 4.0.x를 사용하고있다) 어떤 버전을 사용할 수 있는지 잘 모르겠다. 그리고 이것에 대한 많은 문서를 보지 못했지만 스프링 폼을 뒷받침하는 코드를 보면 아마 추측 할 수있다. 패스하는 경로가 "/"로 시작하는지 확인하십시오.

    예:

    <form:form class="form-horizontal" name="form" servletRelativeAction="/j_spring_security_check"  method="POST">
    

    org.springframework.web.servlet.tags.form.FormTag를 참조하십시오 :

    protected String resolveAction() throws JspException {
        String action = getAction();
        String servletRelativeAction = getServletRelativeAction();
        if (StringUtils.hasText(action)) {
            action = getDisplayString(evaluate(ACTION_ATTRIBUTE, action));
            return processAction(action);
        }
        else if (StringUtils.hasText(servletRelativeAction)) {
            String pathToServlet = getRequestContext().getPathToServlet();
            if (servletRelativeAction.startsWith("/") && !servletRelativeAction.startsWith(getRequestContext().getContextPath())) {
                servletRelativeAction = pathToServlet + servletRelativeAction;
            }
            servletRelativeAction = getDisplayString(evaluate(ACTION_ATTRIBUTE, servletRelativeAction));
            return processAction(servletRelativeAction);
        }
        else {
            String requestUri = getRequestContext().getRequestUri();
            ServletResponse response = this.pageContext.getResponse();
            if (response instanceof HttpServletResponse) {
                requestUri = ((HttpServletResponse) response).encodeURL(requestUri);
                String queryString = getRequestContext().getQueryString();
                if (StringUtils.hasText(queryString)) {
                    requestUri += "?" + HtmlUtils.htmlEscape(queryString);
                }
            }
            if (StringUtils.hasText(requestUri)) {
                return processAction(requestUri);
            }
            else {
                throw new IllegalArgumentException("Attribute 'action' is required. " +
                        "Attempted to resolve against current request URI but request URI was null.");
            }
        }
    }
    
  7. ==============================

    7.몇 년이 지났기 때문에 나는 이것을 찾고있는 다른 사람들을 위해 칩을 넣을 것이라고 생각했습니다. 특수 효과를 사용하고 있는데 다음과 같은 컨트롤러 동작이있는 경우 :

    몇 년이 지났기 때문에 나는 이것을 찾고있는 다른 사람들을 위해 칩을 넣을 것이라고 생각했습니다. 특수 효과를 사용하고 있는데 다음과 같은 컨트롤러 동작이있는 경우 :

    @RequestMapping("/new")   //<--- relative url
    public ModelAndView newConsultant() {
        ModelAndView mv = new ModelAndView("new_consultant");
        try {
            List<Consultant> list = ConsultantDAO.getConsultants();
            mv.addObject("consultants", list);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mv;
    }
    

    .jsp (view)에이 지시어를 추가한다.

    <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
    

    간단히 사용하십시오.

    <spring:url value="/new" var="url" htmlEscape="true"/>
    <a href="${url}">Nuevo consultor</a>
    

    어디에

    값의 값은 컨트롤러 동작에서 @ RequestMapping의 인수와 일치해야하며

    var의 값은 href에 사용하는 변수의 이름입니다.

    HIH

  8. from https://stackoverflow.com/questions/6970115/spring-mvc-request-urls-in-jsp by cc-by-sa and MIT license