java - Spring框架页面方向

标签 java spring-mvc amazon-web-services

背景:我对 Java/Spring 比较陌生,并且继承了一个基于它们构建的项目。我们正在迁移到 AWS Elastic Beanstalk,它更改了 JSON 请求的主页位置:

www.mywebsite.com/myApp/myAppJsonService

至:

www.mywebsite.com/myAppJsonService

效果很好 - JSON 请求中的所有函数(其中大部分)都运行良好。我有另一个页面,它接受老师通过 HTML 表单提交上传的测验并解析数据。用于指向的表单:

www.mywebsite.com/myApp/controllers/importQuiz

所以我把它改为:

www.mywebsite.com/controllers/importQuiz

web.xml 文件具有:

<servlet>
    <servlet-name>SpringDispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:context/Controllers.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>SpringDispatcher</servlet-name>
    <url-pattern>/controllers/*</url-pattern>
</servlet-mapping>

以及对应的Controllers.xml代码:

<bean id="importExamController" class="com.myapp.controllers.ImportExamController">
    <property name="commandClass" value="com.myapp.objects.spring.FileUploadBean"/>
    <property name="myappManager" ref="myappManager"/>
</bean>

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/importExam">importExamController</prop>
            <prop key="/heartbeat">heartBeatController</prop>
        </props>
    </property>
</bean>

按照我的阅读方式,无论 URL 中前面的“myapp”如何,它都应该在 URL 中找到“/controllers/”,查找 Controllers.xml 文件并找到“/importExam”并将其定向到“importExamController”。那并没有发生。显然,我的逻辑有问题,但我似乎找不到它。任何帮助将非常感激。

编辑:

在日志中进行一些挖掘,我发现:

INFO: WSSERVLET14: JAX-WS servlet initializing
Aug 27, 2011 7:21:06 PM com.sun.xml.ws.transport.http.servlet.WSServletDelegate doGet
SEVERE: caught throwable
ClientAbortException:  java.net.SocketException: Broken pipe
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:373)
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:327)
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:396)
    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:385)

这样的情况会持续一段时间。在我看来,这似乎证实了数据正试图发送到错误映射的内容的想法。让我知道这是否意味着其他含义或者只是无关紧要。

最佳答案

首先,您到底为什么要在 URL 中添加 Controller ?其次,您对它应该如何工作有正确的想法,并且您可能对某些未正确配置的内容是正确的。

您确实应该阅读 Spring 3.0+ 中增强的 MVC 功能。使用注释和 mvc 命名空间,您的代码将如下所示(例如):

@Controller
@RequestMapping("importExam")
public class ExamController {

    private final examService;

    @Autowired
    public ExamController(ExamService examService) {
        this.examService = examService;
    }

    @RequestMapping(method=RequestMethod.GET)
    public String getExams(ModelMap model) {
        model.addAttribute("exams", examService.getExams());
        return "exams";
    }

}

你的 Controller 就是:

<mvc:annotation-config/>

加载 Controller 并将请求映射绑定(bind)到url。这也允许使用通配符。上面的 Controller 会将/importExam 的所有 URL 请求连接到此 Controller ,并在基本上下文中处理默认的 GET 方法。您可以添加带有附加请求映射的嵌套方法,这些映射位于/importExam 上下文下。

关于java - Spring框架页面方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7212061/

相关文章:

java - 添加链接到另一个 Activity

java - 为如何在 Java 中比较不同时区的时间而苦恼?

java - Spring 5.x 缺少请求 header "Accept"

java - 如何为@Valid 指定验证组?

amazon-web-services - 一段时间后如何自动终止AWS EMR集群

mongodb - MongoDB Amazon Web Service-是否实际安装了它?

java - 从 list<String> 中的 java 中删除一个值会抛出 java.lang.UnsupportedOperationException

java - Hadoop WordCount 示例问题,我需要进行一些性能调整吗?

spring-mvc - 将 Spring MVC 与 Spring Integration 集成

python - AWS Elastic Beanstalk 健康检查问题