当前位置: 首页 > news >正文

Servlet过滤字符串的HTML特殊字符

(1)在一些情况下我们在用户输入数据的时候我们要判断一下是否合法,就是要过滤一下用户输入的信息是否含有特殊字符;

(2)直接上代码,以供大家参考学习:

ServletUtilities类:

package com.lc.ch04Biaodanshuju;

import javax.servlet.http.HttpServletRequest;


public class ServletUtilities {
 
  public static String filter(String input) {
    if (!hasSpecialChars(input)) {
      return(input);
    }
    StringBuffer filtered = new StringBuffer(input.length());
    char c;
    for(int i=0; i<input.length(); i++) {
      c = input.charAt(i);
      switch(c) {
        case '<': filtered.append("<"); break;
        case '>': filtered.append(">"); break;
        case '"': filtered.append("""); break;
        case '&': filtered.append("&"); break;
        default: filtered.append(c);
      }
    }
    return(filtered.toString());
  }

  private static boolean hasSpecialChars(String input) {
    boolean flag = false;
    if ((input != null) && (input.length() > 0)) {
      char c;
      for(int i=0; i<input.length(); i++) {
        c = input.charAt(i);
        switch(c) {
          case '<': flag = true; break;
          case '>': flag = true; break;
          case '"': flag = true; break;
          case '&': flag = true; break;
        }
      }
    }
    return(flag);
  }
}


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- 
Front end to BadCodeServlet.

Taken from Core Servlets and JavaServer Pages 2nd Edition
from Prentice Hall and Sun Microsystems Press,
http://www.coreservlets.com/.
(C) 2003 Marty Hall; may be freely used or adapted.
-->
<HTML><HEAD><TITLE>Submit Code Sample</TITLE></HEAD>
<BODY BGCOLOR="#FDF5E6">
<CENTER>
<H1 ALIGN="CENTER">Submit Code Sample</H1>
<FORM ACTION="/servlet/coreservlets.BadCodeServlet">
  Code:<BR>
  <TEXTAREA ROWS="6" COLS="40" NAME="code"></TEXTAREA><P>
  <INPUT TYPE="SUBMIT" VALUE="Submit Code">
</FORM>
</CENTER></BODY></HTML>

package com.lc.ch04Biaodanshuju;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BadCodeServlet extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "Code Sample";
    String docType =
      "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
      "Transitional//EN\">\n";
    out.println(docType +
                "<HTML>\n" +
                "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" +
                "<BODY BGCOLOR=\"#FDF5E6\">\n" +
                "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +
                "<PRE>\n" +
                getCode(request) +
                "</PRE>\n" +
                "Now, wasn't that an interesting sample\n" +
                "of code?\n" +
                "</BODY></HTML>");
  }

  protected String getCode(HttpServletRequest request) {
    return(request.getParameter("code"));
  }
}



相关文章:

  • PHP中print_r、var_export、var_dump区别
  • Jsp/Servlet根据请求参数自动填充Java对象:表单Bean
  • ORACLE 如何定位消耗资源的SQL
  • Servlet/Jsp实现当参数确实或缺失重新显示输入表单
  • Servlet/Jsp实现发送压缩Web页面 Gzip技术
  • Java内存区域与内存溢出
  • 如何删除鼠标右键菜单里的打开按钮
  • Struts2的s:date标签使用详解[转]
  • JSP隐含对象(1)
  • 二级指针的思考
  • JSP隐含对象 request(2)
  • JSP实现网页计算器
  • MySQL汇总数据
  • 如何配置Tomcat的热启动
  • vncserver
  • .pyc 想到的一些问题
  • 08.Android之View事件问题
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • FastReport在线报表设计器工作原理
  • JavaScript函数式编程(一)
  • jquery cookie
  • quasar-framework cnodejs社区
  • React的组件模式
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 大数据与云计算学习:数据分析(二)
  • 构造函数(constructor)与原型链(prototype)关系
  • 判断客户端类型,Android,iOS,PC
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 算法-图和图算法
  • 微信开源mars源码分析1—上层samples分析
  • 我的zsh配置, 2019最新方案
  • 我有几个粽子,和一个故事
  • 硬币翻转问题,区间操作
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (ZT)薛涌:谈贫说富
  • (蓝桥杯每日一题)love
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (四)鸿鹄云架构一服务注册中心
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .net Application的目录
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .ui文件相关
  • /boot 内存空间不够
  • @Autowired和@Resource装配
  • @EnableAsync和@Async开始异步任务支持
  • @Repository 注解
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解