Javaweb基础之JSP详解
JSP是什么?
在学习了Servlet之后,使用Servlet进行页面的展现,代码书写过于麻烦,极大地影响了开发的效率,那么有没有一种方式可以让我们像以前写网页一样来进行网页的编程工作呢?解决办法就是使用JSP。
概念:JSP全名为Java Servlet Page,中文名叫做java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导,许多公司参与一起建立的动态网页技术标准。本质上还是Servlet。
访问原理:浏览器发起请求,请求JSP,请求被Tomcat服务器接收,执行JSPServlet,将请求的JSP文件转义成对应的Java文件(也是Servlet),然后执行转义好的Java文件。
JSP的语法和指令
page指令
<%-- jsp的三种注释 1. 前端语言的注释,会被转义,但是不会被浏览器执行 2. java语言注释,会被转义,但是不会被servlet执行 3. jsp注释,不会被转义 page指令 可以写多行 <%page 属性名=属性值 属性名=属性值。。。%> language 声明jsp要转义的语言 import 声明转义的java文件要导入的包,不同的包用逗号分隔 pageEncoding 设置jsp文件的编码格式 content-type 设置浏览器的解析和编码格式 session 设置转义的servlet中是否开启session支持,默认true开启 errorPage 设置运行错误跳转的页面 extends 设置jsp转义的java文件要继承的父类(包名+类名) --%> <%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*,java.lan .*" pageEncoding="utf-8" %> <%@ page session="false" %> <%@ page errorPage="error.jsp" %> <html> <head> <title>$Title$</title> </head> <body> hello </body> </html>
jsp局部和全局代码块和脚本段语句
<%-- jsp的局部代码块 局部代码块中声明的java代码会被原样转义到jsp对应servlet文件的_JspServie方法中 使用:<% %> 类似PHP的 <?php ?> 缺点:使用局部代码块在jsp中进行逻辑判断,书写麻烦,阅读困难,一般在servlet中逻辑判断 jsp的全局代码块 声明的java代码作为全局代码转义到对应的servlet文件 使用: <%! %> 注意:全局代码块声明的代码,需要使用局部代码块调用 jsp的脚本段语句 帮助快速获取变量或者方法的返回值作为数据响应给浏览器,可以写在Jsp文件任意位置 使用: <%=变量名或者方法%> 注意: 不要在变量名或者方法后使用分号. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*,java.lan .*" pageEncoding="utf-8" %> <%@ page session="false" %> <%@ page errorPage="error.jsp" %> <html> <head> <title></title> </head> <body> <!--局部代码块 --> <% // 声明java代码域 String str = "脚本段语局输出展示"; int a = 4; if (a > 3) { %> <b>jsp学习简单</b> <% } else { %> <i><%=str%></i> <% test(); } %> <!--全局代码块 --> <%! int b = 5; public void test() { System.out.println("我是全局代码块声明"); } %> </body> </html>
jsp的静态引入和动态引入
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*,java.lan .*" pageEncoding="utf-8" %> <%@ page session="false" %> <%-- jsp的静态引入 <%@ include file="相对路径.jsp"%> 特点:会将引入的jsp文件和当前jsp文件转移成一个java(Servlet)文件使用 在网页也显示合并后的效果 注意 : 静态引入的Jsp文件不会单独转义成Java servlet文件,当前文件 和静态引入的文件中不能够使用java代码块声明同名变量 jsp动态引入 <jsp:include page="要引入的jsp文件的相对路径"></jsp:include> 特点:会 降低Jsp代码的冗余.将引入的jsp文件单独继承,在当前文件转义好的java文件中调用引入的jsp文件的转义文件 在网页也显示合并后的效果 注意: 动态引入允许文件中声明同名变量 优点: --%> <html> <head> <title></title> </head> <body> <!--静态引入 --> <%@ include file="includeStatic.jsp"%> </body> </html>
jsp的forward转发
<%-- jsp的forward转发 <jsp:forward page="要转发的jsp文件的相对路径"></jsp:forward> 特点:一次请求,地址栏信息不变 注意:在转发标签的两个标签之间除了写<jsp:param name="str" value="aaa" />子标签 不会报错,其他任意字符都会报错,name属性为附带的数据的键名,value为数据内容 注意:会将数据以?拼接在转发路径的后面。 --%>
jsp九大内置对象
<%-- jsp的九大内置对象 jsp文件在转义成其对应的servlet文件的时候自动生成的并声明的对象,jsp页面中使用即可 注意:内置对象在Jsp页面中使用,使用局部代码块或者脚本段语句来使用,不能够在全局代码块中使用 pageContext : 页面上下文对象,封存了其他内置对象,封存了当前jsp的运行信息,每个jsp文件单独拥有一个pageContext 对象 request:封存当前请求数据的对象,有tomcat服务器创建,一次请求 session:此对象来存储用户的不同请求的共享数据 application:也就是servletContext对象,一个项目只有一个,存储用户共享的对象,以及完成其他操作 out:响应对象,Jsp内部使用,带有缓冲区的响应对象,效率高于response对象 response:响应对象,用来响应请求处理结果给浏览器的对象,设置响应头,重定向 page:代表当前jsp页面的对象,相当于this exception:存储了当前运行中的异常信息,使用此对象需要在page指令中配置isError="true"开启 config:也就是ServletConfig,主要是用来获取web.xml中的配置数据,完成一些初始化数据的读取 --%>
四个作用域对象
- pageContext:当前页面,解决了在当前页面内的数据共享问题,获取其他内置对象
- request:一次请求,一次请求的servlet的数据共享,通过请求转发,将数据流给下一个servlet
- session:一次会话,一个用户的不同请求的数据共享,将数据从一次请求流转给其他请求
- application:项目内,不同用户的数据共享问题,将数据从一个用户流转给其他用户
共同作用:数据流转
发表评论