SpringMVC @RestController和@Controller注解下跳转页面的坑

本文探讨了SpringMVC框架中使用@RestController与@Controller注解的区别,前者直接返回数据给请求页面,后者用于页面跳转。并介绍了如何在WEB-INF下设置欢迎页及调整访问方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在SpringMVC中@RestController不需要进行页面的跳转,只返回数据String给请求URL的页面

@RestController
@RequestMapping("/login")
public class LoginController {

    @Autowired
    private LoginService service;

    /*return String to page*/
    @RequestMapping(value="/into",method=RequestMethod.GET)
    public String  sayHello(){
        return "Hello";
    }

    /*return jump to login.jsp*/
    public ModelAndView login() {
        return new ModelAndView("login");
    }
}

@Controller都是return "index";用来进行页面的跳转,瞬间蒙蔽。

@Controller
@RequestMapping("/login")
public class LoginController {

    @Autowired
    private LoginService service;

    @RequestMapping(value="/into",method=RequestMethod.GET)
    public String  sayHello(){
        return "login";
    }
}

 

二、java web 设置欢迎页在WEB-INF下的jsp

1、在web.xml中,将默认

<welcome-file>index.jsp</welcome-file>

改成

<welcome-file>./WEB-INF/jsp/login.jsp</welcome-file>

2、、在web.xml中自建<servlet-mapping>

在index.jsp中修改from action的获取方式:

<form action="<%=request.getContextPath() %>/login" method="post">

访问方式:http://localhost:8080/demo/login.jsp

 

 

### 关于Spring MVC 注解 跳转 页面 生效 当遇到Spring MVC注解跳转页面生效的情况时,可能的原因有多种。一种常见情况是由于视图解析器配置当或者控制器方法返回值设置错误所引起。 对于视图解析器,在使用`forward:` 或 `redirect:`关键字的情况下,需要注意这些操作会使默认的视图解析器失效[^4]。这意味着如果试图通过这种方式来指定目标URL,则会应用任何前缀或后缀规则;因此,应该确保所提供的路径是完全正确的绝对路径或者是相对于Web应用程序上下文根部的相对路径。 另外一个重要方面涉及到控制器内的映射逻辑以及返回的结果字符串。假设当前存在一个简单的控制器用于处理HTTP GET请求并尝试转向至特定HTML/JSP页面: ```java @RequestMapping("/example") public String example() { return "viewName"; // 这里应当匹配实际存在的视图名称 } ``` 若上述代码无法正常工作,可能是由于以下几个因素造成的: - **视图存在**:确认项目中有名为`viewName.(jsp/html)`这样的资源文件存在于预期位置。 - **静态资源配置缺失**:如果是HTML而非JSP模板,默认情况下Spring可能会阻止直接访问位于`/resources`, `/static`, `/public`等目录之外的内容。可以通过调整Spring Security或其他过滤机制允许此类资源被浏览器载。 - **组件扫描范围外**:保证所有的Controller类都在Spring容器能够发现它们的地方,并且已经启用了相应的包扫描功能。 针对提到的具体场景——即能打开JSP却能显示HTML页面的问题,这通常是因为Spring框架对`.html`扩展名做了特殊处理,认为这是一个RESTful风格的服务端点而是客户端渲染所需的静态资产[^2]。为了修正这一点,可以在Spring配置中入如下片段以区分对待这两种类型的请求: ```xml <mvc:view-controller path="/index.html" view-name="index"/> <!-- 或者 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".html" /> </bean> ``` 最后,考虑到模型数据传递的需求,值得注意的是`Model`参数的作用是在每次调用相应的方法之前由Spring MVC实例化一个新的对象传入其中,从而使得开发者能够在响应期间向其添属性以便前端展示[^3]。 #### 示例代码 下面给出一段完整的Java代码示例,演示如何正确地利用Spring MVC实现页面间的导航: ```java @Controller public class ExampleController { @GetMapping("/home") public ModelAndView homePage(ModelAndView modelAndView){ modelAndView.setViewName("home"); modelAndView.addObject("message", "Welcome Home!"); return modelAndView; } @PostMapping("/submitForm") public String submitForm(@RequestParam("data") String data, Model model){ model.addAttribute("formData", data); return "result"; } @RequestMapping(value = "/redirectExample", method = RequestMethod.GET) public String redirectExample(){ return "redirect:/anotherPage"; } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值