Запрошенный ресурс недоступен, если вы хотите сопоставить файл .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 расскажите мне о них