1. web.xml配置方法路徑
你的實際目的,是一個Servlet,如果處理相關的多種業務。
比如管理用戶的Servlet,包括創建,更新,刪除,查詢等。
正確的方法是多傳個參數。
在Servlet的Service方法里,取出參數值,根據取值做分支。
例如if("printstr".equals(op)){
printstr(request,response);
}
注意處理各種業務的方法,必須傳參HttpServletRequest和HttpServletResponse。不要傳String。
2. spring如何動態載入配置文件,就是配置文件修改了,application.xml如何能讀取到
項目,需要訪問多個資料庫,而且需要在伺服器運行不重新啟動的情況下,動態的修改spring中配置的數據源datasource,在網上找了很多資料,最後找到了適合我的方法,下面總結一下。
spring的配置文件是在容器啟動的時候就載入到內存中的,如果手動改了application.xml,我們必須要重新啟動伺服器配置文件才會生效。而在spring中提供了一個類WebApplicationContext,這個類可以讓你獲得一些bean,可以修改內存中的信息,我就是通過這個類來實現的。下面是我具體的代碼。
package com.southdigital.hospital;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class ChangeSpringConfig extends HttpServlet
{
private String ipAddress = "127.0.0.1";
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doPost(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//先取得servleContext對象,提供給spring的WebApplicationUtils來動態修改applicationContext.xml
ipAddress = request.getParameter("ipAddress");
System.out.println(ipAddress);
ServletContext servletContext = this.getServletContext();
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
ComboPooledDataSource cpds = (ComboPooledDataSource) applicationContext.getBean("dataSource");
cpds.setJdbcUrl("jdbc:mysql://"+ipAddress+":3306/ssh");
}
}
注意:通過這種方法修改applicationContext.xml文件的時候用c3p0,而不可以用dbcp,dbcp不支持動態修改讀取到內存裡面的數據。
spring 3.1已經支持了。
3. 關於java中xml文件配置的路徑問題
嗯,是過濾,在這個裡面實現了些什麼?
這個問題太大
了,而且這是struts2,更加復雜。在裡面做了很多事情,最起碼的
至少有載入你的struts.xml配置文件,解析你的配置文件,然後通過你的請求路徑,找到相應的action,封裝你的表單數據等等,還有很多過濾器。。。struts2不是一兩句能說完的,看看源代碼吧,如果看得懂,就知道做了什麼了
4. web.xml中相關配置
在web.xml中通過contextConfigLocation配置spring,contextConfigLocation參數定義了要裝入的 Spring 配置文件
部署applicationContext.xml文件
如果不寫任何參數配置,默認的是在/WEB-INF/applicationContext.xml
如果指定了要載入的文件,則會去殲咐載入相應的xml,而不會去加氏慧純載/WEB-INF/下的applicationContext.xml。如果沒有指定的話,碧皮默認會去/WEB-INF/下載入applicationContext.xml。
如果想要自定義文件名,需要在web.xml中加入contextConfigLocation這個context參數
springmvc的默認配置文件是放在WEB-INF下的,並且要命名為 -servlet.xml, 為servlet—name,即下文中的"Springmvc"
web.xml文件中webAppRootKey屬性是web項目的絕對路徑,默認值是webApp.root,可以通過System.getProperty(「webApp.root」)來獲取屬性值或者在配置文件中通過${webApp.root}獲得。
Spring通過 org.springframework.web.util.WebAppRootListener 這個監聽器來注入項目路徑,因此部署在同一個web容器中的項目,要配置不同的param-value(比如」項目名.root」),不然會造成沖突。但是如果在web.xml中已經配置了org.springframework.web.util.Log4jConfigListener這個監聽器,則不需要配置WebAppRootListener了。因為Log4jConfigListener已經包含了WebAppRootListener的功能。WebAppRootListener要在ApplicationContext的ContextLoaderListener之前,否則ApplicationContext的bean注入根目錄值時會發生無法注入異常。
"webapp.root"這個字元串可以隨便寫任何字元串。如果不配置默認值是"webapp.root"。
可以用System.getProperty("webapp.root")來動態獲項目的運行路徑。
一般返回結果例如:/usr/local/tomcat6/webapps/項目名
定義以後,在Web Container啟動時將把ROOT的絕對路徑寫到系統變數里。
然後log4j的配置文件里就可以用${webName.root }來表示Web目錄的絕對路徑,把log文件存放於webapp中。
此參數用於後面的「Log4jConfigListener」-->
5. xml解析項目中的xml文件,路徑如何寫
將要訪問的外部文件直接放在代碼包裡面是一個大忌,在代碼中用相對路徑也是一個大忌,因為在運行的時候是去運行的class文件而不是源文件。要解決這個問題,首先樓主要知道當一個虛擬機啟動以後它的工作目錄是什麼目錄。在eclipse下面默認的工作目錄就是工程的根目錄。那麼你如果想正確的訪問文件,你就要從根目錄開始寫路徑。最好的做法是在根目錄下面建一個文件夾,在這裡面專門放置要訪問的文件。比如你在工程根目錄下面建立一個resource文件夾,將records.xml放在這個文件夾裡面,就可以用resource/records.xml來訪問。為了程序的跨平台,最好將/用File.separator來替代
6. eclipse無法配置web.xml文件
前言 剛開始學習部署tomcat,新建java web項目後發現沒有web.xml配置文件,以下是原因及其解決方案。 產生原因及解決方案 新建web項目時如下圖所示,若直接選擇"完成",則默認不會在WebContent/WEB-INF文件夾下生成web.xml配置文件,此時應選擇下一步 在創建項目時勾選同時產生web.xml文件即可;當然也可以讓已經新建的web項目生成web....
查看原文
在eclipse中快速生成一個maven項目後一鍵生成web.xml
在web工程創建時創建web.xml:用Eclipse新建一個web項目沒有自動生成web.xml 在創建maven工程時,大多沒有創建web.xml文件,web.xml路徑:src/main/webapp/EWB-INF/web.xml 創建web.xml:右鍵項目——>javaEE tools——>點擊第二個Generate
利用eclipse新建的java web項目沒有web.xml文件怎麼辦?
利用eclipse新建的java web項目沒有web.xml文件怎麼解決? 解決辦法: 1、右鍵項目名稱-》Java EE Tools-》Generate Deployment descriptor stub 即可生成web.xml文件。
MyEclipse新建的Web項目沒有web.xml
MyEclipse新建的Web項目沒有web.xml 是因為創建項目時沒有選擇Generate web.xml deployment descriptor這一項。 下面是步驟 首先創建項目 這一步點擊next 再點擊next 勾選Generate web.xml deployment descriptor,完成後點擊Finish,即可完成創建。 檢查一下,在WebRoot文件夾下打開
myeclipse生成web.xml文件
MyEclipse中新建web項目時,如果一開始新建項目沒有選中生成web.xml文件,在WebRoot->WEB-INF文件夾下就沒有web.xml文件。 那如果後面又需要用到web.xml該怎麼辦呢?難道需要重新建項目?其實是不用的。 非常簡單的方法就是在需要添加web.xml文件的項目上右鍵點擊,依次選擇MyEclipse->Generate Deployment
7. web配置讀取xml文件報找不到路徑
相對路徑的話,來可以先獲取到源當前文件的編譯路徑,之後在找到想找文件的路徑的思路來實現。
舉例:
XMLS.class.getClass().getResourceAsStream("/test/test.xml");
解釋:XMLS.class.getClass()是獲取當前的類編譯路徑,之後通過getResourceAsStream的形式即可找到要讀取的文件的路徑。
備註:這個方法中後面的路徑也可以通過截取的形式來進行路徑獲取,實現原理都是找到當前類路徑,之後通過相對位置找到另外文件路徑。
8. IDEA 無法讀取項目的xml配置文件,找不到路徑是為什麼
1.將所有資源文件放在resources文件夾下
這樣做很方便,比較容易想到,但是層次性就很差了,比如專mybatis的映射配置文件mapper.xml,本屬來需要放在特定的包裡面,與層,service層等層次為同一個層級,如今只能放在resource文件夾下,不方便分層;
2.如果該項目是maven項目:
配置maven的pom文件配置,在pom文件中找到<build>節點,添加下列代碼:
<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources></build>
我嘗試過將directory修改為具體的放置配置文件的包,即修改成 src/main/java/lj/ncepu/mapperXML,然後<include>標簽裡面也做了很多修改和嘗試,始終無法訪問到配置文件;