jsp的全称是java server page,也就是java的服务器页面。
jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据。
package com.zixue.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * @author Mr Guo * @create 2020-11-11 15:58 */ public class PrintHtml extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html; charset=UTF-8"); PrintWriter writer = resp.getWriter(); writer.write("<!DOCTYPE html>\r\n"); writer.write("<html lang=\"en\">\r\n"); writer.write("<head>\r\n"); writer.write(" <meta charset=\"UTF-8\">\r\n"); writer.write(" <title>Servlet回传html页面数据</title>\r\n"); writer.write("</head>\r\n"); writer.write("<body>\r\n"); writer.write(" 这是HTML页面数据\r\n"); writer.write("</body>\r\n"); writer.write("</html>\r\n"); } }
效果如下:
我们发现,回传如此简单的字符串就要使用大量的代码,非常的繁琐,开发效率极低。因此,需要使用jsp代替Servlet回传HTML页面数据。
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2020/11/11 0011 Time: 16:13 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>a.jsp页面</title> </head> <body> 一个简单的jsp页面 </body> </html>
效果如下:
jsp 页面和 html 页面一样,都是存放在 web 目录下。访问也跟访问 html 页面一样。
访问web下的a.jsp页面:
http://localhost:8080/08_jsp/a.jsp
jsp 页面本质上是一个 Servlet 程序。
当我们第一次访问 jsp 页面的时候。Tomcat 服务器会帮我们把 jsp 页面翻译成为一个 java 源文件。并且对它进行编译成为.class 字节码程序。我们打开 java 源文件不难发现其里面的内容是:
errorPage属性的值表示当页面出错时,自动跳转去的路径。这个路径一般以"/"打头,表示请求地址为:http://ip:port/工程路径/。映射到代码的web目录。
<%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %><%-- Created by IntelliJ IDEA. User: Administrator Date: 2020/11/11 0011 Time: 16:13 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>a.jsp页面</title> </head> <body> <%-- 声明类的属性--%> <%! private Integer id; private String name; private static Map<String, Object> map; %> <%-- 声明static静态代码块--%> <%! static { map = new HashMap<String, Object>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); } %> <%-- 声明内部类--%> <%! public static class A{ private Integer id = 12; private String name = "abc"; } %> <%-- 声明类方法--%> <%! public int abc(){ return 10; } %> </body> </html>
声明脚本代码翻译对照:
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2020/11/11 0011 Time: 18:02 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>b.jsp</title> </head> <body> <%--输出整形--%> <%=10%> <br/> <%--输出浮点型--%> <%=12.2%> <br/> <%--输出字符串--%> <%="我是字符串"%> <br/> <%--输出对象--%> <%=request%> <br/> <%=request.getParameter("username")%> </body> </html>
浏览器访问效果:
翻译后的java代码:
代码脚本示例:
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2020/11/11 0011 Time: 18:02 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>b.jsp</title> </head> <body> <%--1.代码脚本---if语句--%> <% int i = 10; if (i == 10) { %> <h1>正确</h1> <% } else { %> <h1>错误</h1> <% } %> <%--2.代码脚本---for循环语句--%> <table border="1" cellspacing="0"> <% for (int j = 0; j < 10; j++) { %> <tr> <td>第 <%=j+1%> 行</td> </tr> <% } %> </table> <%--3.翻译后 java 文件中_jspService 方法内的对象都可以使用--%> <% String username = request.getParameter("username"); %> <%="用户名的请求参数值是:"+username%> </body> </html>
页面效果:
翻译后的Java源文件:
<!-- 这是 html 注释 -->
scope1.jsp页面:
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2020/11/11 0011 Time: 19:20 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>scope1.jsp</title> </head> <body> <h1>scope1.jsp页面</h1> <% //往四个域中分别保存数据 pageContext.setAttribute("key", "pageContext"); request.setAttribute("key", "request"); session.setAttribute("key", "session"); application.setAttribute("key", "application"); %> pageContext域中是否有值:<%=pageContext.getAttribute("key")%> <br/> request域中是否有值:<%=request.getAttribute("key")%> <br/> session域中是否有值:<%=session.getAttribute("key")%> <br/> application域中是否有值:<%=application.getAttribute("key")%> <br/> <% request.getRequestDispatcher("/scope2.jsp").forward(request,response); %> </body> </html>
scope2.jsp页面:
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2020/11/11 0011 Time: 19:26 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>scope2.jsp</title> </head> <body> <h1>scope2.jsp页面</h1> pageContext域中是否有值:<%=pageContext.getAttribute("key")%> <br/> request域中是否有值:<%=request.getAttribute("key")%> <br/> session域中是否有值:<%=session.getAttribute("key")%> <br/> application域中是否有值:<%=application.getAttribute("key")%> <br/> </body> </html>
浏览器效果:
当我们访问body.jsp页面时,效果如下:
原文:https://www.cnblogs.com/897463196-a/p/13960623.html