JSP Not Suppported by UTF-8 Encoding

和自甴很熟 提交于 2019-12-07 10:15:21

问题


When I am trying to display Chinese characters in my JSP page, then it will display junk characters.

What did I do wrong?

I have included the below line to my JSP on the top, and even now, the issue is not getting fixed:

<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page import="java.util.*"%>
<%@ page import="com.hp.sales.om.workflow.c2c.config.model.Organization"%>
<%@ page import="com.hp.sales.om.workflow.c2c.config.model.ClassificationL1"%>
<%@ page import="com.hp.sales.om.workflow.c2c.config.model.ClassificationL2"%>
<%@ page import="com.hp.sales.om.workflow.c2c.config.model.TaskConfig"%>

 <script type="text/javascript" language="javascript"
src="/integration/r5/hpr/js/jquery-1.3.2.js"></script>

<script language="JavaScript">
//Javascript code here...
</script>

<%
String taskId = (String) request.getAttribute("taskId");
if (taskId == null || taskId.trim().equals("")) {
    taskId = ""; 
%>
<jsp:include page="/Header.jsp" />
<%@ taglib uri="http://xmlns.oracle.com/bpel/workflow/worklist-taglib.tld" prefix="worklist"%>
<link rel="stylesheet" type="text/css" href="/integration/r5/hpr/css/homepages-v5.css" />
<%
Map links = new LinkedHashMap();
    links.put("Select Task", request.getContextPath()
            + "/SelectTask");
    String disableCondition = "";
%>

<worklist:navLinks linkMap="<%=links%>" styleClass="customBreadCrumbNav"
separator=" > " prefixHTML="<strong>" suffixHTML="</strong>"
disableConditionBasedOn="<%=disableCondition%>" />
<!-- border table -->
 <TABLE WIDTH="100%" BORDER="0">
 <TR>
     <TD>
        <TABLE WIDTH="100%" BORDER="1">
             <TR>
                        <TD>
                            <%
                                } else {
                             %>
                    <html>
 <head>
 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
 <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Select Task</title>
 </head>
 <body>
<%
    }
