Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как конфигурировать сервлет в Spring? 
V
    Опции темы
olegrolik
Дата 20.5.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Я хочу, чтобы у меня был сервлет, в котором был реализован get и post запросы. При этом должна быть возможность изменять различные параметры при сборке приложения.
Код

public class HttpsServletTest extends HttpServlet {
    private String prop1;
    
    public void setProp1(String prop1) {
        this.prop1 = prop1;
    }
    public String getProp1() {
        return prop1;
    }
    
    
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException{
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("<h1>HelloWorld</h1>");
        out.println("<h2>"+prop1+"</h2>");
        out.println("</body>");
        out.println("</html");
        
    }

    
        public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException{
        // later :)
        
    }
    public ModelAndView handleRequest(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        
        return null;
    }
    
}



Делаю так: 
web.xml:
Код

<servlet>
    <servlet-name>manage</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
  </servlet>
 <servlet-mapping>
          <servlet-name>manage</servlet-name>
          <url-pattern>/https/Hey</url-pattern>
      </servlet-mapping>


manage-servlet.xml:
Код

<beans>
    <bean id="httpsServletTest" class="HttpsServletTest">
        <property name="prop1">
            <value>Property1</value>
        </property>
    
    </bean>
</beans>



при вызове сервлета появляется ошибка :
Код

SEVERE: Servlet.service() for servlet manage threw exception
javax.servlet.ServletException: No adapter for handler [HttpsServletTest@33aa9b]: Does your handler implement a supported interface like Controller?
    at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:1086)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:873)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:808)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    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:263)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)



Вот.... Что делать?
PM MAIL   Вверх
Kangaroo
Дата 20.5.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Нужно, чтобы твой класс имплементировал интерфейся Контроллер или наследуй его от АбстрактКонтроллера. 


--------------------
Lost....
PM MAIL MSN   Вверх
olegrolik
Дата 21.5.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Цитата(Kangaroo @ 20.5.2008,  19:29)
Нужно, чтобы твой класс имплементировал интерфейся Контроллер или наследуй его от АбстрактКонтроллера.

Код

public class HttpsServletTest extends AbstractController {
    private String prop1;
    
    public void setProp1(String prop1) {
        this.prop1 = prop1;
    }
    public String getProp1() {
        return prop1;
    }
    
    
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException{
        res.setContentType("text/html");
        System.out.println("doGet!");
        PrintWriter out = res.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("<h1>HelloWorld</h1>");
        out.println("<h2>"+prop1+"</h2>");
        out.println("</body>");
        out.println("</html");
        
        
    }
    
    public ModelAndView handleRequest(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        System.out.println("12345");
        return null;
    }
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        // TODO Auto-generated method stub
        return null;
    }
    
}


web.xml:
Код


<servlet>
    <servlet-name>manage</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
  </servlet>
 <servlet-mapping>
          <servlet-name>manage</servlet-name>
          <url-pattern>/http</url-pattern>
      </servlet-mapping>


Вызываю в браузере localhost:8080/App/http
Но срабатывает метод handleRequest, а не doGet. А мне нужно, чтобы сработал именно doGet.
PM MAIL   Вверх
Kangaroo
Дата 21.5.2008, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



olegrolik
а зачем ты его тогда пускаешь через ДиспатчерСервлет?
Если нужен отдельный сервлет - то просто мапь его в web.xml и наследуй от обычного сервлета.
Если же нужно пускать через ДиспатчерСервлет - то нужно использовать handleRequest, так как именно его вызывает Диспатчер.


--------------------
Lost....
PM MAIL MSN   Вверх
olegrolik
Дата 21.5.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Kangaroo, а мне это нужно для того, чтобы "проперти" разные писать. И в конфигурационном файле их каждый раз менять... 
Вот так, например:

Код

<beans>
    <bean id="httpsServletTest" class="HttpsServletTest">
        <property name="prop1">
            <value>Property1</value>
        </property>
    
    </bean>
</beans>

Очень удобно!
PM MAIL   Вверх
Kangaroo
Дата 21.5.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(olegrolik @  21.5.2008,  09:38 Найти цитируемый пост)
Kangaroo, а мне это нужно для того, чтобы "проперти" разные писать. И в конфигурационном файле их каждый раз менять... 

Для этого есть стандартный механизм сервлетов - конфиг параметры в web.xml. А потом в методе init() их разбирать и устанавливать сервлету.

Добавлено через 3 минуты и 1 секунду
Второй вариант - в методе handleRequest или handleRequestInternal написать простой иф - если ГЕТ, то вызвать дуГет, если ПОСТ, то вызвать дуПост.


