本篇文章为你整理了09(09年属什么)的详细内容,包含有09对战平台 09年属什么 09年快乐女声前十名 09年飞天茅台53度回收多少钱一瓶 09,希望能帮助你了解 09。
Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一
过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能
如下图所示,浏览器可以访问服务器上的所有资源(Servlet、jsp、html等)
访问到这些资源之前可以使过滤器拦截下来,也就是说在访问资源之前会先经过Filter
比如每个资源都要写一些代码完成某个功能,我们总不能在每个资源中都写一样的代码
而此时可以将这些代码写在过滤器中,因为请求每一个资源都要经过过滤器
public class FilterDemo implements Filter {
public void init(FilterConfig filterConfig){...}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain){...}
public void destroy(){...}
2.配置Filter拦截资源的路径:在类上定义@WebFilter注解,其注解的value属性值跟@WebServlet的匹配规则基本一致
拦截路径表示Filter 会对哪些请求的资源进行拦截,使用@WebFilter注解进行配置。如:@WebFilter("拦截路径")
tomcat或者其他的servlet容器,都提供了两个servlet:DefaultServlet和JspServlet
JspServlet的处理路径为"*.jsp":用来处理所有jsp请求(jsp本质上也是一个servlet),第一次请求这个jsp文件的时候,JspServlet就会将这个jsp文件装成java文件,然后编译成class文件,class文件才能执行.生成了响应
DefaultServlet的处理路径为"/",用来处理其他servlet都处理不了的请求,找对应的静态资源,若找到就把静态资源(流)读进来,生成响应代码. 若也没有找到这个资源,就会通过tomcat或者其他的servlet容器生成404状态码
过滤器的执行流程和类的名称有一定的关系
当使用注解方式配置Filter的拦截路径的时候,其会根据类名的ascii码值的大小来分出执行顺序
如Filter2和Filter3,就会先执行Filter2过滤器
如BFilterDemo和AFilterDemo,就会先执行AFilterDemo过滤器
@WebFilter("/*")
public class LoginFilter implements Filter throws ServletException, IOException{
public void init(FilterConfig config) throws ServletException {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
//1. 判断session中是否有user(PS:当用户成功登录后,会将用户的部分信息保存至Session)
HttpSession session = req.getSession();
Object user = session.getAttribute("user");
//2. 判断user是否为null
if(user != null){
// 登录过了
//放行
chain.doFilter(request, response);
}else {
// 没有登陆,存储提示信息,跳转到登录页面
req.setAttribute("login_msg","您尚未登陆!");
req.getRequestDispatcher("/login.jsp").forward(req,response);
public void destroy() {
不难看出,因为过滤器拦截了所有的资源,甚至连静态资源都不能访问,同时主页页面也会被拦截;显然,这种设计并不合理
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
//判断访问资源路径是否和登录注册相关
//1,在数组中存储登陆和注册相关的资源路径
String[] urls = {"/login.jsp","/imgs/","/css/","/loginServlet","/register.jsp","/registerServlet","/checkCodeServlet"};
//2,获取当前访问的资源路径
String url = req.getRequestURL().toString();
//3,遍历数组,获取到每一个需要放行的资源路径
for (String u : urls) {
//4,判断当前访问的资源路径字符串是否包含要放行的的资源路径字符串
比如当前访问的资源路径是 /brand-demo/login.jsp
而字符串 /brand-demo/login.jsp 包含了 字符串 /login.jsp ,所以这个字符串就需要放行
if(url.contains(u)){
//找到了,放行
chain.doFilter(request, response);
//break;
return;
//1. 判断session中是否有user
HttpSession session = req.getSession();
Object user = session.getAttribute("user");
//2. 判断user是否为null
if(user != null){
// 登录过了
//放行
chain.doFilter(request, response);
}else {
// 没有登陆,存储提示信息,跳转到登录页面
req.setAttribute("login_msg","您尚未登陆!");
req.getRequestDispatcher("/login.jsp").forward(req,response);
public void init(FilterConfig config) throws ServletException {
public void destroy() {
CURD操作中,当想要添加某一条数据,或者修改某一条数据的时候,很有可能会出现中文乱码的问题;因为Tomcat中对POST请求并没有进行编码限制(Tomcat8及以上只对GET请求进行了编码限制)
1.4.2、代码实现
public void init(FilterConfig filterConfig) throws ServletException {
// Filter.super.init(filterConfig);
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 向下转型
HttpServletRequest request = (HttpServletRequest) servletRequest;
// 判断请求是否为POST请求
String method = request.getMethod();
if ("post".equalsIgnoreCase(method)) {
// 如果是POST请求则设置编码
request.setCharacterEncoding("utf-8");
// 不管是不是,最后都要放行;不用分别在if和else中都写放行
filterChain.doFilter(request, servletResponse);
@Override
public void destroy() {
// Filter.super.destroy();
@WebFilter(value = "/c/*",dispatcherTypes = {DispatcherType.FORWARD,DispatcherType.REQUEST})
Listener表示监听器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
监听器可以监听就是在 application,session,request 三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
application概念
application 是 ServletContext 类型的对象
ServletContext代表整个Web应用,在服务器启动的时候,Tomcat会自动创建该对象。在服务器关闭的时候会自动销毁该对象
void contextInitialized(ServletContextEvent sce):ServletContext 对象被创建了会自动执行的方法
void contextDestroyed(ServletContextEvent sce):ServletContext 对象被销毁时会自动执行的方法
@WebListener
public class ContextLoaderListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
//加载资源
System.out.println("ContextLoaderListener...");
@Override
public void contextDestroyed(ServletContextEvent sce) {
//释放资源
通过上面 js 对象格式和 json 格式进行对比,发现两个格式特别像。只不过 js 对象中的属性名可以使用引号(可以是单引号,也可以是双引号)
parse(str) :将 JSON串转换为 js 对象。使用方式是: var jsObject = JSON.parse(jsonStr);
stringify(obj) :将 js 对象转换为 JSON 串。使用方式是:var jsonStr = JSON.stringify(jsObject)
//1. 定义JSON字符串
var jsonStr = {"name":"zhangsan","age":23,"addr":["北京","上海","西安"]}
alert(jsonStr);
//2. 将 JSON 字符串转为 JS 对象
let jsObject = JSON.parse(jsonStr);
alert(jsObject)
alert(jsObject.name)
//3. 将 JS 对象转换为 JSON 字符串
let jsonStr2 = JSON.stringify(jsObject);
alert(jsonStr2)
/script
/body
/html
Fastjson是阿里巴巴提供的一个Java语言编写的高性能完善的JSON库,是目前Java语言中最快的JSON库,可以实现java对象和JSON字符串的相互转换
不过还有其他比较不错的工具类
jackson
json-lib
将 Java 对象转换为 JSON 串,只需要使用 Fastjson 提供的 JSON 类中的 toJSONString() 静态方法即可。
将 json 转换为 Java 对象,只需要使用 Fastjson 提供的 JSON 类中的 parseObject() 静态方法即可。
System.out.println("jsonStr = " + jsonStr);
// jsonStr = {"id":1,"name":"coolman","password":"123","phoneNumber":"110"}
@Test
// JSON转Java
public void testJsonToJavaBean() {
String jsonStr = "{\"id\":1,\"name\":\"coolman\",\"password\":\"123\",\"phoneNumber\":\"110\"}";
User user = JSON.parseObject(jsonStr, User.class);
System.out.println("user = " + user);
@Test
//Map转JSON
public void testMapToJson() {
HashMap String, Object map = new HashMap ();
map.put("name","平平");
map.put("age",35);
map.put("sex","女");
//将map类型转成json字符串
String jsonStr = JSON.toJSONString(map);
System.out.println(jsonStr);//{"sex":"女","name":"平平","age":35}
@Test
public void testJsonToMap() {
String jsonStr = "{\"id\":1,\"name\":\"coolman\",\"password\":\"123\",\"phoneNumber\":\"110\"}";
Map map = JSON.parseObject(jsonStr, Map.class);
System.out.println(map);
@Test
//List转JSON
public void testListToJson(){
List User userList = new ArrayList ();
User user = new User();
user.setName("杨广武");
user.setId(1);
user.setPassword("123");
user.setPhoneNumber("666");
User user1 = new User();
user1.setId(2);
user1.setName("hehe");
user1.setPassword("123");
user1.setPhoneNumber("777");
userList.add(user);
userList.add(user1);
//将list转成json字符串
String jsonStr = JSON.toJSONString(userList);
System.out.println("jsonStr = " + jsonStr);
//jsonStr = [{"id":1,"name":"杨广武","password":"123","phoneNumber":"666"},{"id":2,"password":"123","phoneNumber":"777"}]
@Test
public void testJsonToList() {
String jsonStr = "[{\"id\":1,\"name\":\"杨广武\",\"password\":\"123\",\"phoneNumber\":\"666\"},{\"id\":2,\"password\":\"123\",\"phoneNumber\":\"777\"}]";
List User users = JSON.parseArray(jsonStr, User.class);
System.out.println("users = " + users);
以上就是09(09年属什么)的详细内容,想要了解更多 09的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。