%>
<br />
<form STYLE="display: inline;" method="POST" name="SelectTask"
    action="<%=request.getContextPath()%>/SelectTask">

    <input type="hidden" name="method" id="method" value='' /> <input
        type="hidden" name="method" id="method" value='' /> <input
        type="hidden" name="taskId" id="taskId" value='<%=taskId%>' />

    <!-- jQuery Ajax stuff for new way of create task, page not be refresh when choose organization -->
    <script type="text/javascript">
     var servletContextPath = <%=request.getContextPath()%>
        ";"
        $(document)
                .ready(
                        function() {

                            $(window).load(function() {
                                                $.ajax({
                                                            url : servletContextPath
                                                                    + "/OrganizationLoadServlet",
                                                            cache : false,
                                                            beforeSend : function() {
                                                                //alert(this.url == 'myUrl');
                                                                //timeout setting 30second
                                                                ajax_timeout = setTimeout(
                                                                        function() {
                                                                            //alert('Request is taking a long time.');
                                                                                                            },
                                                                        30000);
                                                                //
                                                            },
                                                            success : function(
                                                                    xmlResponse) {
                                                                var count = 0;
                                                                $(xmlResponse)
                                                                        .find('ITEMS')
                                                                        .each(function() {
                                                                                    count++;
                                                                                });
                                                                if (count == 1) {
                                                                    $(xmlResponse).find('ITEMS')
                                                                            .each(function() {
                                                                                                                                });
                                                                    $.ajax({
                                                                                type : "GET",
                                                                                url : servletContextPath
                                                                                        + "/OrganizationProcessHandler",
                                                                                data : {
                                                                                    orgId : $params
                                                                                },
                                                                                cache : false,
                                                                                beforeSend : function() {
                                                                                    ajax_timeout2 = setTimeout(
                                                                                            function() {
                                                },
                                                                                            30000);
                                                                                },
                                                                                success : function(xmlResponse) {
                                        $(xmlResponse).find('ITEMS')
                                                                                            .each(function() {
                                                        });
                                                                                    //timeout calling
                                                                                    if (ajax_timeout2) {
                                                                                        clearTimeout(ajax_timeout2);
                                                                                    }
                                                                                }
                                                                            });

                                                                } else {
                                                                    $(xmlResponse).find('ITEMS')
                                                                            .each(function() {
                                                                                    });
                                                                }
                                                                //timeout calling
                                                                if (ajax_timeout) {
                                                                    clearTimeout(ajax_timeout);
                                                                }
                                                                //
                                                            },
                                                            complete : function() {
                                                                //alert(this.async == true);
                                                            }
                                                        });

                                            });

                            //Business Process choicebox
                            $("#orgId").change(function() {
                                                $.ajax({
                                                            type : "GET",
                                                            url : servletContextPath
                                                                    + "/OrganizationProcessHandler",
                                                            data : {
                                                                orgId : $params
                                                            },
                                                            cache : false,
                                                            beforeSend : function() {
                                                                //alert(this.url == 'myUrl');
                    //timeout setting 30second
                                                                ajax_timeout = setTimeout(
                                                                        function() {
                                                                            //alert('Request is taking a long time.');
                            },
                                                                        30000);
                                                                //
                                                            },
                                                            success : function(xmlResponse) {
                                                                $(xmlResponse).find('ITEMS')
                                                                        .each(function() {
                                                                                                                                                                        });
                                                                //timeout calling
                                                                if (ajax_timeout) {
                                                                    clearTimeout(ajax_timeout);
                                                                }
                                                                //
                                                            },
                                                            complete : function() {
                                                                //alert(this.async == true);
                                                            }
                                                        });

                                            });

                            //Task Group handler
                            $("#processId").change(function() {
                                                if ($processId.length != 0) {
                                                    $.ajax({
                                                                type : "POST",
                                                                url : servletContextPath
                                                                        + "/TaskGroupsForOrgAndProcessHandler",
                                                                data : {
                                                                    orgId : $orgId,
                                                                    processId : $processId
                                                                },
                                                                cache : false,
                                                                beforeSend : function() {
                                                                    //alert(this.url == 'myUrl');
                        //timeout setting 30second
                                                                    ajax_timeout = setTimeout(
                                                                            function() {
                                                                                //alert('Request is taking a long time.');
                                                                            },
                                                                            30000);
                                                                    //
                                                                },
                                                                success : function(xmlResponse) {
                                                                    $(xmlResponse).find('ITEMS')
                                                                            .each(function() {
                                                                                        //alert("Task Group === "+valTxt);
                                                                                        $('<option value="' + valTxt + '">'
                                                                                                        + labelTxt
                                                                                                        + '</option>')
                                                                                                .appendTo("#taskGrpId");
                                                                                    });
                                                                    //timeout calling
                                                                    if (ajax_timeout) {
                                                                        clearTimeout(ajax_timeout);
                                                                    }
                                                                    //

                                                                },
                                                                complete : function() {
                                                                    //alert(this.async == true);
                                                                }
                                                            });
                                                }
                                            });

                            //Task handler
                            $("#taskGrpId").change(function() {
                                                if ($taskGrpId.length != 0) {
                                                    $.ajax({
                                                                type : "POST",
                                                                url : servletContextPath
                                                                        + "/TaskConfigsHandler",
                                                                data : {
                                                                    orgId : $orgId,
                                                                    processId : $processId,
                                                                    taskGrpId : $taskGrpId
                                                                },
                                                                cache : false,
                                                                beforeSend : function() {
                                                                    ajax_timeout = setTimeout(
                                                                            function() {
                                                                                //alert('Request is taking a long time.');
                                                                            },
                                                                            30000);
                                                                    //
                                                                },
                                                                success : function(
                                                                        xmlResponse) {
                        $(xmlResponse).find('ITEMS')
                                                                            .each(function() {
                                                                                                                                                                            });
                                                                    //timeout calling
                                                                    if (ajax_timeout) {
                                                                        clearTimeout(ajax_timeout);
                                                                    }
                                                                    //

                                                                },
                                                                complete : function() {
                                                                    //alert(this.async == true);
                                                                }
                                                            });
                                                }
                                            });

                        });
    </script>
    <!-- endless -->

    <!-- Layer for during do submition -->
    <script type="text/javascript">
        $(document)
                .ready(
                        function() {
                            $("#Save").click(
                                            function() {
                                                var taskConfigId = document
                                                        .getElementById("taskConfigId").value;
                                                if (taskConfigId == null
                                                        || taskConfigId == ''
                                                        || taskConfigId == -4
                                                        || taskConfigId.length == 0) {
                                                    alert('Please select task');
                                                } else {
                                                    getBackToTaskCreationForm();
                                                    //Get the screen height and width
                                                    var maskHeight = $(document).height();
                                                    var maskWidth = $(window).width();

                                                    //alert("taskConfigId== " +taskConfigId);
                                                    //Set heigth and width to mask to fill up the whole screen
                                                    $('#mask').css({
                                                                        'width' : maskWidth,
                                                                        'height' : maskHeight
                                                                    });

                                                    //transition effect     
                                                                                            }
                                            });

                        });
    </script>

    <style>

