2014-12-14 2 views
1

Я пытаюсь создать форму и опубликовать ответы, используя две страницы .jsp. Но я не могу получить доступ к первой странице .jsp, не говоря уже о втором. Ошибка, которая показывает на моей консоли:Метод getDispatcherType() не определен для типа HttpServletRequest

SEVERE: Servlet.service() for servlet [student] in context with path [/hibernate] threw exception [Unable to compile class for JSP: 

An error occurred at line: [48] in the generated java file: [E:\TechFlakes\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\work\Catalina\localhost\hibernate\org\apache\jsp\WEB_002dINF\jsps\student_jsp.java] 
The method getDispatcherType() is undefined for the type HttpServletRequest 

Stacktrace:] with root cause 
org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: [48] in the generated java file: [E:\TechFlakes\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\work\Catalina\localhost\hibernate\org\apache\jsp\WEB_002dINF\jsps\student_jsp.java] 
The method getDispatcherType() is undefined for the type HttpServletRequest 

Stacktrace: 
    at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103) 
    at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:199) 
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:450) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:361) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:336) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323) 
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318) 
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264) 
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1201) 
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:986) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:933) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 

Это мой класс контроллера:

package com.sazzad.bhai.database; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class ControllerClass { 

    @PersistenceContext 
    private EntityManager em; 

    @RequestMapping(value = "/student", method = RequestMethod.GET) 
    public ModelAndView showHello(ModelAndView model) { 
     System.out.println("This is showHello method."); 
     model.setViewName("student"); 
     return model; 
    } 

    @RequestMapping(value = "/newStudent") 
    public ModelAndView showNew(ModelAndView model) { 
     System.out.println("This is showNew method."); 
     model.setViewName("newStudent"); 
     return model; 
    } 


    @RequestMapping(value = "/main", method = RequestMethod.POST) 
    public String form(@ModelAttribute("StudentModel") Student student, 
      ModelMap model) { 
     System.out.println("Inside form"); 
     model.addAttribute("name", student.getName()); 
     model.addAttribute("id", student.getId()); 
     // model.addAttribute("student", student); 
     return "main"; 
    } 



} 

Это мой POJO файл:

package com.sazzad.bhai.database; 

import javax.persistence.Entity; 
import javax.persistence.Id; 

@Entity 
public class Student { 

    private int id; 
    private String name; 
    private int age; 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    @Id 
    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

Это student.jsp:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<%@ page contentType="text/html;charset=UTF-8" language="java"%> 

<html> 
<head> 
<title>This is student.jsp</title> 
</head> 
<body> 
    <h2>Student Information</h2> 
    <form:form method="POST" action="/hibernate/main"> 
     <table> 
      <tr> 
       <td><form:label path="name">Name</form:label></td> 
       <td><form:input path="name" /></td> 
      </tr> 

      <tr> 
       <td><form:label path="id">id</form:label></td> 
       <td><form:input path="id" /></td> 
      </tr> 

      <tr> 
       <td><form:label path="age">id</form:label></td> 
       <td><form:input path="age" /></td> 
      </tr> 

      <tr> 
       <td colspan="2"><input type="submit" value="Submit" /></td> 
      </tr> 
     </table> 
    </form:form> 
</body> 
</html> 

Это main.jsp:

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Using GET and POST Method to Read Form Data</title> 
</head> 
<body> 
    <h2>Submitted Student Information</h2> 
    <table> 
    <tr> 
     <td>Name</td> 
     <td>${name}</td> 
    </tr> 

    <tr> 
     <td>ID</td> 
     <td>${id}</td> 
    </tr> 

    <tr> 
     <td>Age</td> 
     <td>${age}</td> 
    </tr> 
</table> 
</body> 
</html> 

Это студент-servlet.xml:

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


    <context:component-scan base-package="com.sazzad.bhai.database"></context:component-scan> 
    <mvc:annotation-driven></mvc:annotation-driven> 

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

    <bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="NewPersistenceUnit"/> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="com.sazzad.bhai.database" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <!--<prop key="hibernate.hbm2ddl.auto">create-drop</prop>--> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" > 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
     <property name="url" value="jdbc:mysql://localhost:3306/test"/> 
     <property name="username" value="admin"/> 
     <property name="password" value="admin"/> 
     <!--<property name="validationQuery" value="SELECT 1"/>--> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="myEmf" /> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager"/> 

</beans> 

Это web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
    <display-name>SazzadBhai</display-name> 
<!-- <welcome-file-list> --> 
<!--  <welcome-file>index.html</welcome-file> --> 
<!--  <welcome-file>index.htm</welcome-file> --> 
<!--  <welcome-file>index.jsp</welcome-file> --> 
<!--  <welcome-file>default.html</welcome-file> --> 
<!--  <welcome-file>default.htm</welcome-file> --> 
<!--  <welcome-file>default.jsp</welcome-file> --> 
<!-- </welcome-file-list> --> 

    <servlet> 
    <description></description> 
    <display-name>student</display-name> 
    <servlet-name>student</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>student</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

И это мой pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>SazzadBhai</groupId> 
    <artifactId>hibernate</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <build> 
<!--  <sourceDirectory>src</sourceDirectory> --> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <warSourceDirectory>WebContent</warSourceDirectory> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
     </dependency> 
<!--  <dependency> --> 
<!--    <groupId>javax.servlet.jsp</groupId> --> 
<!--    <artifactId>jsp-api</artifactId> --> 
<!--    <version>2.1</version> --> 
<!--    <scope>provided</scope> --> 
<!--   </dependency> --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.34</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
      <version>1.4</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.2.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.2.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-pool</groupId> 
      <artifactId>commons-pool</artifactId> 
      <version>1.6</version> 
     </dependency> 
<!--  <dependency> --> 
<!--   <groupId>log4j</groupId> --> 
<!--   <artifactId>log4j</artifactId> --> 
<!--   <version>1.2.15</version> --> 
<!--  </dependency> --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>3.2.12.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>3.2.12.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>3.2.12.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>3.2.12.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>javax.servlet.jsp-api</artifactId> 
      <version>2.3.0</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
</project> 

Я не могу обнаружить проблему в своем коде, буду очень благодарен, если вы поможете.

ответ

1

Мой код сработал. Изменения, которые я сделал являются:

  1. Я изменил версию моего javax-сервлета-API от 2,3 до 3,1
  2. Я изменил метод showHello моего контроллера класса к этому:

    @RequestMapping(value = "/student", method = RequestMethod.GET) 
    public ModelAndView showHello(Model model) { 
        System.out.println("This is showHello method."); 
        return new ModelAndView("student", "command", new Student()); 
    } 
    

В основном, что я сделал, я изменил аргумент метода от ModelAndView до Model.

1

Ваша версия сервлета-api слишком стар. Вы должны использовать 3.X или больше. Как можно видеть, here даже выпускает обратно, это относится к 3.X.

Смежные вопросы