什么是JSP
概念
简化的servlet代码,在HTML标签中嵌套java代码,用以高效开发Web应用的动态页面
作用
替换显示页面部分的Servlet(*.jsp替换XxxJSP.java)
JSP开发
创建JSP
在web目录下新建*.jsp文件
访问JSP
Htto://localhost:8080/项目名称/资源名称
Servlet与JSP
- 关系
- JSP文件在容器中会转换成servlet来执行
-JSP是对servlet的高级封装。本质上还是servlet- 区别
-与servlet相比,JSP可以很方便的编写或修改html页面,不需要大量的println语句
JSP实现原理
Tomcat会把jsp文件转换成java代码,进而转换成class文件运行,结果通过response返回给客户端
JSP与HTML集成开发
脚本
脚本可以编写Java语句,变量,方法或表达式
普通脚本
语法:<% Java代码 %>
注意:
1.普通脚本可以使用所有java语法,除了定义函数
2.脚本与脚本之间不可嵌套,脚本与html标签也不可以嵌套
3.普通脚本声明的变量是局部变量
<%
int a=20;
out.print(a);//打印内容在客户端页面
System.out.println(a);//打印内容在控制台
%>
声明脚本
语法:<%! 定义变量,函数 %>
注意:
1.声明脚本声明的变量是全局变量
2.声明脚本的内容必须在普通脚本<% %>调用
3.如果声明脚本的函数具有返回值,使用<%= %>调用
<%!
int a=10;
public int play()
{
System.out.println("--good--");
return 10;
}
%>
输出脚本
语法:<%=java表达式 %>
输出脚本是把代码内容打印在客户端上,可以是数字,字符串,函数…
<%=play()%>
<%="不错不错"%>
<%=12345%>
JSP注释
<%--注释--%>JSP注释,注释内容不会发送至浏览器
<!--注释-->HTML注释,注释内容可以在网页源代码看到
JSP指令
JSP指令是用来设置和整个页面相关的属性
指令 | 描述 |
---|---|
<%@ page…%> | 定义页面的依赖属性,比如脚本语言,error页面 |
<%@ include…%> | 包含其他文件 |
<%@ taglib…%> | 引入标签库的定义,可以是自定义标签 |
Page指令
语法:<%@ page arrtibute1="value1" arrtibute2="value2"%>
Page指令为容器提供当前页面的使用说明,一个JSP页面可以包含多个Page指令
属性 | 描述 |
---|---|
contentType | 指定当前JSP页面的字符编码格式 |
errorPage | 指定当前页面错误时需要转向的错误处理页面 |
isErrorPage | 指定当前是否可以作为一个错误处理页面 |
import | 导入需要使用的java类 |
language | 定义JSP页面所用的语言,默认是Java |
session | 指定JSP页面是否使用session,true是立即创建,false是使用时创建(一般不需要管,默认为true) |
pageEncoding | 指定JSP页面的解码格式 |
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %>
<%@ page import="java.util.Date"%>
include指令
- 语法:<%@ include file=“被包含的JSP路径”>
- 通过include的指令来包含其他文件
- 被包含的可以是jsp文件,html文件,文本文件。包含的文件就好像是当前文件的一部分会被同时编译
<%@include file="Header.jsp"%>
...
<%@include file="Foot.jsp"%>
但是这个不建议使用,后面会介绍更好用的方法
taglib指令
后面学习的EL会使用到
语法:<%@ taglib uri=“外部标签库路径” prefix=“前缀”%>
引入jsp的标准库
动作标签
- 语法:<jsp:action_name arrtibute=“value”/>
- 动作标签指的是jsp页面在运行期间的指令
include
- 语法:<jsp:incluude page=“相对地址”/>
- jsp:include动作元素会将外部文件包含在jsp文件中
page:包含在页面的相对位置
注意:前面的include的指令是将外部文件的代码复制到jsp文件中,可能会造成重名的错误,而这里的jsp指令的include是将外部文件的输出结果输入jsp文件,所以推荐使用这种方法。
useBean
- 语法:<jsp:useBean id=“name” class=“packge.className”/>
jsp:useBean用来加载一个将在jsp页面使用的javaBean
在类载入后,我们可以通过jsp:setProperty和jsp:getProperty动作来修改和获取Bean属性
在这里的class是实体类的路径,id是对象名
<jsp:useBean id="user" class="com.feng.entity.User"/>
<jsp:setProperty name="user" property="password" value="123"/>
<jsp:getProperty name="user" property="name"/>
setProperty
可以在jsp:useBean元素后使用jsp:setProperty进行属性赋值
属性 | 描述 |
---|---|
name | name属性是必需的。它用来表示哪个useBean |
value | value属性是可以选的。它用来指定Bean的值 |
property | property属性是必需的。它用来设置哪个属性 |
getProperty
jsp:getProperty动作提取属性的值,然后转换为字符串,然后输出,(通过这个
可以直接打印在页面上)
属性 | 描述 |
---|---|
name | 要检索的Bean属性名称。Bean必须已定义 |
property | 表示要提取的属性的值 |
forward
- 语法:<jsp: forward page=“相对URL地址”/>
把请求转发到别的页面
param
语法:<jsp: param name="" value=""/>
在转发动作内部使用,做参数传递
转发前A页面:
<jsp:forward page="B.jsp">
<jsp:param name="name" value="feng"/>//这个数据不是存储在作用域里,而是在请求上所以不是arrtibute,而是parameter
</jsp:forward>
转发后B页面:
<%
String name=request.getParameter("name");//需要用到getParame接收数据
%>
<%=name%>
内置对象
由jsp自动创建的的对象,可以直接使用
四大域对象
jsp有四大作用域对象,存储数据和获取数据方式一样,不同的是取值范围的差别
* pageContext(java.servlet.jsp.PageContext)当前jsp范围
* request(java.servlet.http.HttpServletRequest)一次请求有效
* session(java.servlet.http.HttpSession)一次会话有效(浏览器关闭)
* application(java.servlet.ServletContext)整个Web应用有效(服务器重启或关闭)
<%
pageContext.setAttribute("pageContext","haha");
String s=(String) pageContext.getAttribute("pageContext");
String m=(String) request.getAttribute("requestScope");
String n=(String) session.getAttribute("sessionScope");
String k=(String) application.getAttribute("applicationScope");
%>
pageContext对象
* pagecontext对象是java.servlet.jsp.PageContex类的实例,拥有
作用域,用来代表整个jsp页面
* 当前页面的作用域对象,一旦跳转则失效
* 通过setArrtibute存值(name="",value="")
* 通过getArrtibute取值(name="")
* 用于获取其他8个内置对象或者操作其他对象作用域
<%
//<!--获取其他8个内置对象-->
pageContext.getRequest();
pageContext.getResponse();
pageContext.getException();
pageContext.getSession();
pageContext.getOut();
pageContext.getPage();
pageContext.getServletConfig();
pageContext.getServletContext();
%>
<%
//pageContext操作其他作用域
pageContext.setAttribute("page","123");//当前jsp有效
pageContext.setAttribute("req","aaa",pageContext.REQUEST_SCOPE);
pageContext.setAttribute("sess","bbb",pageContext.SESSION_SCOPE);
pageContext.setAttribute("app","ccc",pageContext.APPLICATION_SCOPE);
String s1=(String)pageContext.getAttribute("req");
String s2=(String) pageContext.getAttribute("sess");
String s3=(String) pageContext.getAttribute("app");
//这个查找是遵循:pageContext,request,session,application顺序
String s4=(String)pageContext.findArrtibute("req");
%>