原dev2dev的WebLogic General精華貼總結

 

 

 

WebLogic General精華貼總結

 

總結人:周小超(dev2dev ID:supine)

 

1.    怎樣獲得jsp頁面的物理路徑

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=17881&tstart=75

在一個web服務器上,虛擬路徑將物理上分離的各文件組合在一起,放在同一個站點路徑上,在應用服務器上,每個應用定位於其自己的虛擬路徑上,實際上相互之間有着完美地分離。

getRealPath()
方法
JSP servlet API
提供了getRealPath(path)方法,返回給定虛擬路徑的真實路徑,如果轉換錯誤,則返回null

getRealPath
語法定義:
  public java.lang.String getRealPath(java.lang.String path)
  返回一個字符串,包含一個給定虛擬路徑的真實路徑。例如,虛擬路徑 "/index.html"
不管在服務器文件系統上具有怎樣的真實路徑,使用"/index.html"總可以找到它。返回的真實路徑使用了相近於servlet容器(srvlet container)所在計算機或操作系統的格式,包含了適當的路徑分隔符。如果servlet容器無法轉換則這個方法將返回null
  參數:
    path -一個描述了虛擬路徑的字符串
  返回值:
    描述真實路徑的字符串或者null

遺憾的是,getRealPath常常返回不同的東西,這取決於服務器或jsp文件調用此方法的路徑位置。

一個example站點


假設我們的站點組織如下:


根路徑包含了我們的站點的根: http://address/
a_virtual
目錄包含了我們站點提供的虛擬路徑的文件,例如:
http://addess/virtual_dir/

我們查找file1.txtfile2.txt的真實路徑,它們一個在站點根路徑下,一個在虛擬路徑下。

getRealPath("/file1.txt")
應該返回“C:/site/site_root/file1.txt"
getRealPath("/virtual_dir/file2.txt")
應該返回"C:/site/a_virtual/file2.txt"
getRealPath("/file3.txt")
應該返回null,因爲這個文件不存在。

getRealPath()並不總是返回同樣的結果,這還取決與你使用的js引擎。

 

2.    weblogic8.0中如何讓weblogic起動成功以後,執行一個類的方法,是自動執行的

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=15889&tstart=125

可以配置startup後執行的類.
參考:http://e-docs.bea.com/wls/docs81/ConsoleHelp/startup_shutdown.html

或者是自動啓動servlet

 

3.    特殊servlet映射方法的問題

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=15554&tstart=125

Q:weblogic8.1文檔中有關於內置的ClasspathServlet映射的問題,文檔中說這個servlet是默認打開的,並且將所有有關classes/模式的訪問映射到系統類路徑和WEB-INF/classes下,我的web應用名稱是myweb.war裏面有一個類org.aaa編譯好後放在WEB-INF/classes下面,部署應用,用以下url訪問該類
http://MyIP:Port/myweb/classes/org/aaa.class
總是提示404file not found
請問這是怎麼回事?我看了我的config.xml文件server標籤中的ClasspathServletDisabled="false"屬性已經設置了,請問各位大蝦,這個系統類路徑的映射servlet應該怎樣配置纔對,訪問類時的瀏覽器中的url應該如何構建?

A:   <servlet>
    <servlet-name>ClasspathServlet</servlet-name>
    <servlet-class>weblogic.servlet.ClasspathServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ClasspathServlet</servlet-name>
    <url-pattern>/classes/*</url-pattern>
  </servlet-mapping>

 

4.    weblogic的管理員密碼忘記了?

 
文章內容:
1.
備份當前domainconfig.xmlfileRealm.propertiesSerializedSystemIni.dat
2.
新建一個叫fileRealm.properties.src的文件,其內容爲:user.system=weblogic ,其中weblogic就是您想要的明文的密碼
3.
打開dos窗口/控制檯,cd到當前domain的目錄,調用setEnv腳本設置相關的環境變量,然後執行:
java weblogic.security.acl.internal.FileRealm fileRealm.properties SerializedSystemIni.dat
4.
將原來的fileRealm.propertiesaclgroup相關的條目拷回到新生成的fileRealm.properties裏邊
5.
config.xml裏邊加密過的密碼(以{3DES}開頭)改成明文的。
6.
啓動weblogic

 

5.    一些weblogic的視頻講座資料!

http://www.bea.com.cn/services/custsupp/csnewsevents/csnews/support_news_news_05.jsp

 

6.    weblogic7.0上開發webservice的問題

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=10574&tstart=200

在用weblogic7.0開發webservice應用時,遇到了幾個問題,具體情況是:
  Q:1)
我在webservice的方法中返回值爲ArrayList,且ArrayList中若包含一些自定義類型,如javabean時,部署完成後,從確省的訪問頁執行此方法,出現下列錯誤信息:
  javax.xml.soap.SOAPException: failed to deserialize xml:weblogic.xml.schema.binding.DeserializationException: mapping lookup failure. type=['http://www.w3.org/2001/XMLSchema']:anyType schema context=TypedSchemaContext{javaType=javax.xml.soap.SOAPElement}

注:但是若單獨返回這個javabean沒有問題
 
  2
)另外,如果返回的數據對象中包含中文數據的話,也會出現錯誤,具體信息如下:javax.xml.rpc.soap.SOAPFaultException: Error reading the response from: http://192.0.2.211:7001/basic_javaclass/HelloWorld. Please ensure that this is a valid SOAP response

A: 1.你的ArrayList中需要用
/**
* @common:operation
* @jws:return-xml include-java-types="CustomBean"
*/
引用一下.這樣weblogic在遇到你的bean,知道如何解析成xml.

7.    怎樣才能把weblogic成功的配置成服務?

注意installService.cmd文件中的這句話:echo Usage: installService.cmd [WLS_USER] [WLS_PW]
在命令行下執行完後,會提示你beasvc web_webso installed.
說明已經安裝成功.

然後在services.msc就可以看到你的beasvc DOMAIN_NAME&SERVER_NAME 的名稱了,點擊運行,會自動運行你定義的domain.(沒有顯示). 稍等一會,等你的beasvc.exe進程穩定後,weblogic server啓動完畢,你就可以通過控制檯去管理了.

如果只是在資源管理器中雙擊installService.cmd,那麼屏幕將一閃而過,其實,是提示你installService的用法是installService.cmd [WLS_USER] [WLS_PW]. :)

所以,要想安裝service成功,兩中方法:1.config嚮導 2.cmd下運行installService.cmd

順便提及一下卸載,可以直接在資源管理器中雙擊uninstallService.cmd,該命令沒有參數 :-)

 

8.    讀書筆記 關於ClassLoader

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=9471&tstart=325

瞭解ClassLoader
1
   什麼是 ClassLoader?
    Java
程序並不是一個可執行文件,是需要的時候,才把裝載到 JVM中。ClassLoader 做的工作就是 JVM 中將類裝入內存。 而且,Java ClassLoader 就是用 Java 語言編寫的。這意味着您可以創建自己的 ClassLoader
    ClassLoader
的基本目標是對類的請求提供服務。當 JVM 需要使用類時,它根據名稱向 ClassLoader 請求這個類,然後 ClassLoader 試圖返回一個表示這個類的 Class 對象。 通過覆蓋對應於這個過程不同階段的方法,可以創建定製的 ClassLoader
2
一些重要的方法
A) 
方法 loadClass
        ClassLoader.loadClass()
ClassLoader 的入口點。該方法的定義如下:
        Class loadClass( String name, boolean resolve );
         name  JVM
需要的類的名稱,如 Foo java.lang.Object
         resolve
參數告訴方法是否需要解析類。在準備執行類之前,應考慮類解析。並不總是需要解析。如果 JVM 只需要知道該類是否存在或找出該類的超類,那麼就不需要解析。
    
    B) 
方法 defineClass
       defineClass
