Spring4、maven、jquery、tomcatを使用してWebアプリケーションを開発しました。 私はweb.xmlとspringの代わりにjava configクラスを使用しています。デカップリングされたアプリケーションのコントローラクラスで、@Controllerの代わりに@RestControllerを使用する。このように@Controllerを使用したくない場合は、表示名とモデルを返さなくてはなりません。Spring 4 RestControllerサービスがWebアプリケーションのjspから呼び出されない
問題: - Webアプリケーションが正常に起動し、dashboard.jsがdashboard.jspから呼び出されます。 しかし、DashboardController.javaサービス '/ dashboard/getDashboardDetails'を呼び出そうとすると、404ページにエラーが見つかりません。 eclipseまたはtomcatコンソールにエラーはありません。
フィルタクラス: -
package com.me.configuration;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
public class CORSFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
System.out.println("Filtering on...........................................................");
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
設定クラス パッケージcom.me.configuration。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.me")
public class ManageBudgetConfiguration {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/pages/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
イニシャライザクラス
package com.me.configuration;
import javax.servlet.Filter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class ManageBudgetInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { ManageBudgetConfiguration.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
@Override
protected Filter[] getServletFilters() {
Filter [] singleton = { new CORSFilter()};
return singleton;
}
}
コントローラクラス
package com.me.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;
import com.me.model.DashboardBean;
import com.me.model.User;
import com.me.service.DashboardServiceInf;
import com.me.service.UserService;
@RestController
@RequestMapping("/dashboard")
public class DashboardController {
@Autowired
UserService userService; //Service which will do all data retrieval/manipulation work
@Autowired
DashboardServiceInf dashboardService;
/**
* This service returns Dashboard data details
* @return String
*/
@RequestMapping(value = "/getDashboardDetails", method = RequestMethod.GET)
public ResponseEntity<List<DashboardBean>> getDashBoardDetails() {
System.out.println("Dashboardcontroller : getDashBoardDetails");
String userId ="rahil";
List<DashboardBean> dashboardBeanList = dashboardService.getDashBoardDetails(userId);
if(dashboardBeanList.isEmpty()){
return new ResponseEntity<List<DashboardBean>>(HttpStatus.NO_CONTENT);//You many decide to return HttpStatus.NOT_FOUND
}
return new ResponseEntity<List<DashboardBean>>(dashboardBeanList, HttpStatus.OK);
}
}
dashboard.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>Manage Expense</title>
<!-- jQuery -->
<script type ="text/javascript" src="./resources/javascript/vendor/jquery/jquery.min.js"></script>
<!-- Dashboard Charts -->
<script src="resources/javascript/js/dashboardCharts.js"></script>
</head>
<body>
<script type ="text/javascript">
$(document).ready(function() {
console.log("\tdashboard.jsp");
$.ajax({
url : "resources/javascript/system/dashboard.js",
dataType : "script",
cache : true
}).done(function(){
console.log("inside done....");
me.dashboard.onload();
});
});
</script>
</body>
</html>
0私はこのフォーラムでそれを掲示するので、私は約一ヶ月(問題の上で作業してきた
dashboard.js
me = new Object();
if (typeof me.dashboard == 'undefined') {
me.dashboard = function() {
return {
msgArray:[], // variable for checking same message
/**
* @author rahikhan
* @description Function to be called once the dashboard loaded.
*/
onload : function(){
console.log("dashboard.js : onload..called without error");
me.dashboard.getDashboardDetails();
},
getDashboardDetails : function(){
console.log("dashboard.js : getDashboardDetails...");
var promise = $.ajax({
async: true,
url: "dashboard/getDashboardDetails.htm",
type: "GET",
datatype: "json",
accept: "application/json",
}).done(function(result) {
result = JSON.parse(result);
console.log("\tresult : " + result);
}).fail(function(jqXHR, textStatus) {
console.log("\tgetDashboardDetails : Application Exception Occured ");
});
return promise;
},
}
}();
}
の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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.me</groupId>
<artifactId>manageBudget</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>manageBudget</name>
<url>http://maven.apache.org</url>
<properties>
<springframework.version>4.2.0.RELEASE</springframework.version>
<jackson.version>2.5.3</jackson.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- System Related dependencies -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
<warName>manageBudgetWar</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<finalName>manageBudget</finalName>
</build>
</project>
あなたはjqueryのための3つのスクリプトを持っていますなぜ?静的ではなく動的にjsファイルをロードするのはなぜですか?コントローラがdashboard/getDashboardDetailsにマップされていて、htmlを返さずにjsonを取得しても、なぜdashboard/getDashboardDetails.htmをリクエストするのですか? –
@JB Nizet 3 jquery scriptsが間違いを入力しています。それを訂正した。 –
@JB Nizet 1. 3のjqueryスクリプトが間違いを入力しています。それを訂正した。 2.静的にスクリプトを追加することで違いがあります。私はそれを変更する必要がありますか? 3. DashboardController.javaパスが「/ dashboard」で、getDashBoardDetails()メソッドのパスが「/ getDashboardDetails」で、このサービスを /dashboard/getDashboardDetails.htmと呼びます。このサービスは、dashbard.jspのフィールドに動的に値を設定するjsonを返します。私がここで間違っていることは何ですか? –