一、JSP指令
JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。JSP指令有三个:
指令 | 描述 |
---|---|
<%@ page … %> | 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等 |
<%@ include … %> | 包含其他文件 |
<%@ taglib … %> | 引入标签库的定义 |
-
page
autoFlush:自动刷新 (true,false:默认)
contentType:页面文本类型 “text/html”
errorPage: 如果存在错误页面,就跳转至指定的页面 【不推荐使用,推荐在XML中配置】
language:JSP中使用的语言,默认是java
pageEncoding:页面编码
import:因为jsp本质上就是一个servlet,所以需要导入相关jar包才能使用<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-
include
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行
file属性:【要导入页面,一般都是不完整的网页,只包含部分】
<%@ include file="文件相对 url 地址" %>
案例:实现在一个JSP中引入其他JSP文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>header</title> </head> <body> <h1>我是header</h1> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>footer</title> </head> <body> <h1>我是footer</h1> </body> </html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>test3</title> </head> <body> <%@include file="header.jsp"%> <h1>我是test3</h1> <%@include file="footer.jsp"%> </body> </html>
运行结果:
-
taglib
JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
<%@ taglib uri="uri" prefix="prefixOfTag" %>
二、JSP标签
-
语法:<jsp:XXX >
-
jsp:include page="要包含的页面"
jsp:include 和 @include 区别:
jsp:include 动态包含 :他不会把包含进来的页面和自己的页面融合成为一个servlet (推荐使用)
@include 静态包含 : 他会把包含进来的页面和自己的页面融合成为一个servlet
<jsp:include page="common/header.jsp"/> <h1>我是tag页面</h1> <jsp:include page="common/footer.jsp"/>
-
jsp:forward page="要转发的页面"
URL不变,本质就是request的请求转发,可以携带参数;可以通过request取出来这个携带的参数,一般配合
<jsp:param>
使用 -
jsp:param
一般配合<jsp:forward>
使用,携带参数<jsp:forward page="index.jsp"> <jsp:param name="username" value="kuangshen"/> <jsp:param name="age" value="18"/> </jsp:forward>
三、在jsp中使用Java实体类
实体类:pojo,entity,beans…
应包含:属性私有,get/set ,有参,无参构造, toString();除此之外还可以在set赋值方法内加入条件限制判断
实体类:
package org.westos.jsp;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
在jsp页面使用实体类方式一——jsp标签操作
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>test4</title>
</head>
<body>
<%--
id:实例化对象的名称,对象名
class:要实例化的类
scope:对象的作用域,默认是page,千万不要放在application中;
--%>
<jsp:useBean id="student" class="org.westos.jsp.Student" scope="page"/>
<%--jsp标签--%>
<%--设置值--%>
<jsp:setProperty name="student" property="name" value="小学生"/>
<jsp:setProperty name="student" property="age" value="18"/>
<%--获取值--%>
<jsp:getProperty name="student" property="name"/>
<jsp:getProperty name="student" property="age"/>
</body>
</html>
在jsp页面使用实体类方式二——jsp基本语法实现
<%@ page import="org.westos.jsp.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>test5</title>
</head>
<body>
<%
Student student = new Student("小学生",18);
%>
<%--获取值--%>
<%=student.getName()%>
<%=student.getAge()%>
</body>
</html>
四、EL表达式
${page、session、request、Application的变量}
五、过滤器(Filter)
JSP 和 Servlet 中的过滤器都是 Java 类。过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。可以将一个或多个过滤器附加到一个 Servlet 或一组 Servlet。过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。
过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:
- 在客户端的请求访问后端资源之前,拦截这些请求。
- 在服务器的响应发送回客户端之前,处理这些响应。
过滤器主要用来实现过滤乱码和一些违规词语
序号 | 方法 & 描述 |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) 该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet 容器将先调用过滤器的 doFilter 方法。FilterChain 用于访问后续过滤器。 |
2 | public void init(FilterConfig filterConfig) web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。 |
3 | public void destroy() Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。 |