⑴ java如何創建過濾器
弄過濾器,要實現filter介面
主要是用過濾器處理中文編碼,至於要用來做什麼,再自己寫比如許可權控制,登錄驗證,之類
//下面這是一個類。。。。
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class EncodingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("GBK");//處理編碼
response.setCharacterEncoding("GBK");//處理編碼
chain.doFilter(request, response);//讓過濾器執行下一個請求
}
public void destroy() {}
public void init(FilterConfig arg0) throws ServletException {}
}
//下面這個是在web.xml下的配置
<filter>
<filter-name>encoding</filter-name>
<filter-class>
剛剛創建的那個實現filter介面的類的位置
例如:com.temp.filter.EncodingFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.jsp這個是以jsp為後綴的文件都攔截下來</url-pattern>
</filter-mapping>
可以寫多個的<filter-mapping>來配置你所要攔截的東西
⑵ java過濾器filter能過濾某個包下的所有servlet嗎
可以的,其實確切的說不是某個包;
正如你給的例子中,url-pattern中放的路徑版一樣;
你在配置servlet的時候權,url-pattern這個路徑可以加層次的,舉例說明,比如用戶信息的所有servlet可以寫成 <url-pattern>/userinfo/具體的servlet</url-pattern>
在寫過濾器的時候,就可以攔截/userinfo/*;
在想你這個問題,如果你如果想攔截某個包下的,可以把這個包下的所有servlet的url-pattern的值,統一加上一層目錄( /某某包/* )
⑶ java過濾器filter能過濾某個包下的所有servlet嗎
不能直接過濾。過濾器是根據URL路徑來過濾的,不是根據包名來攔截的。但是你可以按照這樣的規則配置你的web.xml文件,間接實現你的需求。
① 你的servlet的訪問路徑,根據包名來命名。設計二級路徑。比如你有一個user.servlet包。你可以把裡面的所有Servlet路徑全部設置為/user/xxxServlet。你的filter攔截路徑就改為
/user/*
//1AServlet代碼
packageuser.servlet;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
{
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doPost(request,response);
}
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
System.out.println(456);
}
}
//2BServlet代碼
packageuser.servlet;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
{
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doPost(request,response);
}
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
System.out.println(123);
}
}
//3filter代碼
packagefilter;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
{
@Override
publicvoiddestroy(){}
@Override
publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,
FilterChainarg2)throwsIOException,ServletException{
System.out.println("執行了"+arg0.getParameter("name"));
arg2.doFilter(arg0,arg1);
}
@Override
publicvoidinit(FilterConfigarg0)throwsServletException{}
}
//4web.xml配置
<servlet>
<servlet-name>AServlet</servlet-name>
<servlet-class>user.servlet.AServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/user/AServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Bservlet</servlet-name>
<servlet-class>user.servlet.BServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Bservlet</servlet-name>
<url-pattern>/user/BServlet</url-pattern>
</servlet-mapping>
<filter>
<filter-name>Myfilter</filter-name>
<filter-class>filter.Myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Myfilter</filter-name>
<url-pattern>/user/*</url-pattern>
</filter-mapping>
//5測試我的工程應用名是HelloWorld
http://localhost/HelloWorld/user/AServlet?name=aaa
http://localhost/HelloWorld/user/BServlet?name=bbb
會發現控制台分別列印出取出的參數aaa和bbb證明。攔截成功。
⑷ java 文件過濾器怎麼實現。
import java.io.File;
import java.io.FilenameFilter;
/**
* 文件過濾器的簡單實現
*
* @author ajaxfan
* @date 2010-04-17
*/
public class FileNameFilterDemo {
public static void main(String[] args) {
list("d:/");
}
/**
* 列出特定路徑下的txt文件
*
* @param directoryName
* 路徑名
*/
private static void list(String directoryName) {
File dir = new File(directoryName);
// 確定該路徑指向一個目錄
if (dir.exists() && dir.isDirectory()) {
// 列出所有結尾為txt的文件
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith("txt");
}
});
System.out.println(java.util.Arrays.toString(files));
}
}
}
⑸ java過濾器filter能過濾某個包下的所有servlet嗎
可以。通配符 * 統配所有字元
如果你指定了某個路徑,那他會走最長路徑匹配。
⑹ 誰可以給我一個Javaweb過濾器filter的相關jar
那個東西在tomcat裡面就有,所有的web容器和javaee應用伺服器都有這個。
一個出來就行了。
而且回你開發這個的時候肯定不是空答手開發,光用一個介面的jar根本運行不起來。
所以肯定要一個開發運行環境的,直接import你的web容器裡面lib里所有的jar就肯定包括了
⑺ java過濾器怎麼不過濾一個頁面里包含的多個請求
abstract public class FilterPerRequest implements Filter {
private static final Boolean FILTERED = true;
private ThreadLocal<Boolean> statusLocal = new ThreadLocal<Boolean>();
@Override
final public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
if (hasNotFiltering()) {
doFilterAndDispatchRequest(req, resp, chain);
return;
}
//dispatch request only
chain.doFilter(req, resp);
}
private boolean hasNotFiltering() {
Boolean status = statusLocal.get();
if (status == null) {
return true;
}
return false;
}
private void doFilterAndDispatchRequest(ServletRequest req,
ServletResponse resp, FilterChain chain) throws IOException,
ServletException {
try {
doFilterPerRequest(req, resp);
setFiltered();
chain.doFilter(req, resp);
} finally {
cleanFilterStatus();
}
}
abstract protected void doFilterPerRequest(ServletRequest req,
ServletResponse resp);
private void setFiltered() {
statusLocal.set(FILTERED);
}
private void cleanFilterStatus() {
statusLocal.set(null);
}
}
那要就情況而定了。。。
如果是request范圍內的話,就可以使用上面的過濾器。
如果是session范圍內的話,就需要在session內存儲一個標志變數,方式和request差不多。
如果是限制用戶操作的話,那就必須將用戶操作持久化。
由於你的問題不明確,我也不好多說...
⑻ java 日誌列印堆棧如何實現包級過濾
目前使用的來 log4j2.xml 方案列印的日自志。但因為 web 項目必然用到各種框架工具包之類的,導致列印的日誌堆棧信息中,有很多 spring 的包中的類調用鏈。
想實現,列印的堆棧信息,只有我指定的包前綴的才列印出來。比如我們自己編寫的一段代碼執行時報錯了,那麼執行出現如下堆棧信息:
java.lang.NumberFormatException: null
at net.oschina.aaa(aaa.java:80) ~[classes/:?]
at net.oschina.bbb(bbb.java:70) ~[classes/:?]
at net.oschina.ccc(ccc.java:60) ~[classes/:?]
at net.oschina.ddd(ddd.java:50) ~[classes/:?]
⑼ java過濾器filter能過濾某個包下的所有servlet嗎
j2ee自帶的filter好像不可以根據包來過濾,不過struts和sprint合起來就可以控制了。
⑽ java中如何用split過濾中括弧
java使用string的split方法來抄過濾中括弧,實例如下:
packagecom.qiu.lin.he;
publicclassCeShi{
publicstaticvoidmain(String[]args){
Stringmystr="String[]adfas";
String[]strs=mystr.split("\[]");//因為中括弧屬於轉義字元,應該要進行轉義
System.out.println(strs[0]+strs[1]);
}
}
運行結果如下: