Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > spring & servlet


Автор: Samotnik 12.4.2010, 12:33
Имеется приложение на Спринге. Я написал доп фишку на обычном сервлете. 
Вопрос, как связать мой сервлет со спринговским приложением и нужно ли это вообще делать ?

Автор: AntonSaburov 12.4.2010, 12:40
Если тебе не нужны бины из контекста спринга - то зачем тебе эта связь ?

Автор: Samotnik 12.4.2010, 12:51
Цитата(AntonSaburov @  12.4.2010,  12:40 Найти цитируемый пост)
Если тебе не нужны бины из контекста спринга - то зачем тебе эта связь ? 

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

Автор: MisterCleric 12.4.2010, 13:14
Цитата

как связать мой сервлет со спринговским приложением 

Цитата

Мне никакие данные из контекста спринга не нужны


Ты противоречишь сам себе. А вообще кто тебе запрещает вызывать свой сервлет напрямую без Spring.

А еще вот по теме:
http://stackoverflow.com/questions/1866953/how-to-connect-httpservlet-with-spring-application-context-in-web-xml

Автор: Samotnik 12.4.2010, 14:02
задание прояснилось. 
Кароч нужно делать на спринге.
Подскажите плиз, может я не так что делаю.

web.xml
Код

<servlet>
        <servlet-name>springServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>springServlet</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>


applicationContext.xml
Код

<bean id="PDF" class="de.alfa.openmedia.contentexplorer.andrewTest.PDFController" ></bean>

    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/*.html">PDF</prop>
            </props>
        </property>
    </bean>


PDFController.java

Код

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

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

public class PDFController extends AbstractController {

    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
         
         //тут моя  имплементация
         
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return null;
    }
}


Цитата

 INFO: 2010-04-12 12:30:36: [org.springframework.cache.ehcache.EhCacheManagerFactoryBean] Shutting down EHCache CacheManager
ERROR: 2010-04-12 12:30:36: [org.springframework.web.servlet.DispatcherServlet] Context initialization failed
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'localeResolver' must be of type [org.springframework.web.servlet.LocaleResolver],
but was actually of type [de.alfa.openmedia.contentexplorer.common.LocaleResolver]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:168)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:884)
        at org.springframework.web.servlet.DispatcherServlet.initLocaleResolver(DispatcherServlet.java:447)
        at org.springframework.web.servlet.DispatcherServlet.initStrategies(DispatcherServlet.java:408)
        at org.springframework.web.servlet.DispatcherServlet.onRefresh(DispatcherServlet.java:398)
        at org.springframework.web.servlet.FrameworkServlet.onApplicationEvent(FrameworkServlet.java:474)
        at org.springframework.context.event.SourceFilteringListener.onApplicationEventInternal(SourceFilteringListener.java:81)
        at org.springframework.context.event.SourceFilteringListener.onApplicationEvent(SourceFilteringListener.java:66)
        at org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:78)
        at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:76)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:274)
        at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:736)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:383)
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:402)
        at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:316)
        at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:282)
        at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:126)
        at javax.servlet.GenericServlet.init(GenericServlet.java:212)
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
        at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:808)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)

Автор: Samotnik 12.4.2010, 14:52
вообще, существует какой-нить пример простой на спринге ?

Все сделал как тут сказанно http://artamonov.ru/2006/03/15/prostoe-prilozhenie-na-spring/
не работает. 

Автор: MisterCleric 12.4.2010, 15:06
Слушай, а мне кажется, что ты чего-то не договариваешь. У тебя Exception валится на твоем не compatible классе. Показывай весь конфиг Spring и что там у тебя о нем написано в web.xml.
В частности не должно быть 
Код

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

если уж на applicationContext.xml ты повесил сервлет.

Автор: Samotnik 12.4.2010, 15:09
MisterCleric,  ну естественно у меня большие оба файла и web.xml  и applicationContext.xml


Цитата(MisterCleric @  12.4.2010,  15:06 Найти цитируемый пост)
В частности не должно быть 

а это как раз есть. Ч то можно сделать ?

Добавлено через 32 секунды
Цитата(MisterCleric @  12.4.2010,  15:06 Найти цитируемый пост)
если уж на applicationContext.xml ты повесил сервлет.

а на что еще его модно повесить ? 

Автор: MisterCleric 12.4.2010, 15:15
а там в доке написано, что DispatcherServlet по-умолчанию ищет конфиг с именем [servletName]-servlet.xml и воспринимает его как конфиг для самого себя, правда он мержится со всем остальным Spring-конфигом, хоть и "silent" для программиста. 
Вообще смотри, что у тебя там за проблемы с этим localeResolver. Просто, если усе так уже серъезно написно, то мало чем мы тут можем помочь не видя конкретной точки с проблемой. 
Видно по stackTrace, что проблема с вот этим бином. А что же вы там понаписывали на него - мы не ясновидящие.

Автор: garbuz 12.4.2010, 15:15
Samotnik, посмотри у Антона на сайте примеры по спригу - все просто и понятно. Там главное раз разобраться и все пойдет дальше. Что касается сервлетов и spring, то можно спринговые объекты из контекста инжектить в сервлет. А как это делается - уже другой вопрос, есть несколько сопособов.

Автор: Samotnik 12.4.2010, 15:21
Цитата(MisterCleric @  12.4.2010,  15:15 Найти цитируемый пост)
Вообще смотри, что у тебя там за проблемы с этим localeResolver. 

так интересно, то что я его не вызываю (как видно из кода)  и ошибки нету, до тех пор пока я не добавляю то что я добавляю smile

Автор: MisterCleric 12.4.2010, 15:38
Дык, может есть в конфиге такой определенны бин localeResolver? Просто spring-servlet сам подымает несколько бинов подефолту и как раз один из них этот, но это только в том случае, если такой не определен уже в конфиге. А раз он определен, то он и пытается его заинжектить в энваернмент сервлета. И ты получаешь беду.

 smile Извините за такую транскриптную писанину...

Автор: Samotnik 12.4.2010, 15:52
разобрался - это изза DispatcherServlet

Добавлено через 12 минут и 34 секунды
Цитата(garbuz @  12.4.2010,  15:15 Найти цитируемый пост)
посмотри у Антона на сайте примеры по спригу - все просто и понятно. 

категорически не согласен, чтобы разобраться http://www.java-course.ru/ в главе 20, нужнл потратить пол дня + поискать кое что самостоятельно в нете + перечитать все предыдущие главы. 
а http://artamonov.ru/2006/03/15/prostoe-prilozhenie-na-spring статья действительно крутая все просто очень и понятно.  После нее можно и доку с сайта читать, все прозрачно видится.

Не в обиду Антону, но у него простые примеры далеко не простые

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)