The code continues below:

    <!-- endless -->

    <table width="100%" border="0" class="HeaderPane" cellpadding=0
        cellspacing=0 height="44" bordercolor="#000000">
        <tr width="100%">
            <td width="100%" class="customContentText"><strong>Organization:</strong>
                <select id="orgId" name="orgId">
                    <option VALUE='-1'>------------ Select Organization
                        ------------</option>
            </select></td>
        </tr>
        <tr width="100%">
            <td width="100%" class="customContentText">
                <p id="loading" style="margin-left: 80px;">
                    <img src="/integration/r5/hpr/images/ajax-loader.gif"
                        alt="loading" /> <br />Please wait....
                </p>
                <p id="done"></p>


                <p id="warning" style="margin-left: 80px;">
                    <img src="img/warnsign.gif" alt="warning" width="16" height="16" />
                    <br />Your request has timed out. Please try again. If this
                    condition continues, please contact your administrator.
                </p>  <br />
            </td>
        </tr>
        <tr width="100%">
            <td width="100%" class="customContentText">
                <table width="100%" align="center" class="HeaderPane" id="table1">
                    -------
                </table>
            </td>
            </form>
    </table>

    <!-- Mask to cover the whole screen -->
    <div id="mask">
        <center>
            <img src="/integration/r5/hpr/images/ajax-loader.gif" alt="loading" />
            <br />
            <font color="White" size="4"> Please wait....</font>
        </center>
    </div>


    <%
        if (taskId == null || taskId.trim().equals("")) {
    %>

                </TD>
            </TR>
        </TABLE>
    </TD>
</TR>
</TABLE>
<jsp:include page="/Footer.jsp" />
<%
        } else {
%>
</body>
</html>
<%
        }
%>

Here's my web.xml file:

<?xml version = '1.0' encoding = 'GBK'?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns  /javaee/web-app_2_5.xsd"
     version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">

</web-app>

Servlet:

public class OrganizationLoadServlet extends HttpServlet {
    private static Logger log = Logger.getLogger(OrganizationLoadServlet.class);

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();

        Organization[] orgs = (Organization[])session.getAttribute(WorklistappConstants.SESS_ATTR_PREFS_ORGANIZATIONS);

        if (orgs == null) {
            orgs = getFilteredOrgs(request);
            session.setAttribute(WorklistappConstants.SESS_ATTR_PREFS_ORGANIZATIONS, orgs);
        }

        log.info("Before: " + response.getCharacterEncoding());//Here I am getting "iso-8859-1"
        StringBuffer sb = new StringBuffer();
        String dislayName = null;
        for (int i = 0; i < orgs.length; i++) {
            Organization org = orgs[i];
            dislayName = org.getOrgDisplayName();

            sb.append("<ITEMS>");
            sb.append("<LABEL><![CDATA[" + dislayName + "]]></LABEL>");
            sb.append("<VALUE><![CDATA[" + org.getOrgId() + "]]></VALUE>");
            sb.append("</ITEMS>");
        }

        response.setContentType("text/xml");
        response.setHeader("Cache-Control", "no-cache");
        response.getWriter().write("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><ITEM>" + sb.toString() + "</ITEM>");
        log.info("After: " + response.getCharacterEncoding());//Here I am getting "iso-8859-1"

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    private Organization[] getFilteredOrgs(HttpServletRequest request) {
    //code
    return orgs;

    }

    private Organization[] filterOrganizationsByUserOrgs(Organization[] orgs, List<Long> userOrgIdList) {
        //code

        return filteredOrgs;
    }

    private List<Long> getUserOrgIdList(String userId) throws Exception {
    //code

        return userOrgIdList;
    }

    private String getUserID(HttpServletRequest request) throws IOException {

    //code
        return wfCtx.getUser();
    }

}

Please see the comments in the Servlet class. If I change iso-8859-1 to utf-8, then I am not able to access the application.

Why is this issue occurring?


回答1:


Try this

  1. After adding your Chinese Character Save your JSP under UTF-8 encoding rather saving it in ISO-8859-1
  2. Try adding this line <%@ page contentType="text/html; charset=UTF-8" %> at your JSP Header

Hope it helps.




回答2:


Have you ever tried to use lang attribute for your page?

Something like this:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xml:lang="zh">




回答3:


The JSP Header that you are using is correct.
But, I think problem might be in the project's encoding setting.
UTF-8 is not default content type in jsp. So you have to change project's text file encoding to utf-8.

I have no Idea in JDeveloper.... But In Eclipse You can change this way.

Right Click In Project --> Properties --> Under Resource(Text File Encoding should be selected in "Inherited from Container(UTF-8)"



回答4:


Here, the problem is with CDATA. In Servlet, we used iso-8859-1 for sending xml response in xml format. When we tried with UTF-8, the response in xml format not being generated. So instead of sending xml response from servlet to jsp, we used to send that response as html format and displayed as html response on jsp page. This helps in fixed my issue.

In Servlet we modified

sb.append("<option value="+org.getOrgId()+">"+dislayName+"</option>");
    response.setContentType("text/html;charset=UTF-8");
    response.setHeader("Cache-Control", "no-cache");

    response.getWriter().write(sb.toString());

JSP

$('#orgId').html("<option value=\'-1\'>------------ Select Organization ------------</option>"+xmlResponse);


来源:https://stackoverflow.com/questions/18824504/jsp-not-suppported-by-utf-8-encoding

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!