方法是 ClassLoader 的主要訣竅。該方法接受由原始字節組成的數組並把它轉換成 Class 對象。原始數組包含如從文件系統或網絡裝入的數據。defineClass 管理 JVM 的許多複雜、神祕和倚賴於實現的方面 -- 它把字節碼分析成運行時數據結構、校驗有效性等等。不必擔心,您無需親自編寫它。事實上,即使您想要這麼做也不能覆蓋它,因爲它已被標記成final的。

    C) 
方法 findSystemClass
       findSystemClass
方法從本地文件系統裝入文件。它在本地文件系統中尋找類文件,如果存在,就使用 defineClass 將原始字節轉換成 Class 對象,以將該文件轉換成類。當運行 Java 應用程序時,這是 JVM 正常裝入類的缺省機制。(Java 2 ClassLoader 的變動提供了關於 Java 版本 1.2 這個過程變動的詳細信息。) 對於定製的 ClassLoader,只有在嘗試其它方法裝入類之後,再使用 findSystemClass。原因很簡單:ClassLoader 是負責執行裝入類的特殊步驟,不是負責所有類。例如,即使 ClassLoader 從遠程的 Web 站點裝入了某些類,仍然需要在本地機器上裝入大量的基本 Java 庫。而這些類不是我們所關心的,所以要 JVM 以缺省方式裝入它們:從本地文件系統。這就是 findSystemClass 的用途。

     D)
方法 resolveClass
  
正如前面所提到的,可以不完全地(不帶解析)裝入類,也可以完全地(帶解析)裝入類。當編寫我們自己的 loadClass 時,可以調用 resolveClass,這取決於 loadClass resolve 參數的值。


   E)
方法 findLoadedClass
      findLoadedClass
充當一個緩存:當請求 loadClass 裝入類時,它調用該方法來查看 ClassLoader 是否已裝入這個類,這樣可以避免重新裝入已存在類所造成的麻煩。應首先調用該方法。

3
怎麼組裝這些方法
  1
調用 findLoadedClass 來查看是否存在已裝入的類。
  2
如果沒有,那麼採用那種特殊的神奇方式來獲取原始字節。
  3
如果已有原始字節,調用 defineClass 將它們轉換成 Class 對象。
  4
如果沒有原始字節,然後調用 findSystemClass 查看是否從本地文件系統獲取類。
  5
如果 resolve 參數是 true,那麼調用 resolveClass 解析 Class 對象。
  6
如果還沒有類,返回 ClassNotFoundException

4
Java 2 ClassLoader 的變動
1
loadClass 的缺省實現
  
定製編寫的 loadClass 方法一般嘗試幾種方式來裝入所請求的類,如果您編寫許多類,會發現一次次地在相同的、很複雜的方法上編寫變量。 Java 1.2 loadClass 的實現嵌入了大多數查找類的一般方法,並使您通過覆蓋 findClass 方法來定製它,在適當的時候 findClass 會調用 loadClass 這種方式的好處是您可能不一定要覆蓋 loadClass;只要覆蓋 findClass 就行了,這減少了工作量。

2
)新方法:findClass
     loadClass
的缺省實現調用這個新方法。findClass 的用途包含您的 ClassLoader 的所有特殊代碼,而無需要複製其它代碼(例如,當專門的方法失敗時,調用系統 ClassLoader)。

3
新方法:getSystemClassLoader
    
如果覆蓋 findClass loadClassgetSystemClassLoader 使您能以實際 ClassLoader 對象來訪問系統 ClassLoader(而不是固定的從 findSystemClass 調用它)。
 
4
新方法:getParent 
   
爲了將類請求委託給父代 ClassLoader,這個新方法允許 ClassLoader 獲取它的父代 ClassLoader。當使用特殊方法,定製的 ClassLoader 不能找到類時,可以使用這種方法。
父代 ClassLoader 被定義成創建該 ClassLoader 所包含代碼的對象的 ClassLoader

 

