1,什么是jsp指令
jsp指令的格式:<%@指令名 attr1="" attr2=""%>,一般都会把jsp指令放到jsp文件最上方,但这不是必须的
jsp三大指令:page,include,taglib,最为常用也最为复杂的就是page指令了
tomcat编译系统会根据jsp的指令信息来编译jsp,生成java文件
在生成的java文件中不存在指令信息
2page指令的pageEncoding和contextType
<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8" %>
3,page属性中的import
<%@page import="java.util.*,com.rl.modol.*"%>
4,page指令的errorPage和isErrorPage,以及javaweb异常处理
<%@ page errorPage="/error.jsp"%>
<%!--若jsp页面出错将跳转到error.jsp,由于是服务器之间的跳转,所以是绝对路径,不需要加项目名--%>
在错误页面加
<%@page isErrorPage="true"%>
<body>
<%=exception.getMessage()%>
</body>
web.xml中也可以进行配置
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
5,page属性isELIgnored
<%@page isELIgnored="false"%>
<%--isELIgnored属性值默认为false--%>
<body>
<%
request.setAttribute("name","钟灵");
%>
<h1>${name}</h1>
<%--${name}是在域中取name的值,若isELgnored="true",则${name}不能获取name的值,会显示为NULL--%>
</body>
6,include指令
1.jsp:
<%@ include file="/2.jsp"%>
<body>
<h1><%=name %></h1>
</body>
2.jsp:
<%
String name="钟灵";
String mypath=request.getContextPath();
%>
可以在2.jsp中引入一些静态资源,比如<script type="text/javascript" src="XX/XX.XX"></script>,然后在1.jsp中直接include 2.jsp,就可以了
7,jsp指令taglib
引入第三方标签的语法
<%@taglib url="http://java.sun.com/jsp/jst1/core" prefix="c"%>
<body>
<c:out value="钟灵"></c:out>
</body>
8,jsp标签include(动态包含)
1.jsp
<%
String name=request.getParameter("name");
%>
<h1><%=name %></h1>
2.jsp
<body>
<jsp:include page="/1.jsp?name=zhongling"></jsp:include>
<%--向1.jsp中传递参数--%>
</body>
9,forward动态标签
login.jsp
<form action="/login.jsp" method="post">
<input type="hidden" name="isSubmit" value="1">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登陆"><br>
</form>
<%
String isSubmit=request.getParameter("isSubmit");
if("1".equals(isSubmit)){
String username=request.getParameter("username");
String password=request.getParameter("password");
if("zhonglong".equals(username)&&"123"equals(password)){
request.setAttribute("userInfo",username+"你好,欢迎登陆");
%>
<jsp:forward page="/success.jsp"></jsp:forward>
<!--服务器之间的的跳转不需要指定项目名-->
<%
}else{
%>
<jsp:forward page="/fall.jsp"></jsp:forward>
<%}}%>
success.jsp
登陆成功
<%
String userInfo=(String)request.getAttribute("userInfo");
%>
<h1><%=userInfo%></h1>
fall.jsp
登陆失败
10,jsp动态标签useBean,setProperty,getProperty
useBean
<%@page import="com.rl.model.Person"%>
<body>
<%--<jsp:useBean id="p" class="com.rl.model.Person"></jsp:useBean>--%>
<jsp:useBean id="p" class="com.rl.model.Person" scope="request"></jsp:useBean>
<jsp:setProperty property="name" name="p" value="zhongling"/>
<%
Person person=(Person)pageContext.getAttribute("p");
Person person1=(Person)request.getAttribute("p");
%>
<%--
<h1>pageContext域</h1>
<%=person%>
<%=person.getName()%>
<%=person.getAge()%>
--%>
<h1>request域</h1>
<%=person1%>
<%=person1.getName()%>
<%=person1.getAge()%>
</body>
Person.java
package com.rl.model;
public class Person{
private String name;
private Integer age;
public void setName(String name){this.name=name;}
public String getName(){return name;}
...
...
}
form.jsp
<form action="/bean.jsp" method="post">
<input type="hidden" name="isSubmit" value="1">
姓名:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="提交"><br>
</form>
bean.jsp
<body>
<jsp:useBean id="p" class="com.rl.model.Person"></jsp:useBean>
<jsp:setProperty property="name" name="p"/>
<jsp:setProperty property="age" name="p"/>
<%--
<jsp:setProperty property="*" name="p"/>
--%>
<%
Person person =pageContext.getAttribute("p");
%>
<h1><%=person%></h1>
<h1>姓名:<%=person.getName()%></h1>
<h1>年龄:<%=person.getAge()%></h1>
<hr>
<%--
<h1>姓名:<jsp:getProperty property="name" name="p"></h1>
<h1>年龄:<jsp:getProperty property="age" name="p"></h1>
--%>
</body>