복붙노트

[SPRING] 왜 WEB-INF 폴더 안에 jsp 파일이 작동하지만 WEB-INF 아래에있는 폴더 아래에 놓여 있습니까?

SPRING

왜 WEB-INF 폴더 안에 jsp 파일이 작동하지만 WEB-INF 아래에있는 폴더 아래에 놓여 있습니까?

내 JSP 파일이 WEB-INF 폴더 (/WEB-INF/file.jsp)에있을 때 localhost : 8080 / ProjectCtxtRoot /에서 액세스 할 수는 있지만 액세스 할 수는 없습니다. / WEB- INF / jsp / file.jsp?

다음과 같이 web.xml에서 welcome-list 태그의 경로를 변경했습니다.

<welcome-file-list>
       <welcome-file>/JSP/fileName.jsp</welcome-file>
</welcome-file-list>

dispatcher-servlet.xml을 다음과 같이 변경했습니다.

   <bean id="jspViewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" /> 

아직도 작동하지 않습니다. 위의 경우에 사용 된 URL은 다음과 같습니다.

 localhost:8080/ContextRoot/jsp/
 localhost:8080/ContextRoot/jsp/fileName.jsp
 localhost:8080/ContextRoot/jsp/fileName 

위의 URL 중 하나에 대해서는 작동하지 않습니다.

하지만

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

다음과 같이 dispatcher-servlet.xml

<bean id="jspViewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      p:prefix="/WEB-INF/"
      p:suffix=".jsp" /> 

위의 경우에 사용 된 URL은 localhost : 8080 / ContextRoot /이며 작동합니다.

나는 바람둥이 v 7.0 서버를 사용합니다. Eclipse IDE에서 프로젝트를 새로 고친 다음 정리하고, 빌드하고, mvn을 사용하여 빌드를 새로 작성한 다음 tomcat 관리자 홈페이지에서 전쟁을 선택하고 배포하십시오. 나는 매번 이것을한다.

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:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
                    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd     
                    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <mvc:annotation-driven/>

    <context:component-scan base-package="com.projectName.www" />

    <!-- Factory bean that creates the Mongo instance -->
    <bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">
        <property name="host" value="localhost" />
    </bean>

    <!-- MongoTemplate for connecting and quering the documents in the database -->
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongo" ref="mongo" />
        <constructor-arg name="databaseName" value="tableName" />
    </bean>

    <!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes -->
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />



    <bean id="jspViewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" /> 

  <!--   <bean class="org.springframework.web.servlet.view.tiles2.TilesViewResolver"/>

    <bean class=
    "org.springframework.web.servlet.view.tiles2.TilesConfigurer"> -->
 <!--  <property name="definitions">
    <list>
      <value>/WEB-INF/views/views.xml</value>
    </list>
  </property> 
</bean> -->




</beans>

이것은 내 web.xml의 모습입니다.

<web-app>

<!--   <display-name>Archetype Created Web Application</display-name> -->

   <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/src/main/webapp/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>-->
        <load-on-startup>1</load-on-startup>
    </servlet>

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

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

   <!--  <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> -->

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


</web-app>

승인. 그것은 /webapp/WEB-INF/jsp/fileName.jsp에서 jwe 폴더 전체를 /webapp/jsp/fileName.jsp로 옮겼을 때 작동합니다. 나는 알고 싶다 1. 왜 지금 작동합니까? 2. 이것이 올바른 방법일까요? 3. url이 localhost : 8080 / CtxtRoot / jsp / 또는 localhost : 8080 / CtxtRoot / jsp / search.jsp 일 때 작동하지만 localhost : 8080 / AnnaUnivResults / jsp / search에는 작동하지 않습니다. 왜 그래야만하지?

