当前位置:编程学习 > JAVA >>

我自己写的String类对象的过滤器Fiter不起作用,求大神指点




string 过滤器 --------------------编程问答-------------------- 上代码如下:

package com.minshu.servlet;

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 SurveyServlet extends HttpServlet {

/**
 * 
 */
private static final long serialVersionUID = -906581454692189344L;


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("  <BODY>");

request.setCharacterEncoding("utf-8");

out.println("姓名:"+ request.getParameter("name")+"<br>");
out.println("EMail:"+ request.getParameter("email")+"<br>");
out.println("age"+ request.getParameter("age")+"<br>");
out.println("编程时间:"+ request.getParameter("code")+"<br>");

out.println("操作系统:");
String os[]= request.getParameterValues("os");
out.println("<ul>");
for(int i=0;i<os.length;i++){
out.println("<li>"+os[i]+"</li>");
}
out.println("</ul><br>");

out.println("编程语言:");
String language[]= request.getParameterValues("language");
out.println("<ul>");
for(int i=0;i<language.length;i++){
out.println("<li>"+language[i]+"</li>");
}
out.println("</ul><br>");

out.println(filterHtml((String)request.getParameter("comment"))+"<br>");

out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}

public String filterHtml(String value) {
value=value.replaceAll("$", "$amp;");

value=value.replaceAll("<", "$lt;");
value=value.replaceAll(">", "$gt;");

value=value.replaceAll(" ", "$nbsp;");
value=value.replaceAll("'", "$acute");
value=value.replaceAll("\n", "<br>");
value=value.replaceAll("\"", "$quot;");

return value;

}


} --------------------编程问答-------------------- 加入out.println(filterHtml((String)request.getParameter("comment"))+"<br>");后,报错

--------------------编程问答-------------------- 求大神指点,我的  public String filterHtml(String value) {
value=value.replaceAll("$", "$amp;");

value=value.replaceAll("<", "$lt;");
value=value.replaceAll(">", "$gt;");

value=value.replaceAll(" ", "$nbsp;");
value=value.replaceAll("'", "$acute");
value=value.replaceAll("\n", "<br>");
value=value.replaceAll("\"", "$quot;");

return value;

}


到底错在那里了? --------------------编程问答-------------------- value=value.replaceAll("$", "$amp --------------------编程问答-------------------- $括起来试一下 [$] --------------------编程问答-------------------- 改成\\$ --------------------编程问答-------------------- replaceAll的第一个参数,是一个正则表达式,所以,有些字符是需要转义的
而有的,比如,\n,你可以试试用"$"来代替
除了这些之外,<,>等等的替换,你可以搜一下公共的API --------------------编程问答-------------------- 是不是你的文档是编码是iso-8859-1的格式;建议均改成utf-8,另外如果是tomcat的话,也可通过指定编码格式来完成。可参见服务器端获取get请求数据乱码通过设置Tomcat的server.xml文件中Connector元素的URIEncoding属性为一个支持中文的编码即可解决。 --------------------编程问答-------------------- value=value.replaceAll("$", "$amp;");

value=value.replaceAll("<", "$lt;");
value=value.replaceAll(">", "$gt;");

value=value.replaceAll(" ", "$nbsp;");
value=value.replaceAll("'", "$acute");
value=value.replaceAll("\n", "<br>");
这些都不能这么写,看replaceAll中的方法:
public Matcher appendReplacement(StringBuffer sb, String replacement) {

        // If no match, return error
        if (first < 0)
            throw new IllegalStateException("No match available");

        // Process substitution string to replace group references with groups
        int cursor = 0;
        String s = replacement;
        StringBuffer result = new StringBuffer();

        while (cursor < replacement.length()) {
            char nextChar = replacement.charAt(cursor);
            if (nextChar == '\\') {
                cursor++;
                nextChar = replacement.charAt(cursor);
                result.append(nextChar);
                cursor++;
            } else if (nextChar == '$') {
                // Skip past $
                cursor++;

                // The first number is always a group
                int refNum = (int)replacement.charAt(cursor) - '0';
                if ((refNum < 0)||(refNum > 9))
                    throw new IllegalArgumentException(
                        "Illegal group reference");这里抛出异常了。replaceAll的第二个参数不能以$开头
                cursor++; --------------------编程问答-------------------- replaceAll的第一个参数,是一个正则表达式,所以,有些字符是需要转义的
而有的,比如,\n,你可以试试用"$"来代替
除了这些之外,<,>等等的替换,你可以搜一下公共的API
补充:Java ,  Eclipse
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,