2015-08-10 3 views
0

I ahve приложение весны, где вызов ajax после входа в систему не работает.Весеннее приложение AJAX вызов после входа возвращается 404 не найден

Я сделал функцию ajax, как показано ниже, в фрагментах инструментов CHrome dev.

var today = new Date(); 
var month=today.getMonth(); 
var name="testuser"; 

$(document).ready(function(){ 
    $.ajax({ 
    type: "GET", 
    url: "ajax/getStmt", 
    data: "name="+name+"&month="+month, 
    success: function(msg){ 
    alert("Data Saved: " + msg); 
    }, 
    error: function(msg){ 
     alert("there was an error \n"+msg); 
    } 
}); 
}); 

Контроллер:

package com.cardholder.controller.ajax; 
@Controller 
public class StatementAjax { 
@Autowired 
public UserDao userDao; 

//initialise logger, dao 
@RequestMapping(value = "/ajax/getMonths", method = RequestMethod.GET) 
public String getMonths(){ 
    //get user from session 
    //get user token from session 

    /*UserStatement availableStmts = new UserStatement(); 
    availableStmts.setAvailableStatements(userDao.getUserStatementMonths(user.getUser_token()));*/ 
    return "months"; 
} 
@RequestMapping(value = "/ajax/getStmt", method = RequestMethod.GET) 
public String getStatement(@RequestParam(required = true) String name, @RequestParam(required = true) String month){ 
    System.out.println(name+", "+month); 
    //get user from session 
    //get user token from session 
    /*UserStatement availableStmts = new UserStatement(); 
    availableStmts.setAvailableStatements(userDao.getUserStatementMonths(user.getUser_token())); 
    ArrayList<UserStatement> s = (ArrayList<UserStatement>) userDao.getUserSelectedStatement(user.getUser_token(), 07, 2015);*/ 

    return "statements"; 
} 

} 

Пружина XML.

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" 
xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:security="http://www.springframework.org/schema/security" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.1.xsd 
http://www.springframework.org/schema/jdbc 
http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd 
http://www.springframework.org/schema/security 
http://www.springframework.org/schema/security/spring-security-3.2.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd"> 
<context:annotation-config /> 
<context:component-scan base-package="com.cardholder,com.cardholder.orm,com.cardholder.controller.ajax" /> 
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven> 
<bean id="secureServiceClient" class="com.cardholder.service.SecureServiceClient"> 
    <property name="serviceUrl" value="http://xxxx:8080/xApi/api/"></property> 
    <property name="serviceUserName" value="xxxx"></property> 
    <property name="servicePassword" value="xxxx"></property> 
</bean> 
<bean id="httpHeders" class="org.springframework.http.HttpHeaders"> 
</bean> 
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 

<property name="errorHandler"> 
    <bean class= "com.cardholder.service.error.ServiceClientErrorHandler" /> 
</property> 
</bean> 

<bean id="resourceLoader" class="org.springframework.core.io.DefaultResourceLoader"/> 
<bean id="pdfRenderer" class="com.cardholder.controller.menunav.util.Util"/>   
<bean id="serviceClientInterceptor" class="com.cardholder.service.interceptors.ServiceClientInterceptor"> 
    <property name="serviceUserName" value="xxx"></property> 
    <property name="servicePassword" value="xxx"></property> 
</bean> 
<bean id="encoder" 
    class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"> 
    <constructor-arg name="strength" value="16" /> 
</bean> 
<bean id="idGenerator" class="org.apache.catalina.util.SessionIdGenerator"></bean> 
<bean id="sessionValidator" class="com.cardholder.session.SessionValidator"></bean> 
<bean class="org.springframework.orm.hibernate4.HibernateTransactionManager" id="transactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"></property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
     </props> 
    </property> 
    <property name="packagesToScan" value="com.cardholder"></property> 
</bean> 
<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://xxxx:3306/portal" /> 
    <property name="username" value="xxxx" /> 
    <property name="password" value="xxxx" /> 
</bean> 

Ниже ссылка на скриншот из Devtools.

http://i.stack.imgur.com/EXry7.png

Насколько я знаю, запрос даже войти доцент контекст приложения, даже если URL его попытке доступа правильно.

У меня есть отладочная точка в методе диспетчера сервлетов, который должен был быть первым местом, которое должно быть достигнуто перед любыми перехватчиками, контроллерами и т. Д. Я не вижу, чтобы какой-либо поток останавливался там.

правок: добавление web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0" 
metadata-complete="true"> 
<display-name>NCHP</display-name> 

    <context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 
<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
    <servlet> 
<servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

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

    <listener> 
     <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 
<filter> 
    <filter-name>encodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>encodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
    <welcome-file-list> 
    <welcome-file>land.htm</welcome-file> 
</welcome-file-list> 
</web-app> 
+0

Посмотрите в свои файлы журнала - Spring регистрирует созданные конечные точки. Убедитесь, что весна подключена так, как вы предполагали, является хорошим первым шагом в устранении ошибок 404. – Paul

+0

Где я могу найти свои весенние журналы? извините im новый весна. Раньше я работал на стойках 1 и 2. – DJR

+0

Как вы развертываете свое приложение? Вы используете Spring Boot или Tomcat или Jetty или что-то еще? – Paul

ответ

0

Спасибо за размещение web.xml.

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

На основании приведенной выше конфигурации диспетчер Spring будет проконсультироваться, только если входящий URL-адрес имеет некоторую информацию о пути. например login.htm, something.xx. Однако, если у url нет информации о пути, например /getStmt, диспетчер не получит запрос.

Вы можете либо изменить конечную точку ajax на какую-то вещь, как /getStmt.ajax. Или добавьте / в качестве шаблона url в веб-xml (это может иметь другие последствия, основанные на том, как другие ресурсы будут поданы в вашем проекте).

Если вы в настоящее время обслуживаете страницы через соглашение xxxx.htm, я бы рекомендовал использовать соглашение xxxx.ajax для запросов ajax.

Вы также можете захотеть взглянуть на этом ответ: No mapping found for HTTP request with URI Spring MVC

Надеется, что это помогает.

+0

Спасибо Akshay. В этом есть смысл. – DJR

+0

Мое удовольствие @DJR – Akshay

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