106_JavaWeb_Filter_JSON
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>
- 点赞
- 收藏
- 关注作者
评论(0)