해결법

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

    1.나는 여기에 몇 가지 문제가 있다고 생각한다.

    나는 여기에 몇 가지 문제가 있다고 생각한다.

    불행히도 모든 세부 사항을 다룰 수는 없으므로 많은 봄을 구성 할 수 있으므로 가장 기본적인 시나리오를 설명하려고합니다. 누군가 실수를 발견하면 알려주십시오.

    경로에 대해서는 단계별로 사물을 생각하는 것이 도움이 될 수 있습니다.

    귀하의 예제에서 localhost : 8080 / ContextRoot / jsp / fileName을 요청 했으므로 'CtxRoot'가 컨텍스트 루트이고 서블릿의 경로가 '/'이므로 컨트롤러에 그 이후의 내용을 전달해야합니다. DispatcherServlet이 요청을 받으면 'jsp'를 경로로 처리하는 컨트롤러를 검색합니다. 당신이 아무 것도 없었기 때문에, 그것을 자원 경로로 취급하기로 결정했습니다. 뷰 해석기를 사용하여 /WEB-INF/jsp/jsp/fileName.jsp 경로를 만들었는데, 분명히 존재하지 않습니다.

    대신에 localhost : 8080 / ContextRoot / fileName을 요청했다고 가정하면, 요청은 DispatcherServlet에 도달 할 것이고 'pathName'을 경로로 처리하는 Controller가 없으므로 자원으로 취급 할 것입니다. /WEB-INF/jsp/fileName.jsp 경로를 형성하고 결과를 리턴합니다.

    그러나 웹 XML은 스프링을 초기화하도록 구성되지 않았습니다. 그래서 웹 응용 프로그램은 웹 응용 프로그램 루트와 관련된 자원에 대한 것처럼 모든 요청을 실제로 처리하고있었습니다. 나는 스프링이 적절히 초기화 된 상태에서 요청을했다면 효과가있을 것이라고 믿는다.

    다음은이를 수행하는 좋은 예입니다.

    http://www.mkyong.com/spring3/spring-3-mvc-hello-world-example/

    그의 웹 XML에는 ContextLoaderListener가 있으며,이 ContextLoaderListener는 사용자의 주석으로 처리되며 웹 응용 프로그램에서 봄을 초기화하는 데 필수적입니다. Dispatcher에서 / src / main / resources 경로를 사용하여 주석을 볼 수도 있지만 web xml의 모든 경로는 웹 응용 프로그램 루트와 관련이 있다고 가정합니다. 런타임에 웹 서버는 프로젝트에 대한 지식이 없으며 'src'는 웹 응용 프로그램의 루트 디렉토리가 아닙니다. 또한 주 스프링 컨텍스트와 다른 MVC 항목에 대해 다른 응용 프로그램 컨텍스트를 가질 수 있다는 점에 유의하십시오. 이는 일반적입니다.

    나는 당신이이 일을한다면 그것이 효과가 있다고 생각합니다.

    또한 환영 파일에 대해 계속 이야기했지만 리소스에 대한 전체 경로를 제공했습니다. 환영 파일은 사용자가 다음과 같이 디렉토리의 루트에 요청할 경우에만 작동합니다.

    localhost:8080/CtxtRoot/
    

    이 요청은 환영 파일로 전달됩니다. 나는 당신이 그것을 시도한 유일한 시간이라고 생각합니다. JSP가 응용 프로그램의 루트에 있었고 환영 파일로 구성되었으므로 작동했습니다. 그것이 "일하는"동안, 실제로 봄을 사용하지 않았습니다.

    행운을 빈다.

  2. ==============================

    2.WEB-INF 외부의 모든 것들이 공개적으로 이용 가능합니다. 인증은 적용되지 않습니다 (web.xml에 scurity 제약 조건을 정의하여 적용 할 수 있습니다). 그러나 WEB-INF 내의 모든 리소스는 안전하게 보호됩니다. 정적 페이지를 WEB-INF 외부에 유지하고 동적 페이지 (예 : 프로필), WEB-INF 내부 계정을 유지할 수 있습니다. 교차 확인해주세요. 틀렸을 수도 있습니다.

    WEB-INF 외부의 모든 것들이 공개적으로 이용 가능합니다. 인증은 적용되지 않습니다 (web.xml에 scurity 제약 조건을 정의하여 적용 할 수 있습니다). 그러나 WEB-INF 내의 모든 리소스는 안전하게 보호됩니다. 정적 페이지를 WEB-INF 외부에 유지하고 동적 페이지 (예 : 프로필), WEB-INF 내부 계정을 유지할 수 있습니다. 교차 확인해주세요. 틀렸을 수도 있습니다.

  3. from https://stackoverflow.com/questions/25904298/why-jsp-files-inside-web-inf-folder-works-but-placed-under-a-folder-under-web by cc-by-sa and MIT license