简学tomcat,自己写个Filter,纯手工java网站使之不
2018-03-15 本文已影响45人
在路上phper
image.png
image.png
image.png
把输出信息改成中文的了
重新编译一下项目
将classes目录拷贝到WEB-INF下
启动tomcat
image.png
可以发现出现了乱码 是因为我们服务端没有做编码设置
那么我们在myservlet中设置编码可以么?
答案是可以的
但是在实际开发过程中 可以有好多个servlet 如果对每个servlet进行一个编码设置 很不方便
所以我们应该在servlet执行之前,到达servlet之前 设置一个过滤器 可以在过滤器中把编码改掉
在到达servlet之后我们的编码则会正常
下面学习下filtering
image.png
这里面会有个执行顺序 今天这节课会先执行filtering执行servlet然后还可以回到filtering
大概过程如下
当浏览器(吃瓜群众)请求网站的时候,里面的数据会通过filter(可以有多个,可在web.xml中配置先调用哪个),进入filter之后对我们的请求和相应作出处理。然后把控制权交给servlet或者下一个filter,是有一个调用链存在的
下面自己写个filter 里面主要有三个方法doFilter init(需要在web.xml中配置和servlet配置类似)destory三个方法
doFilter是这节课必须要写的一个方法 是一个过滤行为 可以把相应的控制权往后移,当servlet接收时候,要调用filterchain 是过滤器的调用链对象
首先在com.jtthink包下新建一个myfilter.java
代码如下
image.png
image.png
将classes目录拷贝到WEB-INF下
然后需要做一些配置(类似servlet配置)
image.png
在web.xml中加入如下
<filter>
<filter-name>myfilter</filter-name>
<filter-class>com.jtthink.myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
重启tomcat
运行网站localhost:8080/myweb/abcabc.do
image.png
可以发现编码被我们统一改掉了
接下来做个简单小案例
访问的时候 如果浏览器是火狐 则不让其访问
直接使其停止访问 不跳到servlet中使其输出你好
如果是其他浏览器则正常输出显示
修改myfilter中的doFilter方法
image.png
重新编译项目
将编译生成classes复制到WEB-INF下
重启tomcat
运行项目localhost:8080/myweb/abcabc.do
火狐访问
image.png
谷歌访问
image.png
可以发现对firefox浏览器进行了拦截处理
后面我们会使用编辑器自动发布并运行
我们前面学习了servlet api
image.png
其中java serverlet api 不同版本有一定的规范 不同的厂商(tomcat)会对其进行实现
那么我们今天要学习的就是filtering(过滤器)
有什么作用呢?
比如我们请求一个网站的时候 各种各样的地址 那么这些地址不管后缀名为.do或者其他后缀 交给我们统一的servlet处理之前或者之后可以通过过滤器对数据进行过滤或者我们自己定义的一些业务(比如有些危险字符或者有些参数)可以直接在请求到达servlet之前就可以把他干掉
下面我们学习一下filtering
首先把上节课的myservlet修改下
image.png
把输出信息改成中文的了
重新编译一下项目
将classes目录拷贝到WEB-INF下
启动tomcat
运行上节课的网址localhost:8080/myweb/abcabc.do
image.png
可以发现出现了乱码 是因为我们服务端没有做编码设置
那么我们在myservlet中设置编码可以么?
答案是可以的
但是在实际开发过程中 可以有好多个servlet 如果对每个servlet进行一个编码设置 很不方便
所以我们应该在servlet执行之前,到达servlet之前 设置一个过滤器 可以在过滤器中把编码改掉
在到达servlet之后我们的编码则会正常
下面学习下filtering
image.png
这里面会有个执行顺序 今天这节课会先执行filtering执行servlet然后还可以回到filtering
大概过程如下
当浏览器(吃瓜群众)请求网站的时候,里面的数据会通过filter(可以有多个,可在web.xml中配置先调用哪个),进入filter之后对我们的请求和相应作出处理。然后把控制权交给servlet或者下一个filter,是有一个调用链存在的
下面自己写个filter 里面主要有三个方法doFilter init(需要在web.xml中配置和servlet配置类似)destory三个方法
doFilter是这节课必须要写的一个方法 是一个过滤行为 可以把相应的控制权往后移,当servlet接收时候,要调用filterchain 是过滤器的调用链对象
首先在com.jtthink包下新建一个myfilter.java
代码如下
image.png
重新编译一下项目
target中出现两个class文件
image.png
将classes目录拷贝到WEB-INF下
然后需要做一些配置(类似servlet配置)
image.png
在web.xml中加入如下
<filter>
<filter-name>myfilter</filter-name>
<filter-class>com.jtthink.myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
重启tomcat
运行网站localhost:8080/myweb/abcabc.do
image.png
可以发现编码被我们统一改掉了
接下来做个简单小案例
访问的时候 如果浏览器是火狐 则不让其访问
直接使其停止访问 不跳到servlet中使其输出你好
如果是其他浏览器则正常输出显示
修改myfilter中的doFilter方法
image.png
重新编译项目
将编译生成classes复制到WEB-INF下
重启tomcat
运行项目localhost:8080/myweb/abcabc.do
火狐访问
image.png
谷歌访问
image.png
可以发现对firefox浏览器进行了拦截处理