9.    weblogic中如何建立自己的虛擬目錄

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=9715&tstart=325

可以針對web app設置虛擬目錄,在weblogicxml中加入下面的配置。

例如:
<virtual-directory-mapping>
     <local-path>c:/webcrmdata/import</local-path>
     <url-pattern>/import/</url-pattern>
  </virtual-directory-mapping>

 

10. 如何修改weblogic7console的登陸密碼

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=7482&tstart=350

systemsecurity登錄進去後,
依次展開yourdomain --> security --> realms --> myrealm,
點擊users --> 點擊右邊的system即可看到修改口令選項。

 

11. weblogic  server 中的安全區有兩種類型:RDBMS安全區和文件安全區,哪個高手知道如何配置RDBMS安全區

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=5932&tstart=425

http://dev2dev.bea.com/codelibrary/code/sec_rdbms.jsp

What It Does
This is working example that builds a new security authenticator, populates a database with sample data, modifies the domain to add the new authenticator, change the ControlFlags for the DefaultAuthenticator and new Authenticator, and then copies a sample Web application to use to show how FORM based security works with the new Authenticator.
How It Works
Once you install and run the code, the following occurs:
A new authenticator named DbSampleAuthenticator is created
The ControlFlag for the DefaultAuthenticator changes from Required to Sufficient
The ControlFlag for the DbSampleAuthenticator changes from Required to Sufficient
The realm property to DbSampleAuthenticator is added

 

12. WebLogic Server中的ClassPath設置問題

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=6367&tstart=425

Q: 請教:本人想在wls中配置sql server的連接池,但報該driverclasspath中找不到,我的jdbc driver for ms sql server是配置在本機的classpath中的,但我想wls肯定是使用了自己的classpath,所以我想請問一下怎麼在wlsclasspath中加上自己的類路徑?
先謝了.

A:打開你的startweblogic.bat文件,找到classpath項,在後面加上你的jar就行了。

 

13. class file has wrong version是怎麼回事?

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=5804&tstart=450

Q:我用的WEBLOGIC7.0SP1,部署webapp後運行,出現下面的錯誤:

Compilation of 'D:/WorkSpace/ccrm/j2src/jsp_servlet/_purveiw_jsp/__workgroupmain.java' failed:
--------------------------------------------------------------------------------
D:/WorkSpace/ccrm/j2src/jsp_servlet/_purveiw_jsp/__workgroupmain.java:19: cannot access com.torch.crm.purview.model.WorkGroupVO
probably occurred due to an error in /Purveiw_jsp/workGroupMain.jsp line 14:
<%@ page import="com.torch.crm.purview.model.WorkGroupVO" %>

--------------------------------------------------------------------------------
Full compiler error(s):
D:/WorkSpace/ccrm/j2src/jsp_servlet/_purveiw_jsp/__workgroupmain.java:19: cannot access com.torch.crm.purview.model.WorkGroupVO
bad class file: C:/bea/user_projects/mydomain/./myserver/.wlnotdelete/_appsdir_webapp_war_webapp_1896635/jarfiles/cls64915.jar(com/torch/crm/purview/model/WorkGroupVO.class)
class file has wrong version 48.0, should be 47.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
import com.torch.crm.purview.model.WorkGroupVO; //[ /Purveiw_jsp/workGroupMain.jsp; Line: 14]
                                   ^
1 error

此外,我想問一下,在StartWLS.cmd文件中的set JAVA_HOME有什麼用?它默認的是1.3,但是我機子裏用的是1.4,我把這個變量改成1.4後,weblogic就不能用了(出現錯誤)。爲什麼14就不能用了呢?

 

A: 出現這個問題,很可能就是修改了weblogicJDK版本。1.4編譯的程序在1.3下運行就會出現這種錯誤.

 

14. Linux下找到Weblogic監聽的Port

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=4791&tstart=475

 

