REST 请求处理

REST 请求处理,第1张

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中的层次选择器都有哪些选择器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10171295.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存