JSP总结
-
概念:
本质上是一个servlet,跨平台,依次编写处处运行,组件跨平台,健壮、安全。 -
访问原理:
第一阶段(请求):客户端发起请求,请求jsp到服务器。
第二阶段(处理):Tomcat生成请求对象,然后处理请求。执行jspservlet,将jsp文件转成servlet文件,然后执行该文件。
第三阶段(响应):服务器最后响应处理结果到客户端。 -
jsp三种注释:
前端注释:会被转译,也会被发送,但是不会被浏览器执行。
java注释:会被转译,不会被servlet执行。
jsp注释:不会被转译。 -
JSP的page指令:
<% page 属性名=“属性值” %>
language:声明jsp要被转译的语言
import:声明转译的java文件要导入的包
pageEncoding:jsp文件的数据编码格式
session:转译的servlet中是否开启session支持
errorPage:jsp运行错误跳转的页面
extends:jsp转译的java要继承的父类 -
JSP的局部代码块:
局部代码块中声明的java代码会被原样转译为jsp对应的servlet的jspservice方法中,代码块中声明的变量是局部变量。 -
缺点:
使用局部代码块在jsp中进行逻辑判断,书写麻烦。 -
开发:
servlet进行请求逻辑处理,jsp进行页面展示。 -
jsp全局代码块:
特点:声明的java代码作为全局代码转译到对应的servlet
使用:<% ! 全局代码块%> -
jsp脚本段语句:
特点:帮助快速获取变量或方法的返回值作为数据响应给浏览器
使用:<%=变量或方法名%> -
JSP的静态引入和动态引入:
静态引入(先合并后处理代码):
<%@ indude file=“要引入的jsp文件的相对路径” %>
特点:
会将引入的jsp文件和当前的jsp文件转移为一个java文件,在网页中也就显示合并后的显示效果。
注:静态引入的jsp文件不会单独转译为java文件,当前文件和静态引入的jsp文件中不能使用java代码块声明同名变量。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'includeStatic.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
//int a=5;
%>
<b>我是静态引入页面---网站声明</b>
</body>
</html>
动态引入(先处理各自的java代码,再进行合并):
<jsp:include page="要引入的jsp文件的相对路径“></jsp:include>
特点:将引入的jsp文件单独转译,在当前文件转译好的java文件中调用引入的jsp文件的转译文件。在网页中显示合并后的显示效果。
注意:动态引入允许文件中声明同名变量。
优点:降低jsp代码冗余,便于维护。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'includeActive.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<i>我是动态引入------网站声明</i>
</body>
</html>
- Jsp的转发标签:
<jsp:forward page=“要转发的jsp文件的相对路径”></ jsp:forward>
特点:一次请求,地址栏信息不改变。
注意:在转发标签的两个标签中间除了写<jsp:para value=“str” name=" "/>子标签不会报错,其他任意字符都报错。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'forward.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<b>我是转发页面---forward--<%=request.getParameter("str") %></b>
</body>
</html>
-
Jsp的九大内置对象:
内置对象:jsp文件在转译为其对应的servlet文件的时候自动生成的并声明的对象。在jsp页面直接使用。
注意:内置对象在jsp页面中使用,使用局部代码块或脚本段语句,不能在全局代码块中使用。
内容:
pageContext:页面上下文对象,封存其他内置对象,封存当前jsp运行信息,每个jsp文件单独使用一个pageContext对象。作用域是当前页面。
request:封存当前请求数据的对象。由Tomcat服务器创建一次请求。
session:此对象用来存储用户不同请求的共享数据 ,一次会话。
application:servletContext对象一个项目只有一个。存储用户共享数据的对象,完成其他操作。
response:响应对象,响应请求处理结果给浏览器对象设置响应头,重定向。
out:响应对象,jsp内部使用,带有缓冲区的响应对象,效率高于response对象。
page:代表当前jsp对象,相当于java中的this。
exception:异常对象,存储当前运行的异常信息。
config:servletConfig,用来获取web.xml中的配置数据,完成一些初始化数据的读取。 -
四个作用域对象:
PageContext:当前对象,解决在当前页面内的数据共享问题。
request:一次请求,一次请求的servlet的数据共享。请求转发将数据流转给下一个servlet。
session:一次会话,一个用户的不同请求的数据共享。
application:一个项目内,不同用户的数据共享问题,数据从一个用户流转到其他用户。 -
Jsp路径:
在jsp中资源路径可以使用相对路径完成跳转,但是:
资源位置不可随意更改,需要使用…/进行文件夹的跳出。
使用绝对路径:
/虚拟项目名/资源名。例:<a href="/jsp/jspPro.jsp“>
注意:在jsp中资源的第一个/表示服务器根目录,相当于:localhost:8080。
使用jsp中自带的全局路径声明:
<% String path=request.getContextPath();
String basePath=request.getScheme()+" : // "+request.getServerName()+":"+request.getContextPath() %>
<base href="<%=basePath%>">
作用:给资源前面添加项目路径:http://127.0.0.1:8080/虚拟路径名/
<html>
<head>
<title>jsp基本语法学习</title>
<meta charset="utf-8"/>
</head>
<body>
<h3>jsp基本语法学习</h3>
<hr />
<!-- 局部代码块 -->
<%
//声明java代码域--局部代码块声明
String str="jsp中使用逻辑校验很难受";
int a=2;
if(a>3){
%>
<b>jsp学习很简单</b>
<%} else{%>
<i> <%=str%></i>
<%test();} %>
<!--全局代码块 -->
<%!
int b=5;
public void test(){
System.out.println("我是全局代码块声明");
}
%>
<!--jsp的静态引入 -->
<%@include file="includeStatic.jsp" %>
<!-- jsp的动态引入 -->
<jsp:include page="includeActive.jsp"></jsp:include>
<!-- jsp的转发forward标签 -->
<%-- <jsp:forward page="forward.jsp">
<jsp:param value="aaa" name="str"/>
</jsp:forward> --%>
<!-- jsp的 九大内置对象学习-->
<%
//获取请求数据
String s=request.getParameter("str");
request.getAttribute("str");
%>
<%=s%>
<%
//response.sendRedirect("forward.jsp");
%>
<!--Jsp的路径 -->
<br />
<a href="/jsp/a/a.jsp">a.jsp</a><br />
<a href="a/b/b.jsp">b.jsp</a><br />
</body>
</html>
来源:CSDN
作者:加加大了
链接:https://blog.csdn.net/qq_33700236/article/details/103547193