zoukankan      html  css  js  c++  java
  • 项目中遇到的问题及解决办法

    1、中文乱码问题

    通过编写一个类实现Filter(过滤器)接口,重写里面的方法,并在doFilter这个方法里面设置字符编码为utf-8,通过ServletRequest.setCharacterEncoding(”utf-8”)来设置;这里之所以用自定义filter(过滤器)来解决这个问题,是因为过滤器在HttpServletRequest到达Servlet之前,会被拦截下来,只有执行过滤器的doFilter方法才会转到下一个链中,注意,需要在web.xml文件中配置信息来创建Filter实例对象;

    如果这样都还未解决问题的话,可以修改tomcat目录下的config文件目录下的server.xml文件,需要为每个Connector节点加上一个属性:useBodyEncodingForURI=”true”;

    2、表单重复提交问题

    我的做法是在服务器端利用session来防止表单重复提交,具体的做法是:在服务端随机生成一个token,同时在当前用户的Session中保存这个token,然后将token发送到客户端的form表单中,在form表单中使用隐藏域来储存这个token

    <input type=”hidden” name=”token” value=”${token}”/>采用EL表达式来取出这个值;在表单提交的时候,连同这个token一起提交到服务器端,然后再服务器端判断客户端提交上来的token与服务器端生成的token是否一致,如果不一致,则就是重复提交了,此时服务器端不再处理这个重复提交的表单;如果相同则处理表单,并且清除当前用户的Session中的token,这样第二次提交的时候服务器端的token就不存在了;当然还可以用js来处理这个问题,当用户提交之后将提交按钮设置为disabled,使按钮不可以再触发;

    3、数据库中两个表作自然连接(natural join)的时候,如果两个表存在相同名字的字段,比如说A表存在name字段,B表也存在name字段,那么当作A natural join B的时候,如果两个表中的name的内容不相等的时候,则也不会查找出那条内容;所以正确的做法就是将两个表中的name字段分别用a_name,b_name来表示;

    4、做这个项目的时候,有一些功能比如说查看发布的职位是不需要用户登录之后的,而有一些操作比如过投递简历是需要用户登录之后才可以操作的,所以就需要为这些操作做出区别,我使用Spring Web MVC 的拦截器来实现这个功能的,首先对不需要用户登录的方法做出标记,比如说方法名用个后缀,然后在拦截器中判断当前请求的url是否包含这个标记,如果有则直接返回,如果没有则需要拦截下来,判断是否已经登录,只有登录了才可以进行操作,否则跳到登录页面;

    自定义拦截器需要实现HandlerInterceptor,然后重写里面的preHandle,postHandle和afterCompletion方法,之前的那些操作都是在preHandle方法中实现的。注意拦截器需要在springmvc.xml文件中配置

  • 相关阅读:
    Catalan数(卡特兰数)
    100个乘客登机问题
    [设计模式]抽象工厂模式
    栈-队和队-栈
    java实现字符串反转
    java实现字符串按词反转
    windows上安装maven及eclipse中配置maven
    Windows 10 安装 Docker
    Win7操作系统安装IE10提示“安装前需要更新与安装程序版本”
    解决Jenkins权限配置错误,导致登录时出现没有Overall/read权限
  • 原文地址:https://www.cnblogs.com/xulibing/p/5940741.html
Copyright © 2011-2022 走看看