用户刷新页面的重复提交数据问题及WEB-INF文件夹相关解析

       问题:对于浏览器提示“您所查找的网页要使用已输入的信息。返回此页可能需要重复已进行的所有操作。是否要继续操作?”,很多程序猿做网页可能会遇到刷新页面时,浏览器刷新时提示上述文字。继续之后浏览器就会再次将上次的请求发送给页面,造成重新刷新页面时数据多次提交的问题



      原因:首先分析服务器中使用的是request.getRequestDispatcher(url).forward(HttpServletRequest,HttpServletResponse);方法,导致url并未刷新,页面在服务器内部就完成了转发过程,导致多次访问访问此url,刷新url时重复提交数据。



      解决方法:可以将原过程jsp-servlet-jsp,转变为jsp-servlet(通过response.sendRedirect(url))-servlet-jsp,在其中新建一个新的servlet,使用第一个servlet处理数据如session,然后重定向到第二个servlet,再转发到最后的jsp页面,(由于中间有一个重定向的过程,url会变成第二个servlet的访问URL,因此刷新不会重复提交数据)



      扩展:可能有些小伙伴听到我上面的解释会好奇为什么这么麻烦要新加一个servlet,我也猜到你们心里可能想的就是使过程变为jsp-srvlert(-重定向)-jsp,因此我要给大家普及一下,在一个web项目中存放在web-root根目录下的jsp页面或者别的配置文件,可以通过浏览器输入相应的url直接访问下载,这是一个很危险的过程,很容易让有心人分析出网站中的一下相关数据,因此项目中jsp文件都是存放在web-root中WEB-INF中的,此文件夹中的文件不能通过浏览中输入相应的url获取到,可以通过src中的servlet文件转发跳转,因此比较安全,这就是为什么上面的过程为什么不用jsp-srvlert(-重定向)-jsp模式,因为根本通过浏览器输入URL是直接访问不到WEB-INF中的文件的!

     如果各位小伙伴有什么更好的想法请告知我!谢谢大家了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将JSP文件放在web-inf文件夹中,是为了保证JSP文件不会被直接访问,只能在服务器端通过转发或包含的方式进行访问。因此,如果您直接访问JSP文件,则会收到404错误。 解决该问题的方法是将JSP文件移动到web应用程序的根目录或放在web-inf文件夹的子文件夹中,并将JSP文件与Web应用程序的其他部分一起访问。 另外,如果您使用的是Spring MVC框架,则应该将JSP文件放在src/main/webapp/WEB-INF/views目录下,并在Controller中配置视图解析器来解析JSP文件。例如: ```java @Configuration @EnableWebMvc @ComponentScan(basePackages = "com.example") public class AppConfig implements WebMvcConfigurer { @Autowired private ApplicationContext applicationContext; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); } @Override public void configureViewResolvers(ViewResolverRegistry registry) { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); viewResolver.setApplicationContext(applicationContext); registry.viewResolver(viewResolver); } } ``` 请注意,这里使用的是InternalResourceViewResolver视图解析器,它将会自动查找/WEB-INF/views/目录下的JSP文件。您也可以使用其他视图解析器,例如ThymeleafViewResolver或FreeMarkerViewResolver。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值