1. 什么是jsp,它有什么用?
jsp的全换是java server pages。Java的服务器页面。
jsp的主要作用是代替Servlet程序回传html页面的数据。
因为Servlet程序回传html页面数据是一件非常繁锁的事情。开发成本和维护成本都极高。
演示
新建08_jsp模块,并且建立Tomcat服务器实例,注意导入Tomcat/lib下的service.api.jar
新建src/com.servlet/PringHtml.java ,并在web.xml配置
PringHtml
package com.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; public class PringHtml extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //通过响应的输出流回传html页面数据 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>Title</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"); } }
运行Tomcat,结果
在web下新建a.jsp
a.jsp
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2021/8/13 Time: 上午 11:57 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> 这是html页面数据 </body> </html>
运行Tomcat,结果
jsp小结
1、如何创建jsp的页面
输入文件名敲回车即可!
2、jsp如何访问:
jp页面和html页面一样,都是存放在web目录下。访问也跟访问html页面一样。
比如:
在web目录下有如下的文件:
web目录
a.html页面 访问地址是 ========>>> http://ip:port/工程路径/a.html
b.jsp页面 访问地址是 ========>>>http://ip:port/工程路径/b.jsp
2. jsp 的本质是什么
jsp页面本质上是一个Servlet程序。
当我们第一次访问jsp页面的时候。Tomcat服务器会帮我们把jsp页面翻译成为一个java源文件。并且对它进行编译成为.class字节码程序。
我们跟踪原代码发现,HttplspBase类。它直接地继承了HttpServlet类。也就是说。jsp翻译出来的java类,它间接继承了HttpServlet类。也就是说,翻译出来的是一个Servlet程序
我们打开java源文件不难发现其里面的内容是:
总结:通过翻译java源码我们就可以得到结果:jsp就是Servlet程序。
大家也可以去观察翻译出来的Servlet程序的源代码,不难发现。其底层实现,也就是通过输出流。把html页面数据回传给客户端。
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { final java.lang.String _jspx_method = request.getMethod(); if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) { response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS"); return; } final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null; try { response.setContentType("text/html;charset=UTF-8"); 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; out.write("\r\n"); out.write("\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write(" <title>Title</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write(" a.jsp页面\r\n"); out.write("</body>\r\n"); out.write("</html>\r\n"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { if (response.isCommitted()) { out.flush(); } else { out.clearBuffer(); } } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }