Day22-JSP与Filter
Posted 2月2日
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day22-JSP与Filter相关的知识,希望对你有一定的参考价值。
JSP
Java Server Pages : Java服务器端页面,动态Web技术!
特点
- 开发过程类似html
- 可以嵌入Java代码,提供动态数据
原理
JSP本质上是Servlet,在程序运行中,创建一个work文件夹存放JSP页面最终转换成的java文件,打开可以发现,jsp页面实现了HttpjspBase,继承自HttpServlet,JSP本质上是一个Servlet
源码
- 判断请求(post,get等)
- 内置对象
final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session = null; //session
final javax.servlet.ServletContext application; //applicationContext
final javax.servlet.ServletConfig config; //config
javax.servlet.jsp.JspWriter out = null; //out
final java.lang.Object page = this; //page:当前
HttpServletRequest request //请求
HttpServletResponse response //响应
- 输出页面前增加响应代码
response.setContentType("text/html"); //设置响应的页面类型
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
JSP基础语法
<%= 变量或者表达式 %> JSP表达式
将变量或者表达式输出到客户端
<% 代码块 %>
JSP脚本片段
<%
int sum=0;
for(int i = 0; i<1000 ; i++){
sum+=i;
}
out.println("<h1>"+sum+"</h1>")
%>
代码的再实现
<%
for(int i=0;i<5;i++){
%>
<h1>
Hello,World<%=i>
</h1>
<% } %>
<%! 代码块 %>
JSP声明,提高代码的作用域,代码将会被编译到jsp生成的类下,其他则是生成到_jspService方法中
JSP指令
<%@ page ....%>
通过这个指令可以实现导包,配置错误页面,刷新等等功能
<%@ include file="文件路径" %>
将某个文件放在本页中
如设置多个页面的共同的头部和尾部
<%@include file="common/header.jsp">
<div></div>
<%@include file="common/footer.jsp">
将common文件夹下的头部尾部插入到页面中
缺点
将页面合而唯一,可以会出现变量重名的问题,不够灵活
解决方式
<jsp: include page="common/header.jsp"> 使用jsp标签来拼接页面,实际上还是三个页面
JSP内置对象
- PageContext 存东西
- Request 存东西
- Response
- Session 存东西
- Application 【SerlvetContext】 存东西
- config 【SerlvetConfig】
- out
- page
- exception
pageContext.setAttribute("name1","xx1"); //保存的数据只在一个页面中有效
request.setAttribute("name2","xx2"); //保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","xx3"); //保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","xx4"); //保存的数据只在服务器中有效,从打开服务器到关闭服务器
几种存放数据的区别
request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的!
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车;
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据;
JSP标签、JSTL标签、EL表达式
EL表达式: ${ }
- 获取数据
- 执行运算
- 获取web开发的常用对象
JSP标签
<jsp:forward page="/路径地址.jsp">
<jsp:param name="xx" value="123"></jsp:param>
</jsp:forward>
JSTL
弥补HTML标签的不足
核心标签
- 引入
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 使用标签
https://www.runoob.com/jsp/jsp-jstl.html
JavaBean (实体类)
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取
写法
- 必须拥有无参构造器
- 属性必须私有化
- 使用set、get来操作属性
用法
一般用于和数据库字段做映射 ORM
ORM:对象关系映射
MVC三层架构
Model、View、Controller
Model
-
业务处理 :业务逻辑(Service)
-
数据持久层:CRUD (Dao - 数据持久化对象)
View
- 展示数据
- 提供链接发起Servlet请求 (a,form,img…)
Controller (Servlet)
-
接收用户的请求 :(req:请求参数、Session信息….)
-
交给业务层处理对应的代码
-
控制视图的跳转
Filter
过滤器,用于过滤网站的数据
原理
在web服务器与web资源(sevlet)中加一层过滤器,|||,通过的请求还有响应都会被过滤
运行
-
导入响应的依赖包
-
实现Filter接口,重写对应接口
public class CharacterEncodingFilter implements Filter { //初始化:web服务器启动,就以及初始化了,随时等待过滤对象出现! public void init(FilterConfig filterConfig) throws ServletException { System.out.println("CharacterEncodingFilter初始化"); } //Chain : 链 /* 1. 过滤中的所有代码,在过滤特定请求的时候都会执行 2. 必须要让过滤器继续同行 chain.doFilter(request,response); */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=UTF-8"); System.out.println("CharacterEncodingFilter执行前...."); chain.doFilter(request,response); //让我们的请求继续走,如果不写,程序到这里就被拦截停止! System.out.println("CharacterEncodingFilter执行后...."); } //销毁:web服务器关闭的时候,过滤器会销毁 public void destroy() { System.out.println("CharacterEncodingFilter销毁"); }}
-
在web.xml中配置Filter过滤器
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>com.kuang.filter.CharacterEncodingFilter</filter-class></filter><filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <!--只要是 /servlet的任何请求,会经过这个过滤器--> <url-pattern>/servlet/*</url-pattern></filter-mapping>
以上是关于Day22-JSP与Filter的主要内容,如果未能解决你的问题,请参考以下文章
day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程