為什麼我直接在servlet裡面直接輸出message不亂碼,而跳轉到web頁面就出現亂碼,而且存到資料庫的也是亂碼,我嘗試了網上的各種方法,還是不成功。。
阿新 • • 發佈:2018-12-20
為什麼我直接在servlet裡面直接輸出message不亂碼,而跳轉到web頁面就出現亂碼,而且存到資料庫的也是亂碼,我嘗試了網上的各種方法,還是不成功。。
public class HandleRegister extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch(Exception e){} } public String handleString(String s) { try{ byte bb[]=s.getBytes("iso-8859-1"); s=new String(bb); } catch(Exception ee){} return s; } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setHeader("content-type","text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); Connection con; PreparedStatement sql; Register reg=new Register(); request.setAttribute("register",reg); String logname=request.getParameter("logname").trim(), password=request.getParameter("password").trim(), sex=request.getParameter("sex").trim(), email=request.getParameter("email").trim(), phone=request.getParameter("phone").trim(), message=request.getParameter("message"); message= new String( message.getBytes("ISO-8859-1"),"gb2312"); out.println(message); sex= new String( sex.getBytes("ISO-8859-1"),"gb2312"); out.println(sex); int age=Integer.parseInt(request.getParameter("age").trim()); String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Student"; if(logname==null) logname=""; if(password==null) password=""; boolean isLD=true; for(int i=0;i<logname.length();i++) { char c=logname.charAt(i); if(!((c<='z'&&c>='a')||(c<='Z'&&c>='A')||(c<='9'&&c>='0'))) isLD=false; } boolean boo=logname.length()>0&&password.length()>0&&isLD; String backNews=""; try{ con=DriverManager.getConnection(uri,"sa","sa"); String insertCondition="INSERT INTO member VALUES (?,?,?,?,?,?,?,?)"; sql=con.prepareStatement(insertCondition); if(boo) { sql.setString(1,handleString(logname)); sql.setString(2,handleString(password)); sql.setString(3,handleString(sex)); sql.setInt(4,age); sql.setString(5,phone); sql.setString(6,email); sql.setString(7,handleString(message)); sql.setString(8,"public.jpg"); int m=sql.executeUpdate(); if(m!=0) { backNews="註冊成功"; reg.setBackNews(backNews); reg.setLogname(logname); reg.setPassword(handleString(password)); reg.setAge(age); reg.setSex(handleString(sex)); reg.setEmail(handleString(email)); reg.setPhone(phone); reg.setMessage(handleString(message)); } } else { backNews="資訊填寫不完整或名字中有非法字元"; reg.setBackNews(backNews); } con.close(); } catch(SQLException exp) { backNews="該會員名已被使用,請您更換名字"+exp; reg.setBackNews(backNews); } RequestDispatcher dispatcher= request.getRequestDispatcher("/ptext/User/showRegisterMess.jsp"); dispatcher.forward(request, response); } public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doPost(request,response); } }
jsp頁面:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>無標題文件</title> <%request.setCharacterEncoding("gb2312");%> </head> <BODY><Font size=2> <CENTER> <FORM action="helpRegister" name=form method="post"> <BR>輸入您的資訊,會員名字必須由字母和數字組成,帶*號項必須填寫。 <table> <tr><td>會員名稱:</td> <td><Input type=text name="logname" >*</td></tr> <tr><td>設定密碼:</td><td><Input type=password name="password">*</td></tr> <tr><td>性別:</td> <td><Input type=radio name="sex" checked="o" value="男">男 <Input type=radio name="sex" value="女">女 </td> </tr> <tr><td>會員年齡:</td><td><Input type=text name="age" value="0"></td></tr> <tr><td>電子郵件:</td><td><Input type=text name="email"></td></tr> <tr><td>聯絡電話:</td><td><Input type=text name="phone"></td></tr> </table> <table> <tr><td>輸入您的個人簡介:</td></tr> <tr> <td><TextArea name="message" Rows="6" Cols="30"></TextArea></td> </tr> <tr><td><Input type=submit name="g" value="提交"></td> </tr> </table> </Form></CENTER> </BODY> </html>
顯示頁面:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>無標題文件</title> <%@ page import="mybean.data.Register"%> <jsp:useBean id="register" type="mybean.data.Register" scope="request" /> </head> <BODY bgcolor=cyan><Font size=2> <CENTER><Font size=4 color=blue > <jsp:getProperty name="register" property="backNews" /> </Font> <Font size=2> <table> <tr><td>註冊的會員名稱:</td><td><jsp:getProperty name="register" property="logname" /></td></tr> <tr><td>註冊的性別:</td> <td><jsp:getProperty name="register" property="sex" /></td></tr> <tr><td>註冊的會員年齡:</td><td><jsp:getProperty name="register" property="age" /></td></tr> <tr><td>註冊的電子郵件:</td><td><jsp:getProperty name="register" property="email" /></td></tr> <tr><td>註冊的聯絡電話:</td><td><jsp:getProperty name="register" property="phone" /></td></tr> </table> <table><tr><td>您輸入的個人簡介:</td></tr> <tr><td><TextArea name="message" Rows="6" Cols="30"> <jsp:getProperty name="register" property="message" /> </TextArea></td> </tr> </table> </FONT></CENTER> </BODY> </html>