基于Java的Servlet无法正确调度

时间:2019-07-16 08:15:02

标签: spring-mvc thymeleaf

嘿,我的Servlet调度不正确。我使用了本教程https://www.youtube.com/watch?v=MNgliKze8oI

我正在尝试使用请求后从Thymeleaf-向SpringMVC-Controller提供数据。 在同一个班上,我已经有一个工作正常的控制器。

我的Servlet类:

package com.springMvcAndThymleafExample.configuration;

@Configuration
@ComponentScan({"com.springMvcAndThymleafExample.Controller"})
@EnableWebMvc
public class DispatcherServlet extends WebMvcConfigurerAdapter {
    @Autowired
    private WebApplicationContext wac;


    @Bean
    public ThymeleafViewResolver getViewResolver() {
        ThymeleafViewResolver vr = new ThymeleafViewResolver();

        vr.setTemplateEngine(getTemplateEngine());

        return vr;
    }

    @Bean
    public SpringTemplateEngine getTemplateEngine() {
        SpringTemplateEngine te = new SpringTemplateEngine();

        te.setTemplateResolver(getTemplateResolver());
        te.setEnableSpringELCompiler(true);

        return te;
    }

    @Bean
    public SpringResourceTemplateResolver getTemplateResolver() {
        SpringResourceTemplateResolver tr = new SpringResourceTemplateResolver();

        tr.setApplicationContext(wac);
        tr.setOrder(1);
        tr.setPrefix("WEB-INF/");
        tr.setSuffix(".html");

        return tr;
    }
}

我的Webinitializer:

package com.springMvcAndThymleafExample.configuration;

public class MyWebinitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] {DispatcherServlet.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        //we dont need this method, so it stays empty
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }

}

我的控制器类:

package com.springMvcAndThymleafExample.Controller;

@Controller
public class IndexController {  
    @RequestMapping(value="", method=RequestMethod.GET)
    public ModelAndView index() { //This is working
        mv.setViewName("templates/index");

        return mv;
    }

    @RequestMapping(value="openChildren", method=RequestMethod.POST)
    public void openChildren(@RequestParam("t1") String t1,
            @RequestParam("t2") String t2) { //This is not working
        System.out.println(t1 + " " + t2);
    }
}

最后是我的HTML文件:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
   <body>
      <form th:action="openChildren">
         <input type="text" name="t1">
         <input type="text" name="t2">
         <input type="submit">
      </form>
   </body>
</html>

这是我在浏览器中遇到的错误:

Error 404: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "ServletContext resource [/WEB-INF/openChildren.html]") 

这是我的日志中的错误:

com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0014E: Uncaught service() exception root cause dispatcher: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "ServletContext resource [/WEB-INF/openChildren.html]")
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1233)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:782)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:481)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1114)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4047)
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1016)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:213)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316)
    at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:88)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1892)
Caused by: org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "ServletContext resource [/WEB-INF/openChildren.html]")
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:235)
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100)
    at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:649)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072)
    at org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:360)
    at org.thymeleaf.spring4.view.ThymeleafView.render(ThymeleafView.java:192)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286)
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    ... 26 more
Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/openChildren.html]
    at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141)
    at org.thymeleaf.spring4.templateresource.SpringResourceTemplateResource.reader(SpringResourceTemplateResource.java:103)
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:223)
    ... 37 more

我希望控制台输出具有我在前端提供的值。

0 个答案:

没有答案