--------------------
Lost....
PM MAIL MSN   Вверх
fixxer
Дата 21.5.2008, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 4
Всего: 27



Есть вариант посередине. 
org.springframework.web.servlet.HttpServletBean
Он воспринимает конфиг параметры в web.xml как спринговые инджекшны.


--------------------
user posted image
PM MAIL ICQ   Вверх
Kangaroo
Дата 21.5.2008, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(fixxer @  21.5.2008,  10:01 Найти цитируемый пост)
Есть вариант посередине. 
org.springframework.web.servlet.HttpServletBean

Красота smile 


--------------------
Lost....
PM MAIL MSN   Вверх
olegrolik
Дата 22.5.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



fixxer, правильно ли я понял? Делаю вот так.
web.xml:
Код

<servlet>
    <servlet-name>httpsTest</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
<servlet-mapping>
    <servlet-name>httpsTest</servlet-name>
    <url-pattern>/httpsTest</url-pattern>
  </servlet-mapping>


httpTest-servlet.xml:
Код

<beans> 
    
    <bean id="httpsServletTest" class="com.package.HttpsServletTest">
        <property name="prop1">
            <value>Property1</value>
        </property>
        <property name="name">
            <value>Oleg</value>
        </property>    
    </bean>
    
     <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>               
                <prop key="/httpsTest">httpsServletTest</prop>
             </props>
        </property>
    </bean> 
    
</beans>

класс HttpsServletTest:
Код

public class HttpsServletTest extends HttpServletBean {
    private String prop1;
    private String name;
    
    public void setProp1(String prop1) {
        this.prop1 = prop1;
    }
    public String getProp1() {
        return prop1;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException{
        res.setContentType("text/html");
        System.out.println("doGet!");
        System.out.println(prop1);
        System.out.println(name);
        PrintWriter out = res.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("<h1>HelloWorld</h1>");
        out.println("<h2>"+prop1+"</h2>");
        out.println("<h2>"+name+"</h2>");
        out.println("</body>");
        out.println("</html");    
        
    }
    
    public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException{
        // later
    }


    
}



вызываю сервлет так:
http://localhost:8080:/MyApplicationName/httpsTest
Ошибка та же.
Код


SEVERE: Servlet.service() for servlet httpsTest threw exception
javax.servlet.ServletException: No adapter for handler [com.package.HttpsServletTest@8518d4]: Does your handler implement a supported interface like Controller?
    at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:1086)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:873)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:808)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
    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:263)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)



Это сообщение отредактировал(а) olegrolik - 22.5.2008, 12:28
PM MAIL   Вверх
Kangaroo
Дата 22.5.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(olegrolik @  22.5.2008,  12:20 Найти цитируемый пост)
fixxer, правильно ли я понял? Делаю вот так.

 не-а..  smile  smile 




Цитата(fixxer @  21.5.2008,  10:01 Найти цитируемый пост)
Он воспринимает конфиг параметры в web.xml как спринговые инджекшны. 

Тебе это сервлет не в конфигурации спринга надо прописать, а в веб.ксмл

Добавлено через 1 минуту и 5 секунд
Там же и параметры ему задать, просто эти параметры сами будут биндится к переменным твоего класса


--------------------
Lost....
PM MAIL MSN   Вверх
olegrolik
Дата 22.5.2008, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Цитата(fixxer @ 21.5.2008,  10:01)
Он воспринимает конфиг параметры в web.xml как спринговые инджекшны.

Или это значит, что можно будет так конфигурировать HttpServletBean ?
Код


<context-param>
        <param-name>prop1</param-name>
        <param-value>
            Property1Value
        </param-value>
    </context-param>


PM MAIL   Вверх
Kangaroo
Дата 22.5.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(olegrolik @  22.5.2008,  14:42 Найти цитируемый пост)
Или это значит, что можно будет так конфигурировать HttpServletBean ?

Ага, вроде по документации так. Попробуй


--------------------
Lost....
PM MAIL MSN   Вверх
fixxer
Дата 22.5.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 4
Всего: 27



Я каждый раз удивляюсь, что людям проще написать в форум и гадать сообща целый день, чем открыть javadoc и английским по белому прочитать:
Цитата

public abstract class HttpServletBean
extends HttpServlet

Simple extension of HttpServlet which treats its config parameters (init-param entries within the servlet tag in web.xml) as bean properties. 


 smile 


--------------------
user posted image
PM MAIL ICQ   Вверх
olegrolik
Дата 22.5.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Kangaroo, не увидел твоё сообщение, когда писал своё последнее. Спасибо.
fixxer, спасибо, я всё понял.
Тема закрыта.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1032 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.