【暑假學習筆記】之——servlet,使用idea寫一個註冊介面並返回註冊成功(解決亂碼問題)的案例
阿新 • • 發佈:2019-01-30
話不多說,我們新建一個java web + tomcat專案,具體步驟可以參照我的另一篇:
在src目錄下新建web資料夾,在web資料夾下新建regServlet.java檔案。
在與src同級的web目錄下新建register.html檔案。
先來寫register.html裡的內容,也就是註冊介面。程式碼如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>servlet2</title> </head> <body> <!-- 1.完整路徑:localhost:8080/servlet2/reg 2.絕對路徑:格式:/專案名/網名 例項:/srevlet2/reg 3.相對路徑(*):只需寫出目標和當前頁面的相對位置 當前頁面:/servlet2/register.html 訪問目標:/servlet2/reg 二者是平級關係,相對路徑是reg,不能以/開頭 --> <form action="reg" method="host"> <p> 賬號:<input type="text" name="userName"> </p> <p> 密碼:<input type="password" name="passWord"> </p> <p> 性別: <input type="radio" name="sex" value="M">男 <input type="radio" name="sex" value="F">女 </p> <p> 興趣: <input type="checkbox" name="interest" value="sport">運動 <input type="checkbox" name="interest" value="music">音樂 <input type="checkbox" name="interest" value="movie">電影 </p> <p> <input type="submit" value="註冊"> </p> </form> </body> </html>
把所有需要提交的元件都寫在form中,form標籤中的method=“host” 表示這裡
使用HOST來進行請求。
action="reg"表示點選提交以後會跳轉到這個頁面,這裡使用相對路徑。而reg其實是regServlet.java檔案的別名。
別名在web.xml檔案中進行設定,程式碼如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>reg</servlet-name> <servlet-class>web.regServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>reg</servlet-name> <url-pattern>/reg</url-pattern> </servlet-mapping> </web-app>
然後我們來寫regServlet.java檔案,程式碼如下:
package web; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class regServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); //處理請求的一般步驟是: //1.接收引數 String user = req.getParameter("userName"); String pwd = req.getParameter("passWord"); String sex = req.getParameter("sex"); String[] interests = req.getParameterValues("interest"); //處理請求亂碼 //方案一:將亂碼後的字串按照ISO還原再按UTF編碼。不常用 byte[] bs = user.getBytes("ISO8859-1"); user = new String(bs,"utf-8"); //方法二:只對GET有效,在eclipse中:server.xml中65行加URIEncoding="utf-8" //優點:簡單 缺點:只對GET有效 // 在idea中,File->Settings->Editor->File Encodings 把頁面上的三個選項都改成UTF-8 //方法三:只對POST有效,在接收引數前,加req.setCharactorEncoding("UTF-8") //宣告試題內容的編碼為UTF-8 //優點:簡單 缺點:只對POST有效 //2.處理業務 //常規的註冊業務應該儲存這些資料,但本案例重點在於傳參,因此就不存了。 System.out.println(user); System.out.println(pwd); System.out.println(sex); if (interests != null) { for (String i : interests) { System.out.println(i); } } //3.傳送響應,這裡也要對編碼方式進行處理,不然“註冊成功”就會是亂碼 resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); out.println("<p>註冊成功</p>"); out.close(); } }