jsp三种的注释:
// 前端语言注释:
被转移是指在编译成.class文件时会不会被转移执行
会被转义,也会被发送,但是不会被浏览器显示
java语言注释:
<!--写注释-->
会被转义,但不会被servlet执行
jsp注释
<%-- 注释--%>
不会被转义(把普通注释的!改为%,前后都有%)
java 中的注释不会被执行 -->
<%-- jsp注释 jsp的page 指令学习 <%@page 属性名="属性值" 属性名="属性值"...%>
language, 声明jsp要被转移的语言是Java语言 import:声明转义的Java文件要转移的包 pageEncoding
:设置的是当前jsp保存的编码格式为 utf=8 contextType : 设置响应格式
jsp转成servlet时默认时支持session的, session :
设置转义的servlet中是否开始session支持,默认是true。支持 errorPage="error.jsp"
,编译不错,执行报错,会跳转到error.jsp页面 extends : 设置jsp在转义的Java文案金要继承的父类(包名+类名)
高版本的jsp把pageEncoding 和contextType的格式合成一个pageEncoding
当一按保存就把文件的格式保存为ios8859-1,但是jsp底层的格式是utf-8所以会出现乱码
jsp的局部代码块,需要进行声明,不需要转义,原样发送
特点: 局部代码块中声明的Java代码会被原样转义到jsp对应的servlet文件的_jspService 方法中
代码块中声明的变量都是局部变量
使用 :<% java 代码 %>
缺点:
使用局部代码快的缺点,抒写麻烦,阅读困难
开发:servlet进行逻辑请求处理,使用jsp进行页面展现
jsp的全局的代码块,声明全局变量,可以定义方法
特点: 声明的Java代码作为全局代码转义到对应的servlet类中
注意:
使用全局的代码块,调用时使用局部代码块调用
jsp的脚本端语句:
特点:帮助我们快速的获取变量或者方法的返回值作为数据响应给浏览器
使用:<%=变量名/方法名>
注意,不要再变量名|方法名后使用分号
位置: 出jsp 的page 指令外的任意html中的
Jsp的静态引入:
把静态进入的页面和当前页面合成一个 转换为一个servlet
<%@ file = "要引入的jsp的文件的路径"%>
注意:静态引入的jsp不会单独转换为java(servlet)文件
当前文件和静态引入的jsp文件中不能够使用java代码块声明的同名变量
在静态引入时报Duplicate local variable path,是可能因为有变量名冲突
把两行Java代码删除
jsp的动态引入:
<jsp:include page = "动态引入的jsp的路径"> </jsp:include>
特点: 会将引入的jsp文件进行单独的转义,当前文案金转义好的Java文案金中调用
引入的jsp文件的转移文件
在网页中显示合并后的显示效果
注意:
动态引入的文件中可以使用同名变量
优点:降低了jsp的代码冗余
jsp的转发
<!-- jsp的转发 forward.jsp-->
一次请求,地址不该
page=相对路径
这句化不能有空格
<jsp:forward page="forward.jsp"></jsp:forward>
错误
<jsp:forward page="forward.jsp"> </jsp:forward>
在转发标签的两个标签中间处理写<jsp:param value="str" name="aaa"/>
子标签不会报错,其他任意字符都会报错
会把这个子标签的内容添加后流转给forward.jsp
取值: html中的内容相当于时Java中的service方法中的,
可以直接使用request对象进行取值
<%=request.getParameter("str")%>
注意: 会将数据以?的形式拼接在转发路径的后面
jsp中 的九大内置对象:
内置对象
html中的内容相当于service中的方法
注意: 内置对象在jsp页面中使用,使用局部代码块,或者脚本段语句 来使用,
不能再全局代码块中使用,
局部代码块再service方法中 局部代码块,相当于servlet中的一个普通的方法
<%=request.getParameter("str")%> 是脚本段
内置对象:
pageContext 页面上下文对象,封装了剩下的8个对象
一个jsp有有一个pageContext对象
请求执行pageContext 对象就会被销毁,作用域是当前jsp
request
session
application = servletContext
response: 可以设置向应头,重定向
out :响应对象,jsp内部使用,带有h缓冲取的对象,效率高于response对象,但是不能设置响应头
page = 当前对象 本身 java中的this
exception :异常对象,存储了 当前运行时的异常信息
注意:使用此对象,需要在page 中使用属性对象 isErrorPage="true"开启
config = ServletConfig
Session: 一次对话,一个用户的不同请求数据共享,将数据从一次请求转发给其他请求
Application 项目内: 不同的用户的数据共享问题,将数据从一个用户流转给其他用户
jsp的路径: 在jsp中的资源路径可以使用相对路径,但是 问题一: 资源的位置不可以随意更改, 问题二:
在jsp中写绝对路径 /项目名/jsp名 这里的/代表了服务器的根目录,相当于localhost:8080
解决:
1、可以使用绝对路径(重点)
比如说 a.jsp 调用 b.jsp,如果写相对路径 ,当a.jsp的路径变动时,b.jsp 相对与
a.jsp的路径也就改变了
2、使用jsp中的 自带的全局路径声明
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
作用: 自动给资源前面添加项目路径,使用时,直接写资源名
http://127.0.0.0:8080/虚拟项目名/项目
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isErrorPage="true" %>
--%>
<!-- <b></b> -->
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!-- 实际上是Java代码 -->
<html>
<head>
<title>jsp的基本语法学习</title>
<meta charset="utf-8">
</head>
<body>
<h3>jsp的基本语法学习</h3>
<hr/>
<%
//声明Java的代码域 , a大于3 输出jsp学习
String str = "jsp中使用java,阅读性差";
int a= 2;
if(a>3){
%>
<b>jsp学习</b>
<% } else {%>
<i>jsp中使用java,阅读性差</i>
<i><% out.write(str); %></i>
<!--一个标签的内容时局部代码中的一个字段 -->
<i><%=str %></i>
<% test(); } %>
<!-- 全局代码块 -->
<%!
public void test(){
System.out.println("全局代码块");
}
%>
<!-- jsp的静态引入 -->
<jsp:include page="include.jsp"></jsp:include>
<%@ include file ="includeActiv.jsp" %>
<!-- jsp的转发 forward.jsp-->
<jsp:forward page="forward.jsp"></jsp:forward>
<!--把这个数据str流转给 forword.jsp -->
<jsp:forward page="forword.jsp">
<jsp:param value="" name=""/>
<jsp:param name="aaa" value="str" />
<jsp:param value="bbb" name="key"/>
</jsp:forward>
<!-- jsp中的九大内置对象 -->
<%
//获取请求数据 , ?str=666 可以 相当于 request.setAttribute("str","666")
String s = request.getParameter("str");
request.getAttribute("str");
%>
<%=s%>
<!-- 重定向 -->
<%response.sendRedirect("1.jsp"); %>
</body>
</html>