(1)JSP介绍
(2)JSP的特点
JSP在本质上还是Servlet,是一种简化的Servlet设计,但JSP是跨平台的,一次编写处处运行,提高了代码的健壮性和安全性。
(3)JSP的访问原理:
浏览器发起请求,请求JSP,请求被Tomcat服务器接收,执行JspServlet将请求的JSP文件转义成为对应的java 文件(也是Servlet),然后执行转义好的java文件。
(1)JSP的语法、指令和标签
JSP代码示例
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP</title>
</head>
<body>
</body>
</html>
如上所示,处理第一行的代码属于JSP外,下面的和HTML页面模板代码没有差别。
(2)JSP的注释
前端注释格式:前端使用的注释格式在JSP里面能使用,虽然会被转译,也会被发送,但是不会被浏览器执行。
<!-- 注释内容 -->
Java注释格式:Java语言注释格式在JSP里面使用,虽然会被转译,但是不会被servlet执行。
第一种
//注释内容
第一种
/*注释内容*/
第一种
/**
*注释内容
*/
JSP注释格式:JSP的专用注释格式不会被转译,一般也推荐使用这种注释。
<%-- 注释内容 --%>
(3)JSP的指令和标签
① page指令
<%@page 属性名="属性值" 属性名="属性值"...%>
常见属性
contentType="text/html;charset=UTF-8"
。② taglib指令
导入标签库、命令库等
<%@ taglib uri="路径" prefix="c"%>
③ include标签
导入文件(jsp文件),jsp文件的引入,能够降低jsp代码的冗余,也便于后期的维护升级。
静态引入:表示静态引入其他jsp页面内容,将引入的jsp文件和当前的jsp文件转译成一个java文件。
<%@ include file="url路径"%>
示例
<%@ include file="test.jsp"%>
需要注意的是,引入的jsp文件和当前jsp文件不能存中同名的变量。
动态引入:表示动态引入其他jsp文件,引入的jsp文件会被单独转译,在当前文件转译好的java文件中调用引入的jsp文件的转译文件,在页面显示时会显示两个jsp文件合并后的内容。
<jsp:include page="url路径"></jsp:include>
示例
<jsp:include page="test.jsp"></jsp:include>
动态引入允许引入的jsp文件和当前jsp文件存中同名变量。
④ forward标签
forward指令表示请求转发,请求转发的地址栏信息不会发生改变。
语法
<jsp:forward page="url路径" >jsp:forward>
示例:
<jsp:forward page="url路径" >
<jsp:param value="value" name= "name"/>
jsp:forward>
<% 获取请求转发携带的数据 %>
<%=request.getParameter("name")%>
表示在请求转发时可以携带键值对形式的数据
在转发标签的两个标签中间除了写
子标签不会报错,其他任意字符都会报错,携带的数据会一?
的形式凭借在转发路径的后面。
在JSP里面可以编写很多java代码,代码的语法与java语法类似,常见的代码格式有局部代码块、全局代码块
(1)局部代码块
局部代码块格式:
<% java代码 %>
局部代码块示例
if…else语法
<body>
<%
int a = 1;
if (a > 2) {
%>
<p>a的值大于2</p>
<%
} else {
%>
<p>a的值小于2</p>
<%
}
%>
</body>
for循环语法
<body>
<%
for(int i = 0; i < 10; i++){
%>
<%=i %>
<%
}
%>
</body>
从上面的示例可以发现,局部代码块在JSP里面会被原样的转译成对应的java代码语言,使用这种代码块会使整个JSP看起来比较繁琐和复杂,书写的时候也比较麻烦,阅读也很困难,特别是在有很多逻辑结构的时候。
(2)全局代码块
全局代码块可以用来声明变量,格式为
<%! 全局代码块 %>
全局代码块示例
<body>
<%!
public void show() {
System.out.print("全局代码块");
}
%>
</body>
全局代码块声明的java代码能作为全局代码转译到对应的servetl类中,但是全局代码声明的代码需要使用局部代码块来调用。
(3)脚本段语句(变量)
语法
<%=变量值或者方法 %>
脚本段语句能够快速的获取变量或者方法的返回值作为数据相应给浏览器,需要注意的是,这里不需要在末尾添加分号
(1)内置对象介绍
(2)九大内置对象
可以在尖括号里面直接在使用
isErrorpage= "true"
开启。四大作用域作用范围依次增大,优先级依次减小。
(1)介绍
EL全称: Expression Language,是一种写法非常简介的表达式。语法简单易懂,便于使用。
(2)EL表达式的作用
(3)语法
语法结构: ${expression]}
提供和[ ]
两种运算符来存取数据。
使用之前,需要使用jsp的命令将其jar包导入jsp之中。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
想要前端jsp获取后端传入到前端的数据,需要使用EL表达式获取值
${变量名}
(1)使用EL表达式获取一个对象中的值
后端User类
public class User{
private int age;
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
}
Servlet类
User user = new User();
int age = 100;
user.setAge(age);
//将对象存入request域中
request.setAttribute("user",user);
//请求转发
RequestDispatcher rd = request.getRequestDispatcher("jsp的路径");
rd.forward(request, response);
前端jsp获取
${
user.getAge() }
(2)EL获取一个后端传入到前端的集合数据
Servlet类
List<String> list = new ArrayList<String>();
list.add("admin");
list.add("root");
list.add("123456");
list.add("qwer");
//将对象存入request域中
request.setAttribute("list",list);
//请求转发
RequestDispatcher rd = request.getRequestDispatcher("jsp的路径");
rd.forward(request, response);
前端获取数据
//获取指定下标的单个数据
${
list[index]}
//获取整个集合的值,需要遍历
<c:forEach var = "变量名" items="后端传入的变量名(如list)">
${
变量名}
</c:forEach>
(3)EL表达式处理Session数据
获取Session 的值 ${sessionScope.user}
后端代码类
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String userName = request.getParameter("userName");
String passWord = request.getParameter("passWord");
User user = new User();
user.setName(userName);
user.setPassword(passWord);
//将这个数据存放到session中,
request.getSession().
setAttribute("user",user);
request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
}
前端获取session
<body>
<p>前端获取到的后端的session中的userName为:</p>
${
sessionScope.userName}
<p>前端获取到的后端的session中的passWord为:</p>
${
sessionScope.passWord}
</body>