Запрошенный ресурс недоступен, если вы хотите сопоставить файл .html
Я использую Spring mvc и хочу, чтобы веб-приложение, отправляющее некоторые json-данные клиенту и клиенту, должно визуализировать их с помощью js.
У меня есть несколько вопросов:
1-Мой проект имеет некоторый *.html файл *.jsp, как я могу обрабатывать оба без web.xml. код, который я написал, отлично работает с *.jsp, но дает "Запрошенный ресурс недоступен". ошибка для отображения html файлов.
2-Как я сказал, My service должен отправить список объектов в json-форме клиенту, когда я хочу проанализировать строку json на сервере в файле *.jsp с кодом типа
MyClass data = new Gson().fromJson(MyList.get(0).toString(), listType)
мне приходится сталкиваться со многими проблемами, поэтому я решаю сделать это задание на стороне клиента в файле *.html, я хочу знать, как мне обрабатывать это синтаксическое задание, когда я не хочу, чтобы этот клиент знал о структура моего класса? ИЛИ PLZ сказать, если нужно поделиться моим классом с клиентом, как я должен отправить его в html файл?
3-Как мне получить доступ к данным, которые я создал в файле restapi.jsp в файле UserSideApp.html?
это некоторые мои файлы:
AppInitializer.java
public class AppInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext container) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(AppConfig.class);
ctx.setServletContext(container);
ServletRegistration.Dynamic servlet = container.addServlet(
"dispatcher", new DispatcherServlet(ctx));
servlet.setLoadOnStartup(1);
servlet.addMapping("/");
} }
AppConfig.java
public class AppConfig {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix("");
return viewResolver;
} }
часть моего AppContoller.java
@Controller
@RequestMapping("/")
public class AppController {
@Autowired
HackDataService service;
@RequestMapping(value = "/restapi", method = RequestMethod.GET)
public String jsonAPI(ModelMap model) {
List<HackData> newList = service.findAllNewData();
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json="";
try {
json = ow.writeValueAsString(newList);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
model.addAttribute("List", json);
String newjson = new Gson().toJson(newList);
model.addAttribute("newList", newjson);
return "newTest.jsp";
}
@RequestMapping(value = "/app", method = RequestMethod.GET)
public String htmlapp() {
return "UserSideApp.html";
} }
и мои файлы .html и .jsp находятся в разделе "/WEB-INF/views/"
Ответы
Ответ 1
Проведя почти день на первой проблеме, я нахожу ответ,
в первую очередь вместо внедрения WebApplicationInitializer, я расширяю AbstractAnnotationConfigDispatcherServletInitializer и для java. Конфигурирование я расширяет WebMvcConfigurerAdapter.
Затем я создаю папку с папками в WEB-INF и мои коды меняются:
AppInitializer стал похожим на другие интернет-образцы.
AppConfig.java
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.attackmap" })
public class AppConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/pages/**").addResourceLocations("/WEB-INF/pages/");
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix("");
return viewResolver;
}
}
AppController.java
@Controller
@RequestMapping("/")
public class AppController {
@RequestMapping(value = { "/", "/info" }, method = RequestMethod.GET)
public String welcome(ModelMap model) {
model.addAttribute("message", "home page with info about site");
return "homepage.jsp";
}
@RequestMapping(value = "/finalapp", method = RequestMethod.GET)
public String test() {
return "redirect:/pages/final.htm";
} }
был другой способ
Создание каталога ресурсов в разделе "src/main/webapp"
добавить ниже треску в AppConfig.java
registry.addResourceHandler("/WEB-INF/views/resources/*.html").addResourceLocations("/resources/");
а для viewResolving используйте код, как показано ниже:
@RequestMapping(value = "/newapp", method = RequestMethod.GET)
public String test2() {
return "/resources/UserSideAppNew.html";
}
но все еще мои два других вопроса не решены, основная проблема была первой, но если вы знаете sth, об этих двух plz расскажите мне о них