106_JavaWeb_Filter_JSON

举报
alexsully 发表于 2021/08/05 10:36:46 2021/08/05
【摘要】 1 Filter 过滤器Filter 过滤器它是JavaWeb的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤Filter 过滤器它的作用是:拦截请求,过滤响应; 常见场景:权限检查 日记操作 事务管理2 Filter 过滤器的使用步骤: a 编写一个类去实现 Filter 接口 b 实现过滤方法 doFilter() c 到 web.xml...

1 Filter 过滤器

Filter 过滤器它是JavaWeb的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤
Filter 过滤器它的作用是:拦截请求,过滤响应; 常见场景:权限检查 日记操作 事务管理



2 Filter 过滤器的使用步骤:
 a 编写一个类去实现 Filter 接口
 b 实现过滤方法 doFilter()
 c 到 web.xml 中去配置 Filter 的拦截路径

拦截路径

-精确匹配 <url-pattern>/target.jsp</url-pattern>
-目录匹配 <url-pattern>/admin/*</url-pattern>
-后缀名匹配 <url-pattern>*.html</url-pattern>
   <filter>
        <filter-name>PathFilter</filter-name>
        <filter-class>com.alex.filter.PathFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>PathFilter</filter-name>
        <url-pattern>*.html</url-pattern>
    </filter-mapping>

3 Filter 的生命周期 - Filter 的生命周期包含几个方法
   1,构造器方法 
   2,init 初始化方法     第1,2 步,在web工程启动的时候执行(Filter已经创建)
   3,doFilter 过滤方法   第3步,每次拦截到请求,就会执行
   4,destroy 销毁        第4步,停止 web 工程的时候,就会执行(停止web工程,也会销毁Filter过滤器)


4 FilterConfig 

FilterConfig是 Filter 过滤器的配置文件类
Tomcat 每次创建 Filter 的时候,也会同时创建一个 FilterConfig类,含了Filter配置文件的配置信息
FilterConfig 类的作用是获取 filter 过滤器的配置内容
1 获取 Filter 的名称 filter-name 的内容
2 获取在 Filter 中配置的 init-param 初始化参数
3 获取 ServletContext 对象

    <filter>
        <filter-name>AdminFilter</filter-name>
        <filter-class>com.alex.filter.AdminFilter</filter-class>

        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>

        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/test</param-value>
        </init-param>

    </filter>


public class AdminFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

        //1 获取 Filter 的名称 filter-name 的内容
        String filterName = filterConfig.getFilterName();  //  就是web.xml 里面的参数
        //        System.out.println(filterName);
        // 2 获取在 Filter 中配置的 init-param 初始化参数
        String username = filterConfig.getInitParameter("username");
        String url = filterConfig.getInitParameter("url");

        //3 获取 ServletContext 对象
        ServletContext servletContext = filterConfig.getServletContext();

    }

    /**
     *  doFilter 方法,专门用于拦截请求。可以做权限检查
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest  httpServletRequest = (HttpServletRequest) servletRequest;
        HttpSession session = httpServletRequest.getSession();
        Object user = session.getAttribute("user");

        if (user == null){
            servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest, servletResponse);
            return;
        }
        else {
            filterChain.doFilter(servletRequest, servletResponse);
        }

    }

    @Override
    public void destroy() {

    }
}

FilterChain 过滤器链(多个过滤器一起工作)



JSON 由键值对组成,并且由花括号(大括号)包围,每个键由引号引起来,键和值之间使用冒号进行分隔,多组键值对之间进行逗号进行分隔

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式 (跟xml比较)
JSON采用完全独立于语言的文本格式,使得 JSON 成为理想的数据交换
数据交换指的是客户端和服务器之间业务数据的传递格式


1 JSON 在 java 中的使用
javaBean和json的互转
List和json的互转
map和json 的互转

public class JsonTest {
    
    @Test // 1.2.1、javaBean和json的互转
    public void test1(){
        Person person = new Person(1,"B哥!");
        Gson gson = new Gson();
        // toJson方法可以把java对象转换成为json字符串
        String personjson = gson.toJson(person);
        System.out.println(personjson);  //{"id":1,"name":"B哥!"}

        // fromJson把json字符串转换回Java对象
        Person person1 = gson.fromJson(personjson, Person.class);
        System.out.println(person1.getName());
    }

    @Test // 1.2.2、List 和json的互转
    public void test2(){
        ArrayList<Person> peopleList = new ArrayList<>();
        peopleList.add(new Person(1, "B哥哥"));
        peopleList.add(new Person(2, "春哥"));
        Gson gson = new Gson();

        // 把List转换为json字符串
        String personListJson  = gson.toJson(peopleList);
//        System.out.println(personListJson);
//        System.out.println(personListJson.getClass()); //class java.lang.String

        // 把json字符串 转回 json
        List<Person> list = gson.fromJson(personListJson, new TypeToken<ArrayList<Person>>() {
        }.getType());
        System.out.println(list.get(1).getName());
    }

    @Test // 1.2.3、map 和json的互转
    public void test3(){
        Map<Integer,Person> personMap = new HashMap<>();
        personMap.put(1, new Person(1, "alex"));
        personMap.put(2, new Person(2, "sully"));

        Gson gson = new Gson();
        String personJson = gson.toJson(personMap);
//        System.out.println(personJson); //{"1":{"id":1,"name":"alex"},"2":{"id":2,"name":"sully"}}
//        System.out.println(personJson.getClass()); //class java.lang.String

        HashMap<Integer, Person> personJsonMap = gson.fromJson(personJson, new TypeToken<HashMap<Integer, Person>>() {
        }.getType());

        System.out.println(personJsonMap.get(1).getName());
    }
}


2 JSON 在 JavaScript 中的使用

		<script type="text/javascript">
			// json的定义
			var jsonObj = {
				"key1":12,
				"key2":"abc",
				"key3":true,
				"key4":[11,"arr",false],
				"key5":{
					"key5_1" : 551,
					"key5_2" : "key5_2_value"
				},
				"key6":[{
					"key6_1_1":6611,
					"key6_1_2":"key6_1_2_value"
				},{
					"key6_2_1":6621,
					"key6_2_2":"key6_2_2_value"
				}]
			};

			// json的访问

			// alert(typeof(jsonObj));// object  json就是一个对象
			// alert(jsonObj.key1); //12
			// alert(jsonObj.key3); // true
			// alert(jsonObj.key4);// 得到数组[11,"arr",false]
			//  // json 中 数组值的遍历
			// for(var i = 0; i < jsonObj.key4.length; i++) {
			// 	alert(jsonObj.key4[i]);
			// }
			// alert(jsonObj.key5.key5_1);//551
			// alert(jsonObj.key5.key5_2);//key5_2_value
			// alert( jsonObj.key6 );// 得到json数组
			//
			// // 取出来每一个元素都是json对象
			// var jsonItem = jsonObj.key6[0];
			// // alert( jsonItem.key6_1_1 ); //6611
			// alert( jsonItem.key6_1_2 ); //key6_1_2_value

			// alert(jsonObj);

			// json对象转字符串
			// 把json对象转换成为 json字符串
			var jsonObjString = JSON.stringify(jsonObj); // 特别像 Java中对象的toString
			alert(jsonObjString)
			
			// json字符串转json对象
			// 把json字符串,转换成为json对象
			var jsonObj2 = JSON.parse(jsonObjString);
			alert(jsonObj2.key1);// 12
			alert(jsonObj2.key2);// abc
			
		</script>




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。