怎样在JavaWeb项目中自定义一个配置文件。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样在JavaWeb项目中自定义一个配置文件。相关的知识,希望对你有一定的参考价值。

我要写个过滤器过滤IP,但是被过滤的IP不能写在web.xml中,需要单独新建一个.xml。这个要怎么做?怎么读到这个新建的.xml文件?

你直接写个过滤类就可以了(使用 filter  的3个方法  你懂得)

package com.enation.eop;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.util.Collection;import java.util.Date;import java.util.List;import java.util.Locale;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.enation.eop.processor.back.BackendProcessor;import com.enation.eop.processor.core.freemarker.FreeMarkerPaser;import com.enation.eop.processor.facade.FacadeProcessor;import com.enation.eop.processor.facade.InstallProcessor;import com.enation.eop.processor.facade.ResourceProcessor;import com.enation.eop.resource.IAppManager;import com.enation.eop.resource.model.EopApp;import com.enation.eop.sdk.context.EopContext;import com.enation.eop.sdk.context.EopContextIniter;import com.enation.eop.sdk.context.EopSetting;import com.enation.framework.context.spring.SpringContextHolder;import com.enation.framework.context.webcontext.ThreadContextHolder;public class DispatcherDemoFilter implements Filter    public void init(FilterConfig config)


public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

//        HttpServletRequest  req= ServletActionContext.getRequest();//        String  flag= req.getHeader("X-Requested-With");//            HttpServletResponse   response  = ServletActionContext.getResponse();
String ip = ((HttpServletRequest) request).getHeader("x-forwarded-for");        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = ((HttpServletRequest) request).getHeader("Proxy-Client-IP");
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = ((HttpServletRequest) request).getHeader("WL-Proxy-Client-IP");
       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getRemoteAddr();

String authtoken = request.getParameter("auth-token");
System.out.println(authtoken);
StringBuffer sb = new StringBuffer() ;
InputStream is = request.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String s = "" ;
while((s=br.readLine())!=null)
sb.append(s) ;

System.out.println(sb);
String str =sb.toString();
System.out.println(ip+"时间"+new Date().getTime());        //response.setCharacterEncoding("utf-8");
response.setContentType("application/xml");
String write = "<cart><items><item feed-id=\\"449573\\" offer-id=\\"15\\" price=\\"825\\" count=\\"1\\" delivery=\\"true\\"/>" +
"</items><delivery-options><delivery service-name=\\"Курьер\\" type=\\"DELIVERY\\" price=\\"1490.00\\">" +
"<dates from-date=\\"24-10-2016\\" to-date=\\"26-10-2016\\"/></delivery>" +
"</delivery-options><payment-methods>" +
"<payment-method>CASH_ON_DELIVERY</payment-method></payment-methods></cart>";
System.out.println(write);
response.getWriter().write(write);
   public void destroy()


private static boolean isExinclude(String uri)
String[] exts = new String[] "jpg", "gif", "js", "png", "css", "doc", "xls", "swf","ico" ;
for (String ext : exts)            if (uri.toUpperCase().endsWith(ext.toUpperCase()))                return true;

       return false;




参考技术A 建议你用 .properties文件来保存你的IP ,或是把你的要过滤的IP维护进来用表保存。 参考技术B 过滤ip一般采用filter的形式,至于读xml文件dom等都可以,太多了。追问

我不能在web.xml中配置,要新建一个配置文件,怎么才能读到这个配置文件?这就是我的问题:怎么新建另一个类似web.xml的其他.xml。

追答

读文件本身并不在乎文件在哪里,你可以把文件放在类的目录里,放在jar里,放在web的访问目录里,也可以放在服务器任何可以被访问的目录里,唯一需要的只是通知xml解析程序去哪里读,和怎么解析而已。最简单的是放在类目录里,直接就可以访问呢了。

追问

我就想新建一个配置文件,应该怎么做?你能不能简单的就只告诉我这个????

追答

你在src根目录随便起个名字建个xml文件就可以了啊。这本来就是很简单的事,为什么要复杂化。
读的时候,写上文件名就可以访问了。

追问

读到时候应该怎么读呢?之前在web.xml中,只需要
filterIP = conf ig.getInitParameter("filterIP")
就可以了,现在换了地方,应该怎么读到呢?怎么写上文件名?

追答

如果你要使用xml文件,那么xml文件就应该要自己确定一下,root的名称,包含的属性。然后编写dom4j解析这个xml文件,将配置读到对象中,至于读文件时 ,用InputStream input = this.getClass().getClassLoader().getResourceAsStream("ip.xml"); 就可以获取数据流。

不过从我看来,你根本就不懂xml,也没意识到 自己要做什么,我还是建议你改用属性文件,或者使用spring注入的方式把ip作为参数读入。

追问

我确实不懂,所以我着急。获取数据流然后呢?我想获取的是我配置的那个IP,接下来该怎么办?

追答

你去查查外面dom4j的说明,网上有很多,都是告诉你,如何正确获取xml中的数据。访问xml没有简单的做法,之所以可以用config.getInitParameter,是由于有web服务器解析了web.xml,你现在要踏踏实实的自己解析xml,那么请至少花些时间,看懂自己要做什么。

参考技术C web.xml只能有一个,是全局的配置。可以在里面加 过滤器来实现ip阻断

给个过滤器配置例子,仅供参考.需要自己写过滤器类,并读取新的xml保存的ip实现过滤功能
<filter>
<!--定义过滤器,需实现javax.servlet.Filter 接口-->
<filter-name>IPFilter</filter-name>
<filter-class>
cn.com.Filter <!--过滤器类路径-->
</filter-class>
<!--定义过滤器输入参数,可以忽略直接在类中定义要读取的xml-->
<init-param>
<param-name>fileName</param-name>
<param-value>D:/ipfilter.xml</param-value>
</init-param>
</filter>
<!--过滤器匹配条件-->
<filter-mapping>
<filter-name>IPFilter</filter-name>
<!-- /*表示所有请求经过过滤器 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
参考技术D 在resources里面新建一个XML file或者 file,
XML file 会自动生成XML头,在下面加入内容就可以了,首先要有一个根节点,然后如果需要用到一些类,如:spring的一些类,就需要引入包,如:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="com.dist.*.controller" />
</beans >

其中<?xml ……就是头,<beans 是根节点,下面的<content:……是内容。
如果添加的事properties文件,格式如下:

# 连接池配置
pool.size = 2
pool.max = 50

以上是关于怎样在JavaWeb项目中自定义一个配置文件。的主要内容,如果未能解决你的问题,请参考以下文章

怎样把一个javaweb项目部署到tomcat??访问的时候不用加项目名

Spring Bootspringboot中自定义配置项

Spring Bootspringboot中自定义配置项

Spring Bootspringboot中自定义配置项

Django中自定义过滤器的使用

在开发中关于javaweb中的路径问题小结