1.概述
JSP全民Java Server Pages,中文可译Java服务器页面,本质是一个简化的Servlet设计,它是由是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。
特点:跨平台既可以在Linux上也能运行在Windows上。类似于ASP技术,在传统的HTML页面插入Java程序段、JSP标签,从而形成JSP文件,后缀名为(*.jsp)
2.一个简单的Hello
新建Dynamic Web Project 项目名取jspInro
我们再web目录下新建一个hello.jsp,使用Tomcat运行,访问网页
http://localhost:8080/jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>hello JSP</title>
</head>
<body>
<%
out.println("Hello World!");
%>
<br>
<%=new Date().toLocaleString() %>
</body>
</html>
<%@page为jsp的page指令,contentType设置编码,相当于response.setContentType ,pageEncoding表示jsp文件中出现了中文,这些中文将使用的编码方式,import则是导入类,导入多个类彼此用,逗号隔开
3.JSP的页面元素
jsp由7种页面元素组成:
1).静态内容
就是html,css,javascript等内容
2).指令
以<%@开始%>结尾,比如<%@page import="java.util.*"%>
3).表达式
用于输出一段html
4).Scriptlet
在<%%>之间,可以写任何java代码
5).声明
在<%!%>之间可以声明字段或者方法。但是不建议这么做
6). 动作
<jsp:include page="Filename" > 在jsp页面中包含另一个页面。
7). 注释 <%-- -- %>
不同于 html的注释 <!-- --> 通过jsp的注释,浏览器也看不到相应的代码,相当于在servlet中注释掉了
4.常用知识点
上述例子中<%=%>和<%out.println()%>
out是jsp的隐式对象,可以直接使用(jsp中有9大隐式对象)
判断语句
If...else块
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%! int day = 3; %>
<h3>IF...ELSE 实例</h3>
<% if (day == 1 | day == 7) { %>
<p>今天是周末</p>
<% } else { %>
<p>今天不是周末</p>
<% } %>
</body>
</html>
循环语句
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
List<String> words = new ArrayList<String>();
words.add("today");
words.add("is");
words.add("a");
words.add("lucky");
words.add("day");
%>
<table width="200px" align="center" border="1" cellspacing="0">
<%! int fontSize=0; %>
<%for (String word : words) {%>
<tr>
<td><font color="green" size="<%=fontSize%>"><%=word%></font></td>
</tr>
<%fontSize++; %>
<%}%>
</table>
</body>
</html>
指令include
首先准备一个footer.jsp
<hr>
<p style="text-align: center">copyright@2018</p>
通过指令
<%@include file="footer.jsp" %>
在hello.jsp中包含该页面
<body>
<%
out.println("Hello World!");
%>
<br>
<%@include file="footer.jsp" %>
</body>
通过动作<jsp:include page="footer.jsp">页面显示结果一样,但其中的区别是
如果是指令include,footer.jsp的内容会被插入到hello.jsp转译成的hello_jsp.java中,最后只会生成一个hello_jsp.java文件
如果是动作include,footer.jsp的内容不会被插入到hello.jsp转译成的hello_jsp.java中,还会有一个footer_jsp.java独立存在。hello_jsp.java会在服务端访问footer_jsp.java,然后把返回的结果,嵌入到相应中。
传参
在本例中我们在hello.jsp使用动作<jsp:include>,通过<jsp:param>带上参数
<jsp:include page="footer.jsp">
<jsp:param name="year" value="2018" />
</jsp:include>
在footer.jsp中使用request.getParameter("year")取出year
<hr>
<p style="text-align:center">copyright@<%=request.getParameter("year")%>
</p>
跳转
和Servlet的跳转一样,jsp的跳转分服务端跳转和客户端跳转
客户端跳转response.sendRedirect("hello.jsp");
服务端跳转request.getRequestDispatcher("hello.jsp").forward(request.response);
或者使用动作,简化代码<jsp:forward page="hello.jsp">
cookie
一般在运用于登陆,很多网站登陆会出现一个选项,问你是否要一周内或者一个月保持登陆状态,如果选择了,那么一周之内,都不需要再输入账号密码,这个功能,就是靠cookie来实现的
cookie是一种浏览器和服务器交互数据的方式。Cookie是由服务器端创建,但是不会保存在服务器。创建好之后,发送给浏览器。浏览器保存在用户本地。下一次访问网站的时候,就会把该Cookie发送给服务器。
在web目录下创建一个文件setCookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>
<%
Cookie c = new Cookie("name", "Green");
c.setMaxAge(60 * 24 * 60);
c.setPath("127.0.0.1");
response.addCookie(c);
%>
<a href="getCookie.jsp">跳转到获取cookie的页面</a>
创建了一个cookie,名字是name值是"Green"
cookie可以保留一天,如果是0,表示浏览器一关闭就销毁
path表示服务器的主机名,只有浏览器通过这个主机名访问服务器的时候,才会提交这个cookie到服务端
在web目录下创建一个getCookie.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>
<%
Cookie[] cookies = request.getCookies();
if (null != cookies)
for (int d = 0; d <= cookies.length - 1; d++) {
out.print(cookies[d].getName() + ":" + cookies[d].getValue() + "<br>");
}
%>
session
session的中文翻译是会话。会话指的是从用户打开浏览器访问一个网站开始,无论这个网站中访问了多少页面,点了多少链接,都属于一次会话。直到用户关闭浏览器为止,都属于同一个会话。
创建一个setSession.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>
<%
session.setAttribute("name", "tmo");
%>
<a href="getSession.jsp">跳转到获取session的页面</a>
创建一个getSession.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>
<%
String name = (String)session.getAttribute("name");
%>
session中的name: <%=name%>
session原理示意图
禁用cookie如何使用session
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>
<%
session.setAttribute("name", "tmo");
%>
<a href="<%=response.encodeURL("getSession.jsp")%>">跳转到获取session的页面</a>
response.encodeURL方法会把getSession.jsp这个url转换为
getSession.jsp;jsessionid=22424AEA86ADBE89F335EEB649D997A8
通过这个方式,提交jsessionid到服务器。 服务器根据这个jsessionid匹配到对应的session. 与session相关的功能,就可以正常工作了。
session的有效期Tomcat默认配置是30分钟
我们可以通过Tomcat/cong\web.xml中的session-config配置进行调整