javaxwsrsextProviders 是JAX-RS 20定义的一种辅助接口,其实现类用于辅助REST框架完成过滤和读写拦截的功能,可以使用@Provider 注解标注这些类。Providers接口一共定义了四个方法,分别用来获取MessageBodyReader,MessageBodyWriter,ExceptionMapper,ContextResolver
Jersey 之所以支持那么多中响应实体的传输格式,是因为其底层实体Providers具备的对不同格式的处理能力。Jersey内部提供了丰富的MessageBodyReader和MessageBodyWriter 接口的实现类,用于处理不同格式的表述
如上图,请求流程中存在三种角色,分别是:用户,REST客户端和REST服务器,请求始于请求的发送,止于调用Resonse的readEntity()方法
(1)用户请求提交数据,客户端接收请求,进入第一个扩展点:客户端请求过滤器 ClientRequestFilter 的filter()方法
(2)请求处理过滤完毕后,流程进入第二个扩展点:客户端写拦截器WriterInterceptor实现类的aroundWriterTo() 方法,实现对客户端序列化 *** 作的拦截
(3)客户端消息体写处理器MessageBodyWriter 执行序列化,流程从客户端过渡到服务器端
(4)服务器接收请求,流程进入第三个扩展点:服务器前置请求过滤器ContainerRequestFilter实现类 的filter()方法
(5)过滤器处理完毕后,服务器根据请求匹配资源方法,如果匹配到相应的资源方法,流程进入第四个扩展点:服务器后置请求过滤器ContainerRequestFilter 实现类 的filter() 方法
(6)后置请求过滤器处理完毕后,力促进入第五个扩展点:服务器读拦截器ReaderInterceptor实现类 的aroundReadFrom() 方法,拦截服务器端反序列化 *** 作
(7)服务器消息体读处理器MessageBodyReader 完成对客户端数据流的反序列化,服务器执行匹配的资源方法
(8)REST请求资源的处理完毕后,流程进入第六个扩展点:服务器响应过滤器 ContainerResponseFilter 实现类 的filter() 方法
(9)过滤器处理完毕后,流程进入第七个扩展点:服务器写拦截器WriterInterceptor实现类 的aroundWriterTo() 方法,实现对服务器端序列化到客户端这个 *** 作的拦截
(10)服务器消息体写处理器MessageBodyWriter 执行序列化,流程返回到客户端一侧
(11)客户端接收响应,流程进入第八个扩展点:客户端响应过滤器ClientResponseFilter 实现类 的filter() 方法
(12)过滤处理完毕后,客户端响应实例response 返回到用户一侧,用户执行responsereadEntity(),流程进入第九个扩展点:客户端拦截器ReaderInterceptor实现类 的aroundReadFrom() 方法,对客户端反序列化进行拦截
(13)客服端消息体读处理器MessageBodyReader 执行反序列化,将Java类型的对象最终作为readENtity()方法的返回值
JAX-RS-20定义的4种过滤器扩展点接口,供开发者实现其业务逻辑,按请求处理流程的先后顺序为:客户端请求过滤器(ClientRequestFilter) -------> 服务端请求过滤器(ContainerRequestFilter)-------->服务端响应过滤器(ContainerResponseFilter)——>客户端响应过滤器(ClientResponseFilter)
ClientRequestFilter
ClientResponseFilter
ContainerRequestFilter
ContainerResponseFilter
Jersey 内部实现了几个典型应用的拦截器,他们是成对出现的
ReaderInterceptor
WriterInterceptor
编码解码拦截器(ContentEncoder)
优先级的定义使用注解 @Priority ,优先级的值是一个整数值,对于ContainerReauest,PreMatchContainerRequest,ClientRequest 和读写拦截器 采用升序策略,数值越小,优先级越高;对于ContainerResponse和ClientResponse采用降序策略,数值越大,优先级越高
filter代码在pujia12345提供的代码上改的;
jsp页面的编码你设成你自己的,我用的是utf-8。
inputjsp输入后,正常跳转到handlejsp,而禁词已经被过滤。
filter:
package test;
import javaio;
import javaxservlet;
import javautil;
public class MyFilter implements Filter
{
private List<String> unString;
public void init(FilterConfig filterConfig) throws ServletException
{
unString = new ArrayList<String>();
unStringadd("日");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
String content = requestgetParameter("content");//需要过滤的参数
if(content!=null){
for (int i = 0; i < unStringsize(); i++)
{
String strIllegal = unStringget(i);
if (contentindexOf(strIllegal) >= 0)
{
content = contentreplaceAll(strIllegal, "");//非法字符替换成空
}
requestsetAttribute("content", content);//为request设置属性保存修改后的值
}
}
chaindoFilter(request, response);
}
public void destroy()
{
//Systemoutprintln("过滤器销毁");
}
}
//---------------------------//
webxml:
<filter>
<filter-name>myfilter</filter-name>
<filter-class>testMyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
//---------------------------//
输入页面inputjsp:
<%@page contentType="text/html;charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 10 Transitional//EN" ">
层次选择器
如果想通过DOM元素之间的层次关系来获取特定元素,例如后代元素、子元素、相邻元素和同辈元素等,那么层次选择器是一个非常好的选择。
$(“ancestor
descendant”):选取parent元素后所有的child元素
ancestor的中文意思是“祖先”,descendant的中文意思是“后代”
$(“body div”)选取body元素下所有的div元素。$(“ul li”) 选取ul元素下所有的li元素。
$(“#test div”) 选取id为“test”的元素所包含的所有的div子元素
$(“div#test div”) 选取id为“test”的div所包含的所有的div子元素
$(“test div”) 选取class为“test”的元素所包含的所有的div子元素
$(“divtest span”) 选取class为“test”的div所包含的所有的span子元素
$(“spantest demo”) 选取class为“test”的span所包含的所有的class为demo的元素
$(“test demo”) 选取class为“test”的元素所包含的所有的class为demo的元素
2 $(“parent
> child”):选取parent元素后所有的直属child元素,何谓“直属”,也就是第一级的意思了
$(“body > div”)选取body元素下所有的第一级div元素。$(“ul > li”) 选取ul元素下所有的第一级li元素。
$(“#test > div”) 选取id为“test”的元素所包含的所有的第一级div子元素
$(“div#test > div”) 选取id为“test”的div所包含的所有的第一级div子元素
$(“test > div”) 选取class为“test”的元素所包含的所有的第一级div子元素
$(“divtest > span”) 选取class为“test”的div所包含的所有的第一级span子元素
$(“spantest > demo”) 选取class为“test”的span所包含的所有的第一级class为demo的元素
$(“test > demo”) 选取class为“test”的元素所包含的所有的第一级class为demo的元素
3
$(“prev
+ next”):prev和next是两个同级别的元素 选中在prev元素后面的next元素
$(“#demo+img”)选在id为demo元素后面的img对象如果id为demo元素后面没有同级的img对象,那么这个$(“#demo+img”)length=0
4
$(“prev
~ siblings”):选择prev后面的根据siblings过滤的元素。注:siblings是过滤器
$(“#demo~[title]“)选择id为demo的元素后面所有带有title属性的元素,同样如果id为demo的元素后面没有一个带有title属性的元素,那么$(“#demo~[title]“)length = 0
$str=preg_replace("/\s+/", " ", $str); //过滤多余回车
$str=preg_replace("/<[ ]+/si","<",$str); //过滤<__("<"号后面带空格)
$str=preg_replace("/<\!---->/si","",$str); //注释
$str=preg_replace("/<(\!)>/si","",$str); //过滤DOCTYPE
$str=preg_replace("/<(\/html)>/si","",$str); //过滤html标签
$str=preg_replace("/<(\/head)>/si","",$str); //过滤head标签
$str=preg_replace("/<(\/meta)>/si","",$str); //过滤meta标签
$str=preg_replace("/<(\/body)>/si","",$str); //过滤body标签
$str=preg_replace("/<(\/link)>/si","",$str); //过滤link标签
$str=preg_replace("/<(\/form)>/si","",$str); //过滤form标签
$str=preg_replace("/cookie/si","COOKIE",$str); //过滤COOKIE标签
$str=preg_replace("/<(applet)>()<(\/applet)>/si","",$str); //过滤applet标签
$str=preg_replace("/<(\/applet)>/si","",$str); //过滤applet标签
$str=preg_replace("/<(style)>()<(\/style)>/si","",$str); //过滤style标签
$str=preg_replace("/<(\/style)>/si","",$str); //过滤style标签
$str=preg_replace("/<(title)>()<(\/title)>/si","",$str); //过滤title标签
$str=preg_replace("/<(\/title)>/si","",$str); //过滤title标签
$str=preg_replace("/<(object)>()<(\/object)>/si","",$str); //过滤object标签
$str=preg_replace("/<(\/objec)>/si","",$str); //过滤object标签
$str=preg_replace("/<(noframes)>()<(\/noframes)>/si","",$str); //过滤noframes标签
$str=preg_replace("/<(\/noframes)>/si","",$str); //过滤noframes标签
$str=preg_replace("/<(iframe)>()<(\/iframe)>/si","",$str); //过滤frame标签
$str=preg_replace("/<(\/iframe)>/si","",$str); //过滤frame标签
$str=preg_replace("/<(script)>()<(\/script)>/si","",$str); //过滤script标签
$str=preg_replace("/<(\/script)>/si","",$str); //过滤script标签
$str=preg_replace("/javascript/si","Javascript",$str); //过滤script标签
$str=preg_replace("/vbscript/si","Vbscript",$str); //过滤script标签
$str=preg_replace("/on([a-z]+)\s=/si","On\\1=",$str); //过滤script标签
$str=preg_replace("//si","&#",$str); //过滤script标签,如javAsCript:alert(
清除空格,换行
function DeleteHtml($str)
{
$str = trim($str);
$str = strip_tags($str,"");
$str = ereg_replace("\t","",$str);
$str = ereg_replace("\r\n","",$str);
$str = ereg_replace("\r","",$str);
$str = ereg_replace("\n","",$str);
$str = ereg_replace(" "," ",$str);
return trim($str);
}
过滤HTML属性
1,过滤所有html标签的正则表达式:
复制代码 代码如下:
</[^>]+>
//过滤所有html标签的属性的正则表达式:
$html = preg_replace("/<([a-zA-Z]+)[^>]>/","<\\1>",$html);
3,过滤部分html标签的正则表达式的排除式(比如排除<p>,即不过滤<p>):
复制代码 代码如下:
</[^pP/>]+>
4,过滤部分html标签的正则表达式的枚举式(比如需要过滤<a><p><b>等):
复制代码 代码如下:
</[aApPbB][^>]>
5,过滤部分html标签的属性的正则表达式的排除式(比如排除alt属性,即不过滤alt属性):
复制代码 代码如下:
\s(!alt)[a-zA-Z]+=[^\s]
6,过滤部分html标签的属性的正则表达式的枚举式(比如alt属性):
复制代码 代码如下:
(\s)alt=[^\s]
以上就是关于REST 请求处理全部的内容,包括:REST 请求处理、java过滤非法字符的filter、jquery中的层次选择器都有哪些选择器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)