1. 程式人生 > >【暑假學習筆記】之——servlet,使用idea寫一個註冊介面並返回註冊成功(解決亂碼問題)的案例

【暑假學習筆記】之——servlet,使用idea寫一個註冊介面並返回註冊成功(解決亂碼問題)的案例

話不多說,我們新建一個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();
    }
}

部署tomcat~

進入的介面是這樣的~

全部輸入以後點選註冊進入:

到這裡,案例就完結了,解決亂碼問題在regServlet.java檔案中的註釋裡有寫三種方法。

順便,如果有的同學遇到在idea中進行修改以後重新進入瀏覽器卻沒有變化這種問題,一定記得清空瀏覽器快取,並重新啟動tomcat!

謝謝你看到這裡!寫作倉促,有疏漏之處還請評論指正,共同探討進步!