到目前为止,我的应用程序中有两个控制器。它们都使用@Controller进行注释,但只有一个具有main函数。当我运行应用程序时,只有具有main函数的类显示在浏览器中。当我转到没有主要功能的类的URL时,我只得到404"未找到"错误。
具有主要功能的类是:
@Controller
@RequestMapping("function")
public class Functions {
@RequestMapping("test")
public String test(){
return "this is a test";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Functions.class, args);
}
}
当我写localhost:8080 / function / test时,这个类工作正常
然而,另一类:
@Controller
@RequestMapping("index")
public class IndexController {
@RequestMapping("/")
public String getHomePage(){
return "index";
}
}
遗憾的是,无效。当我进入浏览器并编写localhost:8080 / index时,我得到了404:not found-error。
似乎只有具有主功能的控制器才被识别。有谁知道该怎么做才能解决这个问题?
答案 0 :(得分:3)
您需要先订购代码:
尽可能多的控制器,但Spring处理这些控制器的方式是下一个
@Controller
@RequestMapping("/mainFirstController")
public class FirstController {
@RequestMapping("/specifcFirstController")
public String getView(){}
}
...
@Controller
@RequestMapping("/mainLogicSecondController")
public class FirstController {
@RequestMapping("/specifcSecondController")
public String getView(){}
}
现在你可以打电话了
http://localhost:8080/mainLogicSecondController/specifcSecondController
或
http://localhost:8080/mainLogicFirstController/specifcFirstController
如果对您的业务逻辑有意义,即使您可以为每个控制器使用相同的请求映射,例如:
/clients/showlist
/users/showlist
我在上一个回复中读到的关于 @ResponseBody 的内容,注释只是在你想要返回 JSON 对象的情况下。
我希望这能更清楚地说明你对Spring MVC的看法
答案 1 :(得分:2)
我认为你应该把SpringApplication的main方法放在另一个类中。然后你可以拥有任意数量的控制器,每个控制器都在一个新类中。
编辑:尝试将@ResponseBody放在这里:
@RequestMapping("/")
@ResponseBody
public String getHomePage(){
return "index";
}
当你使用localhost:8080 / index /时,如果你的控制器工作,你应该在你的页面中看到文本“index”。
答案 2 :(得分:2)
Application类(具有您的main方法)应位于源层次结构中最外层的文件夹中,因为这是组件扫描开始的位置。如果你有任何控制器是控制器以外的任何级别,弹簧将无法在组件扫描期间选择该控制器。
你的src文件夹应该有这样的目录结构
import java.io.*;
class CompileData {
public static void main(String args[]) {
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("one.txt");
答案 3 :(得分:0)
如果您编写spring web MVC,则应将视图解算器配置如下:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd ">
<mvc:resources mapping="/resources/**" location="/resources/" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
在WEB-INF / views / jsp文件夹中,您应该创建一个jsp文件“index.jsp”。
您可以在网站上学习spring mvc:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html
答案 4 :(得分:0)
@RequestMapping是绝对的。
@RestController
@RequestMapping("/past")
public class Past {
@RequestMapping( "/version" )
public ResponseEntity<> version() { return "past"; }
}
@RestController
@RequestMapping("/future")
public class Future {
@RequestMapping( "/version" )
public ResponseEntity<> version() { return "future"; }
}
..所以两个类共同产生两个不同的版本,并返回不同的输出:
/过去/版本
过去
/未来/版本
未来