Java服务器页面(JavaServer Pages,简称JSP)是一种用于开发动态网页的技术,它允许开发人员嵌入Java代码和特定的JSP标签在HTML页面中。本教程将带你快速入门JSP开发,为你展示基本概念和实用技巧。
jsp标签通常使用<% %>作为标签的开头和结尾
JSP页面在服务器端被转换为Java servlets,然后在服务器上执行,产生的结果(通常是一个HTML页面)被发送到客户端。以下是Java执行JSP的基本过程:
<% %>)和内置标签(如,等)都会被转换为Java代码。以上就是Java执行JSP的基本过程。需要注意的是,这个过程并不是线性的,也就是说,在一个JSP页面被请求和执行的过程中,可能会涉及到多次的解析和编译。例如,如果JSP页面的数据需要从数据库中获取,那么在第一次请求该页面时,JSP引擎可能需要先将JSP文件转化为Java servlet,然后在执行servlet的过程中访问数据库,获取数据。如果这些数据发生改变,那么在下一次请求该页面时,可能需要重新执行这个过程。
首先,确保你的系统中已经安装了Java开发环境。然后,下载并安装一个Java Web服务器,比如Apache Tomcat。
在Tomcat的webapps目录下创建一个新文件夹(比如mywebapp),在该文件夹内创建一个JSP文件(比如index.jsp)。
我的第一个JSP页面
Hello, World! This is my first JSP page.
<%
String message = "Welcome to JSP!";
out.println("" + message + "
");
%>
运行tomcat,在浏览器中访问http://localhost:8080/mywebapp/index.jsp,你将看到你的第一个JSP页面。
<%! declaration; [ declaration; ]+ ... %>
<%! int count = 0; %>
<%! void increaseCount() { count++; } %>
<%= 表达式 %>,直接在两个百分号之间写代码即可。Count: <%= count %>
<%
for (int i = 0; i < 5; i++) {
out.println("Iteration: " + i + "
");
}
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>
示例如下所示:
页面1:
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<%@ include file="success.jsp" %>
<html>
<head>
<title>Error Pagetitle>
head>
<body>
<h1> you have operated failedh1>
<%@ include file="success.jsp" %>
body>
html>
页面2:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Success Pagetitle>
head>
<body>
<h1> you have operated successfullyh1>
body>
html>
JSP标签库(JSTL)提供了更丰富的标签,用于简化JSP页面的开发。
WEB-INF/lib目录下。<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Iteration: ${i}
JSP也可以处理用户输入,比如表单提交。
在process.jsp中处理表单数据。
<%@ page import="java.io.*" %>
<%
String username = request.getParameter("username");
out.println("Hello, " + username + "!");
%>
这就是一个简单的JSP页面,它可以接受用户输入并显示相应的消息。
cookie是客户-服务器通话过程中维持状态的一种技术,存储在客户端,或者说浏览器。
cookie通常在http信息头中设置。
以下是常用的jsp处理cookie的方法:
Cookie对象Cookie cookie = new Cookie("username", "John");
Cookie的属性// 设置`Cookie`的过期时间
cookie.setMaxAge(3600); // 1小时
Cookie的路径// 设置`Cookie`的路径
cookie.setPath("/myapp");
Cookie的域// 设置`Cookie`的域
cookie.setDomain(".myapp.com");
Cookie的HTTP头信息// 设置`Cookie`的HTTP头信息
cookie.setHttpOnly(true); // 不允许客户端脚本访问
cookie.setSecure(true); // 只允许HTTPS协议访问
Cookie到响应response.addCookie(cookie);
Cookie对象Cookie cookie = request.getCookies()[0];
CookieCookie cookie = new Cookie("username", null);
cookie.setMaxAge(0); // 设置过期时间为0,即立即删除
response.addCookie(cookie);
以下是一个完整的Cookie处理的示例:
<%@ page import="java.util.*" %>
<%
Cookie cookie = new Cookie("username", "John");
cookie.setMaxAge(3600); // 设置过期时间为1小时
cookie.setPath("/myapp"); // 设置路径
cookie.setDomain(".myapp.com"); // 设置域
cookie.setHttpOnly(true); // 不允许客户端脚本访问
cookie.setSecure(true); // 只允许HTTPS协议访问
response.addCookie(cookie); // 添加Cookie到响应
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie c : cookies){
if(c.getName().equals("username")){
out.println("username: " + c.getValue());
}
}
}
Cookie delCookie = new Cookie("username", null);
delCookie.setMaxAge(0); // 设置过期时间为0,即立即删除
response.addCookie(delCookie); // 删除Cookie
%>
在这个示例中,我们首先创建了一个名为username的Cookie对象,并设置了它的属性。然后,我们将这个Cookie对象添加到了响应中。接着,我们从请求中获取了所有的Cookie对象,并输出了名为username的Cookie的值。最后,我们创建了一个名为username的Cookie对象,并设置了它的过期时间为0,即立即删除,然后将这个Cookie对象添加到了响应中,从而删除了这个Cookie。
http协议是无状态的,所谓的无状态就是不记录本次会话和上次会话的联系,被认为是无关联的。
所以通过cookie和session来保存会话的关系。cookie保存在客户端(浏览器),session保存在服务器用来识别或标识客户端请求。
以下是jsp中一些常用的session对象的使用方法和代码示例:
session对象session = request.getSession();
session属性session.setAttribute("username", "John");
session属性String username = (String) session.getAttribute("username");
session属性session.removeAttribute("username");
sessionIDString sessionId = session.getId();
session是否有效boolean isSessionValid = session.isNew();
session过期时间session.setMaxInactiveInterval(3600); // 设置过期时间为1小时
session对象的生命周期int maxInactiveInterval = session.getMaxInactiveInterval();
以下是一个完整的session处理的示例:
<%@ page import="java.util.*" %>
<%
String username = "John";
session.setAttribute("username", username);
String username2 = (String) session.getAttribute("username");
if(username2.equals(username)){
out.println("session is valid");
}
session.removeAttribute("username");
String sessionId = session.getId();
session.setMaxInactiveInterval(3600); // 设置过期时间为1小时
int maxInactiveInterval = session.getMaxInactiveInterval();
session.invalidate(); // 销毁session
%>
在这个示例中,我们首先设置了session属性,并获取了这个属性的值。然后,我们检查了session是否有效。接着,我们删除了session属性,并获取了session的ID。然后,我们设置了session的过期时间为1小时,并获取了session对象的生命周期。最后,我们销毁了session。
Jsp中对于时间和日期的处理和java中类似。通过Date创建时间对象,通过getTime()方法获取毫秒数,也可以使用SimpleDateFormat对时间进行格式化。
以下是一些常用的方法:
Boolean after(Date date):比较时间是否在给定时间之后Boolean before(Date date):比较时间是否在给定时间之后int compareTo(Date date):与给定时间进行比较,相等为0,早于为负,晚于为正boolean equals(Date date):相等为true’long getTime():返回毫秒数void setTime(long time):根据毫秒数设置时间String toString():转为字符串response.getRequestDispatcher("str").forward(request,response);request.sendRedirect("str");