Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Web---演示servlet技術(servlet生命周期),解決中文亂碼問題

Web---演示servlet技術(servlet生命周期),解決中文亂碼問題

編輯:關於Android編程

本節講解決中文亂碼問題的4種方法。
還有更好的方法,也就是用過濾器,這裡就不演示了,博主目前也不會~呼?(^?^*)~過段時間才會學。

servlet生命周期演示:

index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>


FirstServlet.java:

package cn.hncu.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class FirstServlet implements Servlet{


    //只有第一次訪問才會被執行一次,最先執行一次!
    public FirstServlet() {
        System.out.println("1 構造方法被執行..."+this);
    }


    //關閉Tomcat服務器時會執行一次。如果是通過myeclipse關閉的,是不會執行的,因為是直接關閉了java虛擬機。
    //最後執行一次
    @Override
    public void destroy() {
        System.out.println("4 destroy..."+this);
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    //第一次被訪問才執行,在構造方法之後執行一次!
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("2 init..."+this);
        String name = config.getInitParameter("name");
        System.out.println("name:"+name);
    }

    //每次訪問都執行,(第一次)init()後執行
    @Override
    public void service(ServletRequest req, ServletResponse resp)
            throws ServletException, IOException {
        System.out.println("333 servlet"+this);
    }

}

web.xml:



   
  
    index.jsp
  

  
    firstServlet
    cn.hncu.servlet.FirstServlet
    
        name
        Jack
    

  
  
    firstServlet
    /first
  

配置需要初始化的參數:


    name
    Jack

在servlet中:
用config.getInitParameter(“name”);去得到name參數的值。

演示結果:

我們點擊訪問:訪問FirstServlet
看後台的輸出信息:

\

不關閉服務器再去訪問:

\

用myeclipse關閉服務器-因為是直接關閉了java虛擬機,所以不會再運行destroy()方法。也就沒有再輸出。

\

用Tomcat的shutdown.bat關閉服務器:

\

解決中文亂碼問題

index.jsp中增加:


以下演示用戶登錄

姓名:
密碼:

web.xml增加的代碼:

 
    login
    cn.hncu.servlet.LoginServlet     
  

  
    login
    /login   
  

LoginServlet.java:

package cn.hncu.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class LoginServlet implements Servlet{

    @Override
    public void destroy() {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }


    private String charset = null;
    @Override
    public void init(ServletConfig config) throws ServletException {
        //法四:
        charset = config.getInitParameter("character");
    }

    @Override
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
        //解決中文亂碼問題
        //前提:前台頁面必須以post方式提交中文---因為post會設置http協議頭"Content-Type = application/x-www-form-urlencoded",
        //這樣Tomcat才知道這是編碼的字符數據
        //法一:在Tomcat的server.xml中的中添加一個屬性:URLEncoding="utf-8"
        //!!!法一是不可取的,因為Tomcat是公共平台,這個項目只是其中的一個項目,
        //不能把平台看成私有的即最好不要去修改,否則其他項目可能會出現問題


        //法二:把Tomcat解錯的碼還原回來
        //這個方法還行,但如果前台傳輸的很多參數都是中文,那麼我們要對每個參數都要進行這樣還原,顯然比較麻煩。
        //還有,如果以後要改編碼,就得改源代碼,對客戶來說比較麻煩。對程序員也一樣
        //String name = req.getParameter("name");
        //byte bs[] = name.getBytes("iso8859-1");
        //name = new String(bs,"utf-8");
        //System.out.println(name);

        //法三:這種解決方式是比較好的,但有一個缺點:如果以後要改編碼,就得改源代碼,對客戶來說比較麻煩。對程序員也一樣
        //req.setCharacterEncoding("utf-8");
        //String name = req.getParameter("name");

        //法四:其實是在web.xml中把編碼設置成參數,然後在這裡讀取出來,利用“法2”進行設置。以後如果要更改編碼,只要更改web.xml中的相應參數設置就OK了
        req.setCharacterEncoding(charset);


        String name = req.getParameter("name");
        String pwd = req.getParameter("pwd");
        //用name和pwd到後台去訪問數據庫,以驗證該用戶信息是否正確(登錄是否成功)
        //本例不是講解這個,所以省略。

        res.setContentType("text/html;charset=utf-8");//告訴浏覽器,我下面發的內容是什麼格式的東西,什麼編碼的
        String html = "name:"+name+
                "
pwd:"+pwd+
                "";

        PrintWriter out = res.getWriter();
        out.write(html);


        //*******另外一個小知識點:
        //Tomcat項目運行時,加載jar包或類文件的順序:TOMCAT_HOME\lib  --> webapps\項目名\WEB-INF\lib  --> webapps\項目名\WEB-INF\classes目錄下面的類
        //後加載的會覆蓋前面的---即後加載有效-和java相反(父類加載機制)

    }

}

有2個小知識點:

1:
Tomcat項目運行時,加載jar包或類文件的順序:TOMCAT_HOME\lib –> webapps\項目名\WEB-INF\lib –> webapps\項目名\WEB-INF\classes目錄下面的類
後加載的會覆蓋前面的—即後加載有效-和java相反(父類加載機制)

2:


    
     

加這個的位置是web.xml中,
\
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMiBpZD0="演示結果-1">演示結果:

一開始未寫解決中文亂碼時的演示結果:
\

\

後台顯示:

\

用中文亂碼解決時(不把每一種方法的結果都演示出來了)

\

\

\

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved