поэтому я пытаюсь заполнить dataTables плагина jQuery данными из моей базы данных — теперь проблема в том, как добавить отображение для пользовательского сервлета только в java (config)?

Этот парень должен сказать: Spring JavaConfig: добавить сопоставление для пользовательского сервлета , но у меня нет метода «onStartup» где-либо в моих классах — все это, кстати, не XML

Когда я не пытаюсь вызвать ajax и загрузить свои данные из контроллера на страницу jsp, подключаемый модуль, работающий с данными, прекрасно работает и правильно отображает таблицу, поэтому я знаю, что проблема должна быть связана с AJAX.

У меня есть сервлет UserDataSerlvet

package com.crutchclothing.json.datatable; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import com.crutchclothing.users.model.User; import com.crutchclothing.users.service.UserService; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class UserDataServlet extends HttpServlet { @Autowired @Qualifier("userService") UserService userService; private static final long serialVersionUID = 1L; public UserDataServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); PrintWriter out = response.getWriter(); List{amp}lt;User{amp}gt; lisOfUsers = userService.findAllUsers(); DataTableObject dataTableObject = new DataTableObject(); dataTableObject.setAaData(lisOfUsers); Gson gson = new GsonBuilder().setPrettyPrinting().create(); String json = gson.toJson(dataTableObject); out.print(json); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } 

И теперь в моем JSP это мой код JavaScript для вызова datatables

  {amp}lt;script type="text/javascript"{amp}gt; $(document).ready(function() { $('#users').dataTable({ 'bPaginate': true, 'sAjaxSource': './UserDataServlet', 'iDisplayLength': 5, 'bSort' : false, 'aoColumns' : [{'mData' : 'username'}, { 'mData': 'firstName' }, { 'mData': 'middleInit' }, { 'mData': 'lastName' }, { 'mData': 'phoneNumber' }, { 'mData': 'address1' }, { 'mData': 'city' }, { 'mData': 'state' }, { 'mData': 'email' }] }); }); {amp}lt;/script{amp}gt; 

Должно ли количество тэгов mData совпадать со свойством objects? Например, у моего пользовательского класса больше свойств, чем указано в списке, но это полезные свойства.

