springmvc页面跳转失败问题

SkyIcon 2017-07-11 05:21:49
用springmvc在后台接收页面登录请求在进行跳转时出现问题:

后台controller如下:

@Controller
@RequestMapping("/manager")
public class ManagerController {
@Resource
private IManagerService managerService;

@RequestMapping("/managerLogin")
public String managerLogin(HttpServletRequest request,Model model){
String managerId = request.getParameter("username");
String password = request.getParameter("password");
if(ValidateUtils.isNameRt(managerId)&&ValidateUtils.isPasswordRt(password)){
//密码进行md5码转码
password = ServiceUtils.md5Convert(password.trim());
//进行信息校验
Manager manager = managerService.login(managerId, password);
if(manager!=null){
model.addAttribute("manager", manager);
return "redirect:/WEB-INF/jsp/manageHome.jsp";
}
}
model.addAttribute("loginUri", "/manager/managerLogin");
return "redirect:/WEB-INF/jsp/loginFail.jsp";
}
}

注:我的manageHome.jsp和loginFail.jsp页面需要放在WEB-INF文件夹里面。
根据报错提示现在请求是已经进入成功了,就是找不到/WEB-INF/jsp/manageHome.jsp这个jsp页面。
我的spring-mvc.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 自动注册组件 -->
<mvc:annotation-driven/>

<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
<context:component-scan base-package="com.neusoft.controller" />
<!--避免IE执行AJAX时,返回JSON出现下载文件 -->
<bean id="mappingJackson2HttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJackson2HttpMessageConverter" /> <!-- JSON转换器 -->
</list>
</property>
</bean>
<!-- 定义跳转的文件的前后缀 ,视图模式配置-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

<!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码 -->
<property name="defaultEncoding" value="utf-8" />
<!-- 文件大小最大值 -->
<property name="maxUploadSize" value="10485760000" />
<!-- 内存中的最大值 -->
<property name="maxInMemorySize" value="40960" />
</bean>

<!-- 配置静态资源 -->
<mvc:resources mapping="/pic/**" location="/pic/" />
<mvc:resources mapping="/jquery/**" location="/jquery/" />
<mvc:resources mapping="/jquery-easyui-1.5.2/**" location="/jquery-easyui-1.5.2/" />
</beans>

我的配置文件中有配置视图解析器,加上了前置/WEB-INF/jsp/,和后置.jsp,但是如果在controller中改成
return "redirect:manageHome";的话,spring没有把它解析成/WEB-INF/jsp/manageHome.jsp,页面提示404错误:

这个我不是很清楚了,是不是返回地址前面加上了redirect:前缀呢?但是我的目的就是要进行页面跳转到jsp页面,地址栏要变成jsp页面的地址,而不是处理请求的地址如:manger/managerLogin。
我如果把controller中改成return "manageHome"; 的话,这样是可以实现的,页面可以进入到/WEB-INF/jsp/manageHome.jsp中,但是浏览器地址栏没有变化,感觉像是转发操作,而不是重定向操作,如图:

这个地址没有进行变化,用户刷新一下就又提交了一次表单了。。显然不符合我的要求。
所以现在这个怎么实现跳转页面时地址也要跟着改变,而且页面在WEB-INF文件夹下呢?求大神帮帮忙!!!
而且我也分析了下其它解决思路,思路一:controler中直接用return "manageHome";这样既用到了视图解析器,也能访问WEB-INF下的页面了,然后在想办法将浏览器中的地址修改成想要的地址。
思路二:我在网上查到了spring的Interceptor拦截器,这个拦截器可以进行请求前、请求后的拦截并可以对请求进行处理,我想是不是可以对请求地址进行处理。
以上思路我还没有详细实践,先请大神帮我看看怎么解决这个问题吧!!!谢谢了。
...全文
914 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SkyIcon 2017-07-21
  • 打赏
  • 举报
回复
问题解决了,我把jsp页面放到了根目录下,没有放到/WEB-INF/ 目录下,然后加上了web拦截器对所有jsp请求进行了拦截,符合条件才允许访问。
SkyIcon 2017-07-12
  • 打赏
  • 举报
回复
引用 3 楼 a2361035277 的回复:
你的redirect重定向,不用写web什么什么, 直接写"redirect:/login.html",login写成你的要跳转的html, 你那重定向不能直接return 什么什么jsp。 例如: 你得再弄一个RequestMapping,,比如你要重定向login页面,"redirect:/main.html", @RequestMapping(value="main.html") public String main(HttpSession session){ return "login"; } 这样你返回login,加上前后缀就是login.jsp,比如说你要是用ajax异步,你页面也得这样弄 window.location.href="main.html"; ,而不是直接访问JSP,都得经过这种方式跳,你那是在web—inf下面,不能直接访问,是有安全保护的。
你说的这个思路对我有点启发,我先试试看。谢谢。
SkyIcon 2017-07-12
  • 打赏
  • 举报
回复
引用 1 楼 qq_25543635 的回复:
你注意你的配置文件意见配置了这个东西了
 <!-- 定义跳转的文件的前后缀 ,视图模式配置-->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->  
        <property name="prefix" value="/WEB-INF/jsp/" />  
   <property name="suffix" value=".jsp" />
    </bean>  
其中
 <property name="prefix" value="/WEB-INF/jsp/" />  
这个是说你把文件保存在/WEB-INF/jsp/文件夹下
      <property name="suffix" value=".jsp" />  
这个是从上面那个目录寻找你传来符号路径后缀为.jsp的文件 也就是说你返回
return "manageHome";
就可以了
你说的这个我在说明中的下面已经尝试过了,但是这个是转发的形式不是重定向的形式。
NANU-NANA 2017-07-11
  • 打赏
  • 举报
回复
你给出的是路径,不是文件,所以不用加.jsp
你大爷D 2017-07-11
  • 打赏
  • 举报
回复
你的redirect重定向,不用写web什么什么, 直接写"redirect:/login.html",login写成你的要跳转的html, 你那重定向不能直接return 什么什么jsp。 例如: 你得再弄一个RequestMapping,,比如你要重定向login页面,"redirect:/main.html", @RequestMapping(value="main.html") public String main(HttpSession session){ return "login"; } 这样你返回login,加上前后缀就是login.jsp,比如说你要是用ajax异步,你页面也得这样弄 window.location.href="main.html"; ,而不是直接访问JSP,都得经过这种方式跳,你那是在web—inf下面,不能直接访问,是有安全保护的。
  • 打赏
  • 举报
回复
楼上正解
那年花 2017-07-11
  • 打赏
  • 举报
回复
你注意你的配置文件意见配置了这个东西了
 <!-- 定义跳转的文件的前后缀 ,视图模式配置-->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->  
        <property name="prefix" value="/WEB-INF/jsp/" />  
   <property name="suffix" value=".jsp" />
    </bean>  
其中
 <property name="prefix" value="/WEB-INF/jsp/" />  
这个是说你把文件保存在/WEB-INF/jsp/文件夹下
      <property name="suffix" value=".jsp" />  
这个是从上面那个目录寻找你传来符号路径后缀为.jsp的文件 也就是说你返回
return "manageHome";
就可以了

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