Jsp 入门学习
JSP 简介
什么是Java Server Pages?
- JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
- JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
- JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
- JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
为什么使用JSP?
- JSP 基于Java Servlet API,因此,JSP拥有各种强大的企业级Java API,包括JDBC,JNDI,EJB,JAXP等等。
- JSP页面可以与处理业务逻辑的 Servlet 一起使用,这种模式被Java servlet 模板引擎所支持。
- JSP是Java EE不可或缺的一部分,是一个完整的企业级应用平台。这意味着JSP可以用最简单的方式来实现最复杂的应用。
JSP的优势
- 与纯 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
- 与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
- 与静态HTML相比:静态HTML不包含动态信息。
JSP 的执行过程
- 首先,客户端发出请求(request ),请求访问JSP网页
- 接着,JSP Container将要访问的.JSP文件 转译成Servlet的源代码(.java文件)
- 然后,将产生的Servlet的源代码(.java文件)经过编译,生成.class文件,并加载到内存执行
- 最后把结果响应(response )给客户端
实例引入
创建一个Java EE Tomcat项目,在 index.jsp 文件里面,进行修改:
复制<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>JSP 的入门学习</title> </head> <body> <% System.out.println("这里可以定义Java代码!"); %> 这里是HTML ~ ~ ~ </body> </html>
启动tomcat服务器,访问该页面,页面内容如下:
复制这里是HTML ~ ~ ~
控制台输出:
复制这里可以定义Java代码!
项目被部署到的根目录为:~/Library/Caches/JetBrains/IntelliJIdea2020.1/tomcat/Tomcat_8_5_54_CookieStudy
在目录:apache/jsp/
中可以看到一个 index_jsp.java
文件,这个文件就是通过index.jsp的内容生成的。查看该文件部分内容:

通过这里与上面的jsp文件,可以知道,其实给文件就是通过index.jsp文件生成的。且该类继承了Servlet的子类。
JSP定义Java代码的方式
-
<% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
如上面
20200530231540.png
图中的内容都是在_jspService
类中的。 -
<%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。
-
<%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
JSP的内置对象
jsp一共有9个内置对象,在jsp页面中不需要获取和创建,可以直接使用这九个对象。
如:
-
request
-
response
-
out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
复制
javax.servlet.jsp.JspWriter out=null response.getWriter()和out.write()的区别:
- 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
- response.getWriter()数据输出永远在out.write()之前
案例
原Java类实现:cookie案例
通过JSP实现:
复制<%@ page import="java.util.Date" %> <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="java.net.URLEncoder" %> <%@ page import="java.net.URLDecoder" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Cookie 练习</title> </head> <body> <% // 设置响应的消息体的数据格式以及编码 response.setContentType("text/html;charset=utf-8"); // 获取所有Cookie Cookie[] cookies = request.getCookies(); // 默认没有cookie为lastTime boolean flag = false; // 遍历cookie数组 if(cookies != null && cookies.length > 0) { for (Cookie cookie : cookies) { // 获取cookie的名称 String name = cookie.getName(); // 判断名称是否是:lastTime if("lastTime".equals(name)) { // 有cookie为lastTime,不是第一次访问 flag = true; // 获取当前时间的字符串 Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String stringDate = simpleDateFormat.format(date); // 由于stringDate字符串中存在特殊字符(空格),需要URL编码 String encodeCookie = URLEncoder.encode(stringDate, "utf-8"); // 重新设置Cookie的值 cookie.setValue(encodeCookie); // 设置cookie的存活时间:存活一个小时 cookie.setMaxAge(60 * 60); // 在响应对象中添加该设置的cookie response.addCookie(cookie); // 响应数据 // 获取Cookie的value(时间) String value = cookie.getValue(); // 对获取到的cookie值进行URL解码 String decodeValue = URLDecoder.decode(value, "utf-8"); %><h1>欢迎回来,您上次访问时间为:<%=decodeValue%></h1><% // 已经完成了需求 break; } } } // 假如上面遍历了所有的cookie,都没有cookie为lastTime,或者用户的请求中没有cookie,说明用户是第一次访问 if(cookies == null || cookies.length == 0 || flag == false) { // 获取当前时间的字符串 Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String stringDate = simpleDateFormat.format(date); // 由于stringDate字符串中存在特殊字符(空格),需要URL编码 stringDate = URLEncoder.encode(stringDate, "utf-8"); // 重新设置Cookie的值 Cookie cookie = new Cookie("lastTime", stringDate); // 设置cookie的存活时间 cookie.setMaxAge(60 * 60); // 重新发送cookie response.addCookie(cookie); %><h1>您好,欢迎您首次访问!</h1><% } %> </body> </html>
与原java程序相比,这里将页面的输出语句,直接单独定义为HTML标签。
开启服务器,浏览器访问:http://localhost:8080/CookieStudy_war_exploded/cookie.jsp

再次访问该网址:

参考文献
本文来自博客园,作者:LeeHua,转载请注明原文链接:https://www.cnblogs.com/liyihua/p/14477412.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)