Интеграция Spring 2.5 и устаревшего приложения сервлета - PullRequest
2 голосов
/ 14 февраля 2012

Я новичок в весне. Я работал над разделами этого урока , которые охватывают веб-поток. Моя конечная цель - использовать Spring для реализации новых функций в устаревшем веб-приложении сервлета, а затем постепенно заменять существующий код, превращая веб-приложение сервлета в веб-приложение Spring.

Итак, для этого я решил снова пройти часть учебного веб-потока, поменяв имена, чтобы сделать свой собственный первый экран «Привет, мир» с Spring в среде разработки унаследованного приложения с сервлетами.

Моя проблема в том, что когда я помещаю сопоставления сервлетов для Spring в мой web.xml, я получаю 404, пытаясь добраться до моей целевой страницы.

  • Я использую WebLogic 9.2
  • Я преобразовал дерево каталогов моего веб-приложения, чтобы имитировать макет, который используют веб-приложения Spring
  • Я скопировал spring.jar и spring-mvc.jar в мой WEB-INF / lib

Я сделал упрощенную версию своего web.xml, содержащего только один устаревший сервлет (для целевой страницы) и Spring. Он работает с комментариями Spring, но не иначе. Вот мой WEB-INF / web.xml для веб-приложения abc

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
  xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


  <servlet>
    <servlet-name>LogIn</servlet-name>
    <servlet-class>
            com.utilities.LogIn
    </servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>LogIn</servlet-name>
    <url-pattern>/home</url-pattern>
  </servlet-mapping>


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

  <servlet-mapping>
    <servlet-name>abc</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>



  <!-- Welcome File List  -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>


</web-app>

Это мой WEB-INF / abc-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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

  <!-- the application context definition for the NSD webapp DispatcherServlet -->

  <beans name = "/hello.htm" class = "com.somecompany.web.HelloController"/>

</beans>

Вот код для моего элементарного контроллера:

package com.somecompany.web;

import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import org.apache.log4j.Logger;

public class HelloController implements Controller {

    protected static final Logger logger = Logger.getLogger(HelloController.class);

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        logger.info("Returning view for CBS Search ....");

        return new ModelAndView("hello.jsp");
    }

}// end class 

Опять же, моя проблема не с контроллером или представлением (jsp) ... пока. Прямо сейчас, когда я включаю сопоставления сервлетов Spring в мой web.xml, я не могу попасть на свою целевую страницу, я получаю 404. Когда я дергаю сопоставления сервлетов Spring, эта проблема исчезает.

Я начинающий в Spring, поэтому не знаю, где искать.

Ответы [ 4 ]

1 голос
/ 21 февраля 2012

Какая у вас целевая страница? /hello.htm? Вы только что отобразили все с расширением htm для диспетчера, но у вас есть только контроллер, который имеет дело с hello.htm. Вы должны получить 404, если вы пытаетесь получить доступ к /index.htm. Измените ваше отображение или создайте контроллер для других URL.

Однако на вашем месте я бы использовал аннотации Spring в Spring 3.0 для настройки веб-приложения. Это намного проще.

1 голос
/ 14 февраля 2012

Возможно, проблема в <url-pattern> в вашем web.xml. Вы не можете использовать ".jsp" в качестве вашего сопоставленного расширения.

Существует довольно подробное обсуждение низкоуровневых причин в этой теме ... но суть в том, что расширение файла "*.jsp" является особенным для базовой Java спецификация сервлета. Вы пытаетесь сделать так, чтобы Spring угнал это. Вот почему учебник, на который вы ссылаетесь, использует вместо этого "*.htm".

Попытайтесь изменить <url-pattern> в web.xml на что-то другое (например, *.htm) и посмотрите, сможете ли вы проверить свой тестовый URL с этим расширением.

0 голосов
/ 23 февраля 2012

Попробуйте косую черту в имени вашего представления ModelAndView:

return new ModelAndView("/hello.jsp");
0 голосов
/ 22 февраля 2012

Как уже упоминалось, лучше использовать Spring 3.0, который проще в настройке. Поскольку вы начали с этого, я делюсь некоторыми своими мыслями. Вам нужно использовать что-то вроде SimpleUrlHandlerMapping, которое позаботится о разрешении вашего шаблона URL для соответствующих контроллеров. Взгляните на эту весеннюю справочную документацию

http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html.

Надеюсь, это поможет.

...