不管多少個weblogic運行,他們總要監聽端口的。用下邊這個命令,就可以搜出所有的WLS監聽的斷口。:)。希望有用。
當然,通過這個也可以確定wls正常啓動了。^_^

建議把這個作成一個shell,放入path中,就沒有那麼麻煩了:)。
最好用root權限執行,一行命令下來:
for x in `ps -af|grep 'bea'|gawk '{print $2}'`; do netstat -apn |grep $x|grep tcp;done

希望對大家有用。大家一起來支持Linux
shell
文件:
#!/bin/bash
for x in `ps -af|grep 'bea'|gawk '{print $2}'`; do netstat -apn |grep $x|grep tcp;done

 

15. 關於用weblogic發佈程序後,頁面中wordexcel等文檔下載連接的問題

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=4671&tstart=475

 

Q:weblogic 6.1發佈一個web應用程序,提供word上傳及下載,但是當
點擊下載的鏈接時,不像我們正常在網站點擊一個文件鏈接,會彈出一個
提示框,詢問保存到本地磁盤還是在當前位置打開;而是會自動在瀏覽器裏
打開這個文檔,而且Ie自動打開這個文檔時,默認的按html去解釋,導致整個文檔在IE
中都是
亂碼。而我用tomcat發佈,就會彈出提示框。請問是不是weblogic要進行什麼配置以後
纔會
彈出提示框。如果是,請問如何配置?

另外,我在web.xml中加入如下代碼(以word文檔爲例):
<mime-mapping>
    <extension>doc</extension>
    <mime-type>application/msword</mime-type>
  </mime-mapping>
或者如下代碼:
<mime-mapping>
    <extension>doc</extension>
    <mime-type>application/octet-stream</mime-type>
  </mime-mapping>
沒有任何效果。

A:
WEB.XML文件里加入
<mime-mapping>
<extension>doc</extension>
<mime-type>application/self-define</mime-type>
</mime-mapping>

就可以出現提示下載框了.

“application/self-define“
不需要修改,因爲註冊表裏沒有對應的application/self-define內容.

 

16. 如何在Weblogic中用編徎的方法增加一個用戶

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=126&threadID=82&tstart=525

下面是個添加用戶的例子
具體的你可以看看我也有個帖子就在本頁
import java.util.*;
import javax.management.*;
import weblogic.management.*;
import weblogic.security.providers.authentication.*;
import weblogic.management.security.authentication.AuthenticationProviderMBean;
import weblogic.management.security.authentication.*;

public class test2
{
public static void main(String[] args )
{

MBeanHome adminHome;
String url = "t3://127.0.0.1:7001" ;


adminHome = (MBeanHome)Helper.getAdminMBeanHome("username","password",url);

AuthenticationProviderMBean[] providers = adminHome.getActiveDomain().getSecurityConfiguration().findDefaultRealm().getAuthenticationProviders();

for (int i=0; providers != null && i <providers.length; i++)
{
if (providers instanceof UserEditorMBean)
{
UserEditorMBean editor = (UserEditorMBean)providers;
try
{
editor.createUser("username","password","description");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
}

 

jsp原碼:
<%@page import="java.util.*,javax.management.*,weblogic.management.*,weblogic.security.providers.authentication.*,weblogic.management.security.authentication.AuthenticationProviderMBean,weblogic.management.security.authentication.*"%>
<%
MBeanHome adminHome;
String url = "t3://172.30.94.60:7001" ;


adminHome = (MBeanHome)Helper.getAdminMBeanHome("username","password",url);

AuthenticationProviderMBean[] providers = adminHome.getActiveDomain().getSecurityConfiguration().findDefaultRealm().getAuthenticationProviders();

for (int i=0; providers != null && i <providers.length; i++)
{
if (providers instanceof UserPasswordEditorMBean)
{
UserPasswordEditorMBean editor = (UserPasswordEditorMBean)providers;
try
{
editor.changeUserPassword("username","password","password2");
System.out.println("modify password success.");
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("modify password ERROR:"+e.getMessage());
}
}
}

%>

 

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