什么是JSP?
- Java Server Page:java服务器页面,也和servlet一样用于开发动态web技术。
- 和HTML的区别:HTML只提供静态的数据,JSP可以嵌入Java代码,为用户提供动态数据。
JSP原理
-
浏览器向服务器发送请求,不论访问什么资源,其实都是在访问Servlet!
- JSP在编译过后,最终还是变成了java类,JSP本质上就是Servlet,那个java类中就继承了HttpServlet!
- JSP编译后的java类中有一些方法和内置对象(只有访问了页面才会产生对应的class文件)
//jsp中存在的一些方法 public void _jspinit(){ } public void _jspDestory(){ } //JSP服务,每次走servlet时都会执行这个方法,JSP写的所有的内容都在这个方法内 public void _jspService(HttpServletRequest request,HttpServletResponse response) { }
//Jsp中存在的一些内置对象,俗称jsp 9大内置对象 final javax.servlet.jsp.PageContext pageContext ; //页面上下文 javax.servlet.http.HttpSession session =null; //session final javax.servlet.ServletContext application; //applicationContext,本质就是之前学的ServletContext final javax.servlet.ServletConfig config; //config javax.servlet.jsp.JspWriter out =null; //out final java.lang.Object page=this; //当前页 HttpServletRequest request; //请求 HttpServletResponse response; // 响应 javax.lang.Throwable exception ; //异常
Tips:以上的9大对象可以直接在JSP中使用。
- 在JSP中写的内容 (产生的java文件中会显示如下):
- 如果写的是java代码,就会原封不动的输出。
- 如果写的是HTML代码,则会转换为
out.write("<h1>test</h1>\n")
JSP导入的依赖
<dependency>
<!--Servlet 依赖-->
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<!-- jsp的依赖-->
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<!-- jstl表达式的依赖-->
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<!-- standard标签库-->
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
JSP基础语法
- JSP中利用
<% java代码 %>
符号写java代码 - JSP的注释不会显示在客户端,HTML的注释会显示
JSP指令
- 可以在web.xml文件中配置500错误页面,404页面等
<error-page> <error-code>404</error-code> <location>/errorPage/404.jsp</location><!--这里最前面必须加' / '--> </error-page> <error-page> <error-code>500</error-code> <location>/errorPage/500.jsp</location><!--这里最前面必须加' / '--> </error-page>
- 也可以在jsp文件中头部使用
<%@ page errorPage="errorPage/500.jsp" %>
- 提取公共页面可以用
<jsp:include page="/common/header.jsp"/>
内置对象
- 存储数据的区别:
<%
pageContext.setAttribute("1","1");//保存的数据只在当前页有效
request.setAttribute("3","3");//保存的数据在一次请求中有效,请求转发会携带这个数据(URL不会变)
session.setAttribute("2","2");//保存的数据在一次会话中有效,从浏览器打开,到关闭
application.setAttribute("4","4");//保存的数据在服务器中有效,从打开服务器到关闭服务器
pageContext.getAttribute("1");//获得保存的数据
%>
Tips:JVM双亲委派机制,当某个类加载器需要加载某个
.class
文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。
- 双亲委派机制的作用:
- 1、防止重复加载同一个
.class
。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。 - 2、保证核心
.class
不能被篡改。通过委托方式,不会去篡改核心.class
,即使篡改也不会去加载,即使加载也不会是同一个.class
对象了。不同的加载器加载同一个.class
也不是同一个Class
对象。这样保证了Class
执行安全(比如,自己创建一个包为java.lang.String
,里面写一些方法,结果java根本就不会执行这个类)。
- 1、防止重复加载同一个
JSP标签、JSTL标签、EL表达式
- EL表达式:${ }
- 获取参数
- 执行运算
- 获得web开发常用对象(很少用)
- JSP标签:
<%--jsp实现转发,并且携带参数--%>
<jsp:forward page="/jsptag2.jsp">
<jsp:param name="name" value="cwx">
</jsp:forward>
- JSTL表达式
JSTL标签库的使用就是为了弥补HTML标签的不足,它自定义了许多标签,科供我们使用,标签的功能和java代码一样。- 核心标签(常用)
jstl.png使用前先引入头文件
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
MVC三层架构
- Model层:实体类(pojo)创建数据、管理数据,和数据库交互。
- View层:视图层,JSP展示数据,提供操作的请求。
- Controller层:控制层,Servlet接受用户的请求,实现业务的逻辑方法,响应给客户端内容。
网友评论