亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

Java Servlet/Jsp多語言解決方案(二)

2024-09-05 00:19:31
字體:
來源:轉載
供稿:網友
我是這么做的,建立一個servlet基類,覆蓋service方法,在調用父類的service方
法前讀取并解析form提交的內容,請看下面的源代碼:
package com.hto.servlet;
import javax.servlet.http.httpservletrequest;
import java.util.*;
/**
* insert the type's description here.
* creation date: (2001-2-4 15:43:46)
* @author: 錢衛春
*/
public class utf8parameterreader {
hashtable pairs = new hashtable();
/**
* utf8parameterreader constructor comment.
*/
public utf8parameterreader(httpservletrequest request) throws java.io.ioexce
ption{
super();
parse(request.getquerystring());
parse(request.getreader().readline());
}
/**
* utf8parameterreader constructor comment.
*/
public utf8parameterreader(httpservletrequest request,string encoding) throw
s java.io.ioexception{
super();
parse(request.getquerystring(),encoding);
parse(request.getreader().readline(),encoding);
}
public static string decode(string s) throws exception {
stringbuffer sb = new stringbuffer();
for(int i=0; i<s.length(); i++) {
char c = s.charat(i);
switch (c) {
case '+':
sb.append(' ');
break;
case '%':
try {
sb.append((char)integer.parseint(
s.substring(i+1,i+3),16));
}
catch (numberformatexception e) {
throw new illegalargumentexception();
}
i += 2;
break;
default:
sb.append(c);
break;
}
}
// undo conversion to external encoding
string result = sb.tostring();
byte[] inputbytes = result.getbytes("8859_1");
return new string(inputbytes,"utf8");
}
public static string decode(string s,string encoding) throws exception {
stringbuffer sb = new stringbuffer();
for(int i=0; i<s.length(); i++) {
char c = s.charat(i);
switch (c) {
case '+':
sb.append(' ');
break;
case '%':
try {
sb.append((char)integer.parseint(
s.substring(i+1,i+3),16));
}
catch (numberformatexception e) {
throw new illegalargumentexception();
}
i += 2;
break;
default:
sb.append(c);
break;
}
}
// undo conversion to external encoding
string result = sb.tostring();
byte[] inputbytes = result.getbytes("8859_1");
return new string(inputbytes,encoding);
}
/**
* insert the method's description here.
* creation date: (2001-2-4 17:30:59)
* @return java.lang.string
* @param name java.lang.string
*/
public string getparameter(string name) {
if (pairs == null || !pairs.containskey(name)) return null;
return (string)(((arraylist) pairs.get(name)).get(0));
}
/**
* insert the method's description here.
* creation date: (2001-2-4 17:28:17)
* @return java.util.enumeration
*/
public enumeration getparameternames() {
if (pairs == null) return null;
return pairs.keys();
}
/**
* insert the method's description here.
* creation date: (2001-2-4 17:33:40)
* @return java.lang.string[]
* @param name java.lang.string
*/
public string[] getparametervalues(string name) {
if (pairs == null || !pairs.containskey(name)) return null;
arraylist al = (arraylist) pairs.get(name);
string[] values = new string[al.size()];
for(int i=0;i<values.length;i++)
values[i] = (string) al.get(i);
return values;
}
/**
* insert the method's description here.
* creation date: (2001-2-4 20:34:37)
* @param urlenc java.lang.string
*/
private void parse(string urlenc) throws java.io.ioexception{
if (urlenc == null) return;
stringtokenizer tok = new stringtokenizer(urlenc,"&");
try{
while (tok.hasmoretokens()){
string apair = tok.nexttoken();
int pos = apair.indexof("=");
string name = null;
string value = null;
if(pos != -1){
name = decode(apair.substring(0,pos));
value = decode(apair.substring(pos+1));
}else{
name = apair;
value = "";
}
if(pairs.containskey(name)){
arraylist values = (arraylist)pairs.get(name);
values.add(value);
}else{
arraylist values = new arraylist();
values.add(value);
pairs.put(name,values);
}
}
}catch(exception e){
throw new java.io.ioexception(e.getmessage());
}
}
/**
* insert the method's description here.
* creation date: (2001-2-4 20:34:37)
* @param urlenc java.lang.string
*/
private void parse(string urlenc,string encoding) throws java.io.ioexception
{
if (urlenc == null) return;
stringtokenizer tok = new stringtokenizer(urlenc,"&");
try{
while (tok.hasmoretokens()){
string apair = tok.nexttoken();
int pos = apair.indexof("=");
string name = null;
string value = null;
if(pos != -1){
name = decode(apair.substring(0,pos),encoding);
value = decode(apair.substring(pos+1),encoding);
}else{
name = apair;
value = "";
}
if(pairs.containskey(name)){
arraylist values = (arraylist)pairs.get(name);
values.add(value);
}else{
arraylist values = new arraylist();
values.add(value);
pairs.put(name,values);
}
}
}catch(exception e){
throw new java.io.ioexception(e.getmessage());
}
}
}
這個類的功能就是讀取并保存form提交的信息,并實現常用的getparameter方法。
package com.hto.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
* insert the type's description here.
* creation date: (2001-2-5 8:28:20)
* @author: 錢衛春
*/
public class utfbaseservlet extends httpservlet {
public static final string params_attr_name = "params_attr_name";
/**
* process incoming http get requests
*
* @param request object that encapsulates the request to the servlet
* @param response object that encapsulates the response from the servlet
*/
public void doget(httpservletrequest request, httpservletresponse response)
throws servletexception, ioexception {
performtask(request, response);
}
/**
* process incoming http post requests
*
* @param request object that encapsulates the request to the servlet
* @param response object that encapsulates the response from the servlet
*/
public void dopost(httpservletrequest request, httpservletresponse response)
throws servletexception, ioexception {
performtask(request, response);
}
/**
* insert the method's description here.
* creation date: (2001-2-5 8:52:43)
* @return int
* @param request javax.servlet.http.httpservletrequest
* @param name java.lang.string
* @param required boolean
* @param defvalue int
*/
public static java.sql.date getdateparameter(httpservletrequest request, str
ing name, boolean required, java.sql.date defvalue) throws servletexception{

string value = getparameter(request,name,required,string.valueof(defvalue));

return java.sql.date.valueof(value);
}
/**
* insert the method's description here.
* creation date: (2001-2-5 8:52:43)
* @return int
* @param request javax.servlet.http.httpservletrequest
* @param name java.lang.string
* @param required boolean
* @param defvalue int
*/
public static double getdoubleparameter(httpservletrequest request, string n
ame, boolean required, double defvalue) throws servletexception{
string value = getparameter(request,name,required,string.valueof(defvalue));

return double.parsedouble(value);
}
/**
* insert the method's description here.
* creation date: (2001-2-5 8:52:43)
* @return int
* @param request javax.servlet.http.httpservletrequest
* @param name java.lang.string
* @param required boolean
* @param defvalue int
*/
public static float getfloatparameter(httpservletrequest request, string nam
e, boolean required, float defvalue) throws servletexception{
string value = getparameter(request,name,required,string.valueof(defvalue));

return float.parsefloat(value);
}
/**
* insert the method's description here.
* creation date: (2001-2-5 8:52:43)
* @return int
* @param request javax.servlet.http.httpservletrequest
* @param name java.lang.string
* @param required boolean
* @param defvalue int
*/
public static int getintparameter(httpservletrequest request, string name, b
oolean required, int defvalue) throws servletexception{
string value = getparameter(request,name,required,string.valueof(defvalue));

return integer.parseint(value);
}
/**
* insert the method's description here.
* creation date: (2001-2-5 8:43:36)
* @return java.lang.string
* @param request javax.servlet.http.httpservletrequest
* @param name java.lang.string
* @param required boolean
* @param defvalue java.lang.string
*/
public static string getparameter(httpservletrequest request, string name, b
oolean required, string defvalue) throws servletexception{
if(request.getattribute(utfbaseservlet.params_attr_name) != null) {
utf8parameterreader params = (utf8parameterreader)request.getattribute(utfba
seservlet.params_attr_name);
if (params.getparameter(name) != null) return params.getparameter(name);
if (required) throw new servletexception("the parameter "+name+" required bu
t not provided!");
else return defvalue;
}else{
if (request.getparameter(name) != null) return request.getparameter(name);
if (required) throw new servletexception("the parameter "+name+" required bu
t not provided!");
else return defvalue;
}
}
/**
* returns the servlet info string.
*/
public string getservletinfo() {
return super.getservletinfo();
}
/**
* insert the method's description here.
* creation date: (2001-2-5 8:52:43)
* @return int
* @param request javax.servlet.http.httpservletrequest
* @param name java.lang.string
* @param required boolean
* @param defvalue int
*/
public static java.sql.timestamp gettimestampparameter(httpservletrequest re
quest, string name, boolean required, java.sql.timestamp defvalue) throws se
rvletexception{
string value = getparameter(request,name,required,string.valueof(defvalue));

return java.sql.timestamp.valueof(value);
}
/**
* initializes the servlet.
*/
public void init() {
// insert code to initialize the servlet here
}
/**
* process incoming requests for information
*
* @param request object that encapsulates the request to the servlet
* @param response object that encapsulates the response from the servlet
*/
public void performtask(httpservletrequest request, httpservletresponse resp
onse) {
try
{
// insert user code from here.
}
catch(throwable theexception)
{
// uncomment the following line when unexpected exceptions
// are occuring to aid in debugging the problem.
//theexception.printstacktrace();
}
}
/**
* insert the method's description here.
* creation date: (2001-2-5 8:31:54)
* @param request javax.servlet.servletrequest
* @param response javax.servlet.servletresponse
* @exception javax.servlet.servletexception the exception description.
* @exception java.io.ioexception the exception description.
*/
public void service(servletrequest request, servletresponse response) throws
javax.servlet.servletexception, java.io.ioexception {
string content = request.getcontenttype();
if(content == null || content != null && content.tolowercase().startswith("a
pplication/x-www-form-urlencoded"))
request.setattribute(params_attr_name,new utf8parameterreader((httpservletre
quest)request));
super.service(request,response);
}
}
  這個就是servlet基類,它覆蓋了父類的service方法,在調用父類service前,創建
了utf8parameterreader對象,其中保存了form中提交的信息。然后把這個對象作為一個
attribute保存到request對象中。然后照樣調用父類的service方法。
  對于繼承這個類的servlet,要注意的是,"標準"getparameter在也不能讀到post的
數據,因為在這之前這個類中已經從servletinputstream中讀出了數據了。所以應該使
用該類中提供的getparameter方法。
  剩下的就是輸出問題了,我們要把輸出的信息,轉為utf8的二進制流輸出。只要我
們設置content-type時指定charset為utf8,然后使用printwriter輸出,那么這些轉換
是自動進行的,servlet中這樣設置:
  response.setcontenttype("text/html;charset=utf8");
jsp中這樣設置:
  <%@ page contenttype="text/html;charset=utf8"%>
  這樣就可以保證輸出是utf8流,客戶端能否顯示,就看客戶端的了。
  對于multipart/form-data的form提交的內容,我也提供一個類用來處理,在這個類
的構造子中可以指定頁面使用的charset,默認還是utf-8,限于篇幅不貼出源碼,如果
感興趣可以mail to:[email protected]和我探討。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲激情视频网| 高清欧美一区二区三区| 欧美成人精品在线视频| 日韩av中文字幕在线| 久久免费高清视频| 尤物九九久久国产精品的特点| 日韩大片免费观看视频播放| 国产亚洲精品激情久久| 亚洲精品美女网站| 成人h片在线播放免费网站| 亚洲日韩中文字幕| 国产精品爱啪在线线免费观看| 欧美视频国产精品| 美女福利视频一区| 日韩av电影手机在线| 日韩在线播放一区| 日韩美女视频中文字幕| 91干在线观看| 久久久成人精品视频| 欧美情侣性视频| 动漫精品一区二区| 亚洲人在线视频| 91a在线视频| 欧美日韩电影在线观看| 日本中文字幕久久看| 日韩欧美高清在线视频| 国产日本欧美一区| 高清欧美性猛交xxxx| 中日韩美女免费视频网站在线观看| 91亚洲精品一区| 欧美激情亚洲自拍| 中文字幕国产亚洲2019| 成人国产精品免费视频| 欧美在线性视频| 精品视频久久久久久久| 亚洲欧美www| 国产精品观看在线亚洲人成网| 亚洲欧美视频在线| 日韩免费观看网站| 亚洲女人天堂色在线7777| 成人中文字幕在线观看| 亚洲缚视频在线观看| 欧美又大又硬又粗bbbbb| 色先锋资源久久综合5566| 2021久久精品国产99国产精品| 日韩专区在线播放| 成人日韩av在线| 91精品国产高清自在线| 在线观看精品自拍私拍| 亚洲成人黄色网址| 精品久久中文字幕久久av| 国产欧美久久一区二区| 日韩精品中文字幕在线观看| 亚洲精品久久久一区二区三区| 久久久www成人免费精品| 日韩av色在线| 亚洲福利视频网| 国产成人精品一区二区三区| 成人性教育视频在线观看| 精品亚洲永久免费精品| 精品香蕉一区二区三区| 色综合亚洲精品激情狠狠| 国产精品爽爽爽| 久久综合伊人77777尤物| 国模精品视频一区二区三区| 亚洲一区二区自拍| 久久视频免费在线播放| 精品色蜜蜜精品视频在线观看| 91亚洲国产成人精品性色| 97超碰国产精品女人人人爽| 91精品久久久久久久久久久| 91久久国产婷婷一区二区| 日本亚洲精品在线观看| 欧美精品电影免费在线观看| 久久国产加勒比精品无码| 日本a级片电影一区二区| 97久久精品人人澡人人爽缅北| 欧洲永久精品大片ww免费漫画| 久热精品视频在线观看| 日韩电视剧在线观看免费网站| 亚洲男人天堂视频| 久久综合亚洲社区| 亚洲国产精久久久久久久| 91在线观看免费高清完整版在线观看| 国产成人97精品免费看片| 国产精品视频xxxx| 中文字幕在线看视频国产欧美| 亚洲色无码播放| 亚洲免费成人av电影| 欧美激情综合色综合啪啪五月| 91精品啪在线观看麻豆免费| 九九精品在线视频| 国产精品草莓在线免费观看| 欧美激情乱人伦一区| 91亚洲va在线va天堂va国| 日韩久久免费视频| 最近2019中文免费高清视频观看www99| 国产欧美日韩免费| 久久精品在线视频| 成人h视频在线| 亚洲天堂男人天堂女人天堂| 亚洲男人av电影| 亚洲精品国产精品国自产观看浪潮| 亚洲伊人久久大香线蕉av| 国产精品一区二区三区久久久| 欧美中文在线免费| 久久久亚洲影院你懂的| 高清在线视频日韩欧美| 亚洲欧美综合另类中字| 久久久精品影院| 国产精品va在线播放| 奇米一区二区三区四区久久| 久久精品视频在线| 久久成人免费视频| 国产在线视频91| 国产精品日韩久久久久| 高清亚洲成在人网站天堂| 欧美中文在线观看国产| 欧美激情一二三| 亚洲成人三级在线| 97香蕉超级碰碰久久免费软件| 亚洲欧美日韩精品久久| 亚洲精品电影网站| 日韩美女免费线视频| 国产精品99久久久久久白浆小说| 欧洲中文字幕国产精品| 亚洲成人三级在线| 欧美一级成年大片在线观看| 欧美日韩一区二区三区| 国产欧美一区二区三区久久人妖| 欧美老女人bb| 日韩精品欧美激情| 欧美精品成人在线| 亚洲色图综合网| 亚洲欧美国产精品久久久久久久| 91精品在线影院| 欧美最猛黑人xxxx黑人猛叫黄| 国产欧美中文字幕| xxx欧美精品| 亚洲无限乱码一二三四麻| 精品国产乱码久久久久久虫虫漫画| 91色在线视频| 欧美成人合集magnet| 国产精品三级美女白浆呻吟| 亚洲xxxxx电影| 97国产精品视频| 久久免费在线观看| 日韩视频免费在线| 国产精品美女www| 午夜精品久久久久久久99热浪潮| 欧美在线亚洲一区| 久久久亚洲影院你懂的| 亚洲欧美一区二区三区四区| 欧美专区国产专区| 欧美性xxxx极品高清hd直播| 久久99久久亚洲国产| 欧美激情在线有限公司| 国产精品日韩av| 欧美麻豆久久久久久中文| 欧美成人亚洲成人日韩成人| 国产成人亚洲综合91精品| 中文字幕视频一区二区在线有码| 亚洲一区二区三区xxx视频| 亚洲男人天堂视频|