最近日常項目知識點總結

首先:在Action中接受傳參時,出現亂碼,怎麼解決,且不是actionform所能涉及到的。
window.self.location = "teammgr.do?teamcommand=list&gameid="+ document.teamForm.gameid.options[document.teamForm.gameid.selectedIndex].value+"&school="+document.teamForm.school.options[document.teamForm.school.selectedIndex].value;
時,出現亂碼,怎麼解決?
一般常用 
String school=team.getSchool();
  school=new String(school.getBytes("ISO8859_1"),"gbk");
///////////////////////////////////////
s.getBytes()
這個方法是以系統的默認編碼,來進行這個轉換操作。而在不同的計算機上,這個值可能被設置爲不同。比如,我的座機xp,默認編碼就是gbk。而我的一個服務器,默認編碼就是utf-8。爲了確保你的程序更加可移植,你得認真考慮是否使用s.getBytes()。我建議你明確地指定編碼方式進行轉換。
////////////////////////////////////////
mysql不支持unicode,所以比較麻煩。將connectionString設置成encoding爲gb2312
String connectionString="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=gb2312"

在oracle 中,在把漢字字符串插入數據庫前做如下轉換操作:
String(str.getBytes("ISO8859_1","gb2312"))

////////////////////////////////////////
在JAVA源文件-->JAVAC-->Class-->Java-->getBytes()-->new String()-->顯示的過程中,每一步都有編碼的轉換過程,這個過程總是存在的,只是有的時候用默認的參數進行。
///////////////////////////////////////
需要說明的是,JAVAC是以系統默認編碼讀入源文件,然後按UNICODE進行編碼的。在JAVA運行的時候,JAVA也是採用UNICODE編碼的,並且默認輸入和輸出的都是操作系統的默認編碼,也就是說在new String(bytes,[encode])中,系統認爲輸入的是編碼爲encode的字節流,換句話說,如果按encode來翻譯bytes才能得到正確的結果,這個結果最後要在JAVA中保存,它還是要從這個encode轉換成Unicode,也就是說有bytes-->encode字符-->Unicode字符的轉換;而在String.getBytes([encode])中,系統要做一個Unicode字符-->encode字符-->bytes的轉換。
////////////////////////////////////////
實驗測試:
'中文'.getBytes()=[B@cf2c80
'中文'.getBytes('GB2312')=[B@19f953d
'中文'.getBytes('ISO8859_1')=[B@e48e1b
new String('中文'.getBytes())=中文
new String('中文'.getBytes(),'GB2312')=中文
new String('中文'.getBytes(),'ISO8859_1')=????
new String('中文'.getBytes('GB2312'))=中文
new String('中文'.getBytes('GB2312'),'GB2312')=中文
new String('中文'.getBytes('GB2312'),'ISO8859_1')=????
new String('中文'.getBytes('ISO8859_1'))=??
new String('中文'.getBytes('ISO8859_1'),'GB2312')=??
new String('中文'.getBytes('ISO8859_1'),'ISO8859_1')=??
////////////////////////////////////////

new String(str.getBytes(“ISO-8859-1″),”GBK”)爲什麼
Tomcat默認全部都是用ISO-8859-1編碼,不管你頁面用什麼顯示,Tomcat最終還是會替你將所有字符轉做ISO-8859-1.那麼,當在另目標頁面再用GBK翻譯時就會將本來錯的編碼翻譯成GBK的編碼,這時的文字會亂碼.


所以需要先將得到”字符”(不管是什麼)都先用字節數組表示,且使用ISO-8859-1進行翻譯,得到一個在ISO-8859-1編碼環境下的字節數組.例如:AB表示成[64,65].然後再用GBK編碼這個數組,並翻譯成一個字符串.


那麼我們可以得到一個編碼轉換的過程
假設:GBK碼(“你”)->URLencode後變成->(%3F%2F)->Tomcat自動替你轉一次ISO- 8859-1->得到( 23 43 68 23 42 68 每一個符號表示爲ISO-8859-1中的一個編碼)->接收頁面—>再轉一次爲ISO-8859-1的Byte數組 [23,43,68,23,42,68]—>用GBK再轉爲可讀的文字—>(%3F%2F”—->轉爲(“你”)

////////////////////////////////////////
StringBuffer是可變的,String是不可變的。前者效率更高,前者賦值用append()而後者是可以直接用字符串賦值,也可以new。

////////////////////////////////////////
actionForm 不僅僅採集表單上的數據,而且還會採集url中的相應的信息數據。用到struts開發時,在寫Action類時,一般要繼承父類DispatchAction,這樣就會減少Action的類。
////////////////////////////////////////
像在登陸界面,有好多驗證,輸入信息時,點擊登錄按鈕,一般會彈出JavaScript框,顯示一些登錄是否成功的信息。然後自動進入下一個頁面,若成功頁面,若失敗頁面。
這怎麼實現呢?
如果有用到struts時,Action
 if(!yzm.equals(request.getSession().getAttribute("rand"))){
   request.setAttribute("mes", "驗證碼輸入錯誤!");
    request.setAttribute("url", "login.jsp");
  }
if("1".equals(utype)){
           request.setAttribute("url", "admin/index.html");
          }
         else{
          request.setAttribute("url", "User/UserIndex.jsp");
         }
////////////////////////////////////////轉向的頁面的:
<c:if test="${empty url}">
<c:set var="url" value="login.jsp"></c:set>
</c:if>
<c:if test="${!empty mes}">
  <script>alert('${mes}');</script>
 
</c:if>

  <script> window.location.href="${url}"; ;</script>
////////////////////////////////////////

下面講一下過濾器的利用:
怎麼利用過濾器呢?
首先,用戶和管理員登陸成功後,會在session中記錄相應得用戶名,用戶類型,這裏主要識別用戶的類型,同時爲了過濾器的設置做準備。
////////////////////////////////////////
所有過濾器都必須實現javax.servlet.Filter
這個接口包含三個方法,分別爲doFilter、init和destroy
////////////////////////////////////////
針對管理員的操作的過濾器。
public class CheckAdmin implements javax.servlet.Filter
///////////////////////////////////////
public void destroy() {
  config = null;

 }

 public void init(FilterConfig filterconfig) throws ServletException {
  // 從部署描述符中獲取登錄頁面和首頁的URI
  config = filterconfig;
  }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) {
  HttpServletRequest req = (HttpServletRequest) request;
  HttpServletResponse rpo = (HttpServletResponse) response;
  javax.servlet.http.HttpSession session = req.getSession();

  String username = (String) session.getAttribute("uname");
  String utype = (String) session.getAttribute("utype");
   try {
   if ( username == null||utype==null||username.equals("")||!utype.equals("1")) {
    rpo.sendRedirect("../login.jsp");
    //System.out.print(home_page + logon_page);
    return;
   }

   else {
    chain.doFilter(request, response);
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
////////////////////////////////////////
對應的web.xml文件的配置:
 <filter>
    <filter-name>checkAdmin</filter-name>
    <filter-class>com.utils.CheckAdmin</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>checkAdmin</filter-name>
    <url-pattern>/admin/*</url-pattern>
  </filter-mapping>
////////////////////////////////////////凡是訪問文件夾admin裏面的文件都會接受過濾器的審覈。
////////////////////////////////////////
1. <bean:resouce>標籤:如果需要將文件內容作爲一個變量放入到內存中時,可以使用<bean:resource>標記,標記有兩個必須屬性:id(變量名)和name(文件路徑);
如果你選擇input屬性,並提供值,id參數將指向一個InputStream對象,而不是包含文件不是包含內容的字符串.


--------------------------------------------------------------------------------
2. <bean:inlcude>標籤:與<jsp:include>標記基本相同,都是把被包含的文件先執行,再包含;
    區別在於: <jsp:include>直接把包含的文件顯示到頁面上,<bean:include>標記是把內容保存到一個局部變量中,然後再處理。
   <bean:include>常用屬性爲 id和forward、page、href三者之一。
使用這個標記可以包含外部服務器的獲取XML到本地處理。
例如:  <bean:include id="dotareplay" page="/index.do?action=dotareplay" />
 <bean:write name="dotareplay" filter="false" />  //這裏是顯示輸出的必須有,且上面的id值要和下面的name相同。
////////////////////////////////////////
從一個頁面彈出固定大小的窗口,怎麼實現呢?
首先在觸發事件的頁面加入
<script type="text/javascript">
 
 function openbag(url) {
   // alert(url);
     window.open(url,"","height=520,width=520,left=190,top=10,resizable=yes,scrollbars=yes,status=no,toolbar=no,menubar=no,location=no");
  
   }
 
</script>、
在連接的地方,加入
<a href='#' οnclick="openbag('../admin/videomgr.do?method=showHero')" title='查看列表'>查看名稱</a></td>
連接顯示的字段是:查看名稱

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章