programing

Spring MVC: 인덱스 페이지의 기본 컨트롤러를 만드는 방법은 무엇입니까?

abcjava 2023. 8. 29. 20:06
반응형

Spring MVC: 인덱스 페이지의 기본 컨트롤러를 만드는 방법은 무엇입니까?

표준 Spring mvchello 월드 애플리케이션 중 하나를 수행하려고 하지만 컨트롤러를 루트에 매핑하고 싶습니다(예: http://numberformat.wordpress.com/2009/09/02/hello-world-spring-mvc-with-annotations/ ). 유일한 차이점은 host\appname\something에 매핑하고 host\appname에 매핑한다는 것입니다.

src\main\webapp\jsp에 index.jsp를 배치하고 web.xml에 시작 파일로 매핑했습니다.노력했습니다.

@Controller("loginController")
public class LoginController{

  @RequestMapping("/")
  public String homepage2(ModelMap model, HttpServletRequest request, HttpServletResponse response){
    System.out.println("blablabla2");
    model.addAttribute("sigh", "lesigh");
    return "index";
  }

내 컨트롤러로 사용되지만 Tomcat의 콘솔에는 아무것도 표시되지 않습니다.내가 어디서 망쳤는지 아는 사람?

My web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
    version="2.5">

    <!-- Index -->
    <welcome-file-list>
        <welcome-file>/jsp/index.jsp</welcome-file>
    </welcome-file-list>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
    </context-param>

    <servlet>
        <servlet-name>springweb</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springweb</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

mvc-dispatcher-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:annotation-config />
    <context:component-scan base-package="de.claude.test.*" />

    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

Spring 3.0.5.release를 사용하고 있습니다.

아니면 이것이 불가능하며 index.jsp를 웹인의 루트에 다시 넣고 컨트롤러가 이를 선택하도록 jsp 내부 어딘가로 리디렉션해야 합니까?

저도 신휴의 설정을 따르고도 같은 문제가 있었지만 해결했습니다.

문제는 WebContent 디렉토리에 index.jsp 파일이 있을 때 어떤 것(Tomcat?)이 "/"에서 "/index.jsp"로 전달된다는 것이었습니다.제가 그것을 제거했을 때, 요청이 더 이상 전달되지 않았습니다.

문제를 진단하기 위해 제가 한 일은 catch-all 요청 핸들러를 만들고 콘솔에 대한 서블릿 경로를 인쇄하는 것이었습니다.이를 통해 요청한 이 http://localhost/myapp/임에도 불구하고 서블릿 경로가 "/index.html"로 변경되고 있음을 알 수 있었습니다."/"일 것으로 예상했습니다.

@RequestMapping("*")
public String hello(HttpServletRequest request) {
    System.out.println(request.getServletPath());
    return "hello";
}

따라서 요약하면 다음과 같은 단계를 따라야 합니다.

  1. 서블릿 매핑 사용 시<url-pattern>/</url-pattern>
  2. 컨트롤러에서 사용하는 경우RequestMapping("/")
  3. web.xml의 welcome-file-list 제거
  4. 기본 페이지로 간주되는 파일(index.html, index.jsp, default.html 등)이 WebContent에 없습니다.

이게 도움이 되길 바랍니다.

리디렉션은 한 가지 옵션입니다.한 가지 시도할 수 있는 것은 WAR의 루트에 배치하는 매우 간단한 인덱스 페이지를 만드는 것입니다. 이 페이지는 다음과 같이 컨트롤러로 리디렉션됩니다.

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

그런 다음 해당 URL로 컨트롤러를 매핑합니다.

@Controller("loginController")
@RequestMapping(value = "/welcome.html")
public class LoginController{
...
}

마지막으로 web.xml에서 (새) 인덱스 JSP에 액세스하려면 다음과 같이 선언합니다.

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

기본 보기에 대한 컨트롤러 메소드를 간단히 매핑할 수 있습니다.예를 들어 기본 페이지로 index.html이 있습니다.

@RequestMapping(value = "/", method = GET)
public String index() {
    return "index";
}

완료되면 기본 응용프로그램 컨텍스트가 있는 페이지에 액세스할 수 있습니다.

E.g http://localhost:8080/myapp

저에게는 효과가 있지만, 몇 가지 차이점이 있습니다.

  • web.xml에 web.xml에 welcome-file-list가 없습니다.
  • 클래스 레벨에는 @RequestMapping이 없습니다.
  • 그리고 메소드 레벨에서는 @RequestMapping("/")만 사용합니다.

이것들이 큰 차이가 없다는 것은 알지만 (지금은 회사에 있지 않습니다) 이것이 제 구성이며 Spring MVC 3.0.5와 함께 작동합니다.

한가지 더요.web.xml에 디스패처 구성이 표시되지 않지만 접두사가 있을 수 있습니다.다음과 같은 것이어야 합니다.

<servlet-mapping>
    <servlet-name>myServletName</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

이 경우가 아닌 경우 url-rewrite 필터가 필요하거나 리디렉션 솔루션을 사용해 보십시오.

편집: 질문에 대한 답변으로, 내 뷰 리졸바 구성도 약간 다릅니다.

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/view/" />
    <property name="suffix" value=".jsp" />
</bean>

web.xml에서 보다 간단한 방법으로 해결할 수 있습니다.

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.htm</welcome-file>
</welcome-file-list>

그런 다음 @RequestMapping("index.htm")을 사용하여 index.htm을 처리할 컨트롤러를 사용합니다.또는 인덱스 컨트롤러를 사용합니다.

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="index.htm">indexController</prop>
        </props>
    </property>
<bean name="indexController" class="org.springframework.web.servlet.mvc.ParameterizableViewController"
      p:viewName="index" />
</bean>

스프링 xml 파일에 항목을 하나만 더 넣으면 됩니다.mvc-dispatcher-servlet.xml

<mvc:view-controller path="/" view-name="index"/>

한 후 파일을 사용자 합니다. 정의 JSP 폴더에는 xml 파일이 .mvc-dispatcher-servlet.xmljava.

index당신의 jsp 이름으로.

이를하는 한 은 시작 을 이를달는방시파의컨요러것경다입의 입니다.web.xml파일 이름:

[web.xml]

<web-app ...

<!-- Index -->
<welcome-file-list>
    <welcome-file>home</welcome-file>
</welcome-file-list>

</web-app>

[LoginController.java]

@Controller("loginController")
public class LoginController{

@RequestMapping("/home")
public String homepage2(ModelMap model, HttpServletRequest request, HttpServletResponse response){
    System.out.println("blablabla2");
    model.addAttribute("sigh", "lesigh");
    return "index";
}

SpringMVC를 입니다.DefaultController: - 음과같은클래스: -

@Controller
public class DefaultController {

    private final String redirect;

    public DefaultController(String redirect) {
        this.redirect = redirect;
    }

    @RequestMapping(value = "/")
    public ModelAndView redirectToMainPage() {
        return new ModelAndView("redirect:/" + redirect);
    }

}

리다이렉트는 다음 스프링 구성을 사용하여 에 주입할 수 있습니다.

<bean class="com.adoreboard.farfisa.controller.DefaultController">
    <constructor-arg name="redirect" value="${default.redirect:loginController}"/>
</bean>

${default.redirect:loginController}은 다으로기설로 설정됩니다.loginController그러나 삽입하면 변경할 수 있습니다.default.redirect=something_else스프링 속성 파일로 / 환경 변수 설정 등.

@Mike가 위에서 언급했듯이 나는 또한 다음과 같습니다.

  • 을 .<welcome-file-list> ... </welcome-file-list>web.xmljava.
  • 페이지로 index.html,index.jsp,default.html계속)

이 솔루션을 통해 Spring은 사용자가 좋아하는 방향 전환에 대해 더 많은 걱정을 할 수 있습니다.

언급URL : https://stackoverflow.com/questions/5252065/spring-mvc-how-to-create-a-default-controller-for-index-page

반응형