И, наконец, мои конфиг-классы — вот где я думаю, что нужно добавить отображение, но не знаю, как это сделать

 package com.crutchclothing.config; import java.util.Properties; import org.apache.commons.dbcp.BasicDataSource; import org.hibernate.SessionFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.orm.hibernate4.HibernateTransactionManager; import org.springframework.orm.hibernate4.LocalSessionFactoryBuilder; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; import com.crutchclothing.web.controller.RegistrationValidator; @EnableWebMvc @Configuration @ComponentScan({ "com.crutchclothing.*" }) @EnableTransactionManagement @Import({ SecurityConfig.class }) public class AppConfig { @Bean public SessionFactory sessionFactory() { LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource()); builder .scanPackages("com.crutchclothing.users.model", "com.crutchclothing.products.model", "com.crutchclothing.cart.model", "com.crutchclothing.orders.model") .addProperties(getHibernateProperties()); return builder.buildSessionFactory(); } private Properties getHibernateProperties() { Properties prop = new Properties(); prop.put("hibernate.format_sql", "true"); prop.put("hibernate.show_sql", "true"); prop.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); return prop; } @Bean(name = "dataSource") public BasicDataSource dataSource() { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/crutch_db"); ds.setUsername("bobby"); ds.setPassword("password"); return ds; } @Bean public HibernateTransactionManager txManager() { return new HibernateTransactionManager(sessionFactory()); } @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/pages/"); viewResolver.setSuffix(".jsp"); return viewResolver; } public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); } @Bean public RegistrationValidator registrationValidator() { return new RegistrationValidator(); } } package com.crutchclothing.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired @Qualifier("userDetailsService") UserDetailsService userDetailsService; @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/admin/**") .access("hasRole('ROLE_ADMIN')").and().formLogin() .loginPage("/login").failureUrl("/login?error") .usernameParameter("username") .passwordParameter("password") .and().logout().logoutSuccessUrl("/login?logout") .and().csrf() .and().exceptionHandling().accessDeniedPage("/403"); } @Bean public PasswordEncoder passwordEncoder(){ PasswordEncoder encoder = new BCryptPasswordEncoder(); return encoder; } } из package com.crutchclothing.config; import java.util.Properties; import org.apache.commons.dbcp.BasicDataSource; import org.hibernate.SessionFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.orm.hibernate4.HibernateTransactionManager; import org.springframework.orm.hibernate4.LocalSessionFactoryBuilder; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; import com.crutchclothing.web.controller.RegistrationValidator; @EnableWebMvc @Configuration @ComponentScan({ "com.crutchclothing.*" }) @EnableTransactionManagement @Import({ SecurityConfig.class }) public class AppConfig { @Bean public SessionFactory sessionFactory() { LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource()); builder .scanPackages("com.crutchclothing.users.model", "com.crutchclothing.products.model", "com.crutchclothing.cart.model", "com.crutchclothing.orders.model") .addProperties(getHibernateProperties()); return builder.buildSessionFactory(); } private Properties getHibernateProperties() { Properties prop = new Properties(); prop.put("hibernate.format_sql", "true"); prop.put("hibernate.show_sql", "true"); prop.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); return prop; } @Bean(name = "dataSource") public BasicDataSource dataSource() { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/crutch_db"); ds.setUsername("bobby"); ds.setPassword("password"); return ds; } @Bean public HibernateTransactionManager txManager() { return new HibernateTransactionManager(sessionFactory()); } @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/pages/"); viewResolver.setSuffix(".jsp"); return viewResolver; } public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); } @Bean public RegistrationValidator registrationValidator() { return new RegistrationValidator(); } } package com.crutchclothing.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired @Qualifier("userDetailsService") UserDetailsService userDetailsService; @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/admin/**") .access("hasRole('ROLE_ADMIN')").and().formLogin() .loginPage("/login").failureUrl("/login?error") .usernameParameter("username") .passwordParameter("password") .and().logout().logoutSuccessUrl("/login?logout") .and().csrf() .and().exceptionHandling().accessDeniedPage("/403"); } @Bean public PasswordEncoder passwordEncoder(){ PasswordEncoder encoder = new BCryptPasswordEncoder(); return encoder; } } 

Соответствующая информация в консоли

 23:56:45.260 DEBUG osweb.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcher' processing GET request for [/crutchclothing/UserDataServlet] 23:56:45.260 DEBUG oswsmmaRequestMappingHandlerMapping - Looking up handler method for path /UserDataServlet 23:56:45.261 DEBUG oswsmmaRequestMappingHandlerMapping - Did not find handler method for [/UserDataServlet] 23:56:45.261 WARN osweb.servlet.PageNotFound - No mapping found for HTTP request with URI [/crutchclothing/UserDataServlet] in DispatcherServlet with name 'dispatcher' 

Когда я запускаю на сервере из затмения, я получаю сообщение об ошибке

«Предупреждение DataTables: таблица id = users — ajax error. Для получения дополнительной информации об этой ошибке см. Http://datatables.net/tn/7 ».

Но ничего при запуске в IE 9 и Chrome (последняя версия) Спасибо

В javascript вам может понадобиться разобрать объект json, как это

 var obj = JSON.parse(JsonString); 

И объект должен передать его в таблицу данных.

Основная ошибка 404 — Spring не нашел обработчик для url / crutchclothing / UserDataServlet .

Ты смешанный сервлет спец. и Spring MVC все вышло. Spring MVC имеет свой собственный сервлет, и вам не нужно предоставлять свой.

Если вы хотите работать с Spring MVC, вы должны удалить extends HttpServlet и добавить аннотации @RestController , @RequestMapping с правильным URL-адресом в качестве параметра, тогда вам нужно будет исправить URL-адрес данных в config.

Вот учебник о том, как создать сервис Rest с командой Spring из Spring.io .