JSP指令
JSP指令只有是三个:page、include 、taglib(标签)
公式:
<%@ 指令名 属性名=属性值;[属性名=属性值;属性名=属性值...]%>
page指令
- autoFlush:自动刷新(True,False:默认)
- contenType:页面文本类型"text/html"
- errorPage:如果存在错误页面,就跳转到指定的页面(不推荐在jsp中使用,因为在web.xml中可以配置更为方便的…)
- language:JSP中使用的语言,默认为java
- pageEncoding:页面编码
- import:因为jsp本质上就是servlet,所以需要导入相关jar包才能使用
include指令
导入其他页面到本页,网站中一般由一些公用的位置,我们可以提取出来,比如网站的头部和尾部
file属性:(要导入的页面,一般都是不完整的页面,值包含部分)
taglib标签库
在jsp中有大量的java代码十分痛苦.所以在开发中我们可以使用一些现成的标签库,就相当于使用一些替代java代码的标签语言
java代码的标签语言
out.print()----------------------> <c:out>:这个c就是一个别人定义好的标签库,像这样的库有非常多,我们甚至于可以自己定义;
示例代码:
Page标签指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
</body>
</html>
上面我们说到一些错误的页面,不建议在jsp页面中写jsp指令,我们在web.xml中配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--如果网站中出现了404,就跳转到指定的页面-->
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
<!--500-->
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.jsp</location>
</error-page>
<!--异常处理-->
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error/exception.jsp</location>
</error-page>
</web-app>
include指令:包含页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div>
<h1>我是footer</h1>
</div>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div>
<h1>我是header</h1>
</div>
<body>
<%--使用include指定加载网页其他部分--%>
<%@include file="common/header.jsp"%>
<h1>我是index页面</h1>
<%@include file="common/footer.jsp"%>
</body>
JSP标签
**作用:**为了避免在JSP中有大量的代码,造成页面不好维护;
语法:
<jsp:xxxx>
- jsp:include page属性:要包含的页面地址
<jsp:include page="index.jsp"></jsp:include>
<jsp:include page="index.jsp"/>
JSP指定和JSP标签的include有什么区别呢?
答:
- @include属于静态包含:它会把包含进来的页面和自己的页面融合成为一个servlet
- jsp:include属于动态包含,它不会把包含进来的页面和自己的页面融合成为一个servlet(推荐使用,容错率更高)
- 当在不同的页面定义了同一个变量,那么使用@include就会报错,因为在一个servlet中不能定义多个同一变量,而jsp:include中却可以顺利运行
- jsp:forword page属性:要转发的页面,url不变
本质就是Request的请求转发,可以携带参数,可以通过request取出来这个携带的参数,一般配合<jsp:param>使用 - jsp:param
一般配合jsp:forword使用,携带参数
<jsp:include page="common/header.jsp"/>
<h1>我是tag页面</h1>
<jsp:include page="common/footer.jsp"/>
<jsp:forward page="index.jsp"/>
<jsp:forward page="index.jsp">
<jsp:param name="username" value="kuangshen"/>
<jsp:param name="age" value="18"/>
</jsp:forward>
index页面的取出代码
名字:<%=request.getParameter("username")%>
年龄:<%=request.getParameter("age")%>
- 和实体类相关的标签
- 先创建一个实体类
public class Student {
private String name;
private int id;
private int age;
private boolean isGraduate;//是否毕业
public Student() {
}
public Student(String name, int id, int age, boolean isGraduate) {
this.name = name;
this.id = id;
this.age = age;
this.isGraduate = isGraduate;
}
public String getName() {
return name;
}
public void setName(String name) {
return;
}
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isGraduate() {
return isGraduate;
}
public void setGraduate(boolean graduate) {
isGraduate = graduate;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", id=" + id +
", age=" + age +
", isGraduate=" + isGraduate +
'}';
}
}
jsp:useBean标签:使用实体类的jsp标签
jsp:setProperty标签:为实体类属性赋值的标签
jsp:getProperty标签:取出实体类属性的值
创建一个jsp页面
<%@ page import="com.pzy.pojo.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--如何通过jsp使用自定义的对象--%>
<%--
Student student = new Student();
%>--
<%--
jsp:useBean标签
创建一个类的实例化对象;
java代码:Student student = new Student();
属性:
id:实例化对象的名称,对象名
class:要实例化的类
scope:对象的作用域,默认是page,千万不要放在application中;
--%>
<jsp:useBean id="student" class="com.pzy.pojo.Student" scope="page"/>
<%--jsp标签--%>
<%--setProperty默认调用的是实体类中的set方法--%>
<jsp:setProperty name="student" property="id" value="2"/>
<jsp:setProperty name="student" property="age" value="18"/>
<jsp:setProperty name="student" property="name" value="暮凌寒雪"/>
<jsp:setProperty name="student" property="graduate" value="false"/>
<%--普通方法
<%
student.setAge(24);
student.setName("寒雪");
student.setId(001);
%>
--%>
<%=student.getAge()%>
<%=student.getName()%>
<%=student.getId()%>
<%=student.isGraduate()%>
<hr>
<%--el表达式--%>
${student.age}
${student.name}
${student.id}
${student.graduate}
<hr>
<%--getProperty默认调用的是实体类中的get方法--%>
<jsp:getProperty name="student" property="age"/>
<jsp:getProperty name="student" property="name"/>
<jsp:getProperty name="student" property="id"/>
</body>
</html>