什么是JSP
Java Server Pages:Java服务器端页面,也和servlet一样用于开发动态web
特点:
①写JSP就像在写html
②区别:html只给用户提供静态数据,JSP页面中可以嵌入JAVA代码,为用户提供动态数据
JSP原理
思路:JSP执行方式
浏览器向服务器发送请求,不管访问什么资源,都是在访问servlet
JSP最终也会被转换为一个java类
JSP本质上就是一个servlet
初始化
public void _jspInit(){
}
销毁
public void _jspDestroy(){
}
调用
public void _jspService(final javax.servlet.http.HttpServletRequest request,final javax.servlet.http.HttpServletResponse response)
Throws java.io.IOException,javax.servlet.Servlet.ServleException{
}
①判断请求
②内置一些对象
Final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session = null; //session
Final javax.servlet.ServletContext application; //applicationContext
Final javax.servlet.ServletConfig config; //config
javax.servlet.jsp.JspWriter out = null; //out
Final java.lang.object page = this; //page 当前页
HttpServletRequest request; //请求
HttpServletResponse response; //响应
javax.servlet.jsp.JspWriter _jsp_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
③输出页面前增加的代码
Response.setContent(“text/html); //设置响应的页面类型
pageContext = _jspxFactory.getPageContext(this,request,response,null,true,8192,true);
_jspx_page_context =pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
这些对象可以在jsp中直接使用
在JSP页面中
只要是java代码就会原封不动的输出
如果是java代码,就会被转换为:
Out.write(“<html>\r\n”);
这样的格式输出
JSP基础语法
任何语言都有自己的语法,JSP作为java技术的一种应用,它拥有一些自己扩充的语法,java所有的语法都支持
JSP表达式
<%--JSP表达式--%>
<%--用来将程序的输出,输出到客户端--%>
<%= new java.util.Date()%>
jsp脚本片段
<%--jsp脚本片段--%>
<%
int sum = 0;
for(int i = 0 ; i < 100 ; i++){
sum += i;
}
out.println("<h1>Sum="+sum+"</h1>");
%>
脚本片段的再实现
<%
int x = 10;
out.print(x);
%>
<p>这是一个jsp文件</p>
<%
int y = 2;
out.println(x+y);
%>
<hr>
<%--在代码中嵌入HTML元素--%>
<%
for(int i = 0 ; i < 5 ; i++){
%>
<h1>hello,world<%= new java.util.Date()%>></h1>
<%
}
%>
jsp声明
<%!
static{
System.out.println("Loading jsp");
}
private int globalvar = 0;
public void test(){
System.out.println("进入了方法test");
}
%>
JSP声明:会被编译到JSP生成java的类中;其他的会被生成到_jspService方法中
在jsp中嵌入java代码即可
jsp的注释不会在客户端显示,html会
jsp指令
<%@page ... %>
<%@include file=””>
9大内置对象
PageContext 存东西
Request 存东西
Response
Session 存东西
Application(ServletContext) 存东西
config(ServletConfig)
Out
Page 不用了解
Exception
pageContext.setAttribute("name1","test1");//只在页面中有效
request.setAttribute("name2","test2");//保存的数据只在一次请求中有效,请求转发会携带这个诗句
session.setAttribute("name3","test3");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","test4");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
Request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如新闻
Session:客户端向服务器发送请求,产生的数据,用户用完一会还有用的,比如购物车
Application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户可能还使用,比如聊天记录
JSP标签、JSTL标签、EL表达式
<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>
EL表达式 ${}
①获取数据
②获取web开发的常用对象
③获取web开发的常用对象
JSP标签
<%--jsp:include--%>
<%--
http://localhost:8080/javaweb_jsp_war_exploded/jspTag.jsp?name1=value1&name2=valu2
--%>
<jsp:forward page="/jspTag2.jsp">
<jsp:param name="name1" value="value1"></jsp:param>
<jsp:param name="name2" value="value2"></jsp:param>
</jsp:forward>
JSTL表达式
JSTL标签库的使用是为了弥补HTML标签的不足,它自定义了许多标签使用,标签的功能和java代码一样
核心标签
引用
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
JSTL标签库使用步骤
①引入对应的taglib
②使用其中的方法
coreif
<body>
<h4>if测试</h4>
<form action="coreif.jsp" method="get">
<%--
EL表达式获取表单中的数据
${param.参数名}
--%>
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登录">
</form>
<%--判断如果提交的用户名是管理员,则登录成功--%>
<c:if test="${param.username=='admin'}" var="isAdmin">
<c:out value="管理员已登录" />
</c:if>
<c:out value="${isAdmin}" />
</body>
corewhen
<body>
<%--定义一个变量score,值为85--%>
<c:set var="score" value="95" />
<c:choose>
<c:when test="${score>=90}">
<h1>你的成绩为优秀</h1>
</c:when>
<c:when test="${score>=80}">
<h1>你的成绩为良好</h1>
</c:when>
<c:when test="${score>=70}">
<h1>你的成绩为合格</h1>
</c:when>
</c:choose>
</body>