• JSP本身目前已经很少使用,我们只需要了解其基本用法即可。通过jsp来理解下模板引擎
  • jsp是servlet自带的,无需引入依赖

JSP与Servlet联系

在Servlet中,输出HTML需要靠PrintWriter对象调用write()。如果要写一个复杂的网页。非常麻烦困难,因为其中还要穿插各种变量。
所以推出JSP简化输出HTML。JSP是Java Server Pages的缩写
JSP和Servlet其实没有任何区别,因为JSP在执行前首先被编译成一个Servlet。在Tomcat的临时目录下,可以找到一个hello_jsp.java的源文件,这个文件就是Tomcat把JSP自动转换成的Servlet源码。
只不过JSP无需配置映射路径,Web Server会根据路径查找对应的**.jsp**文件,如果找到了,就自动编译成Servlet再执行。在服务器运行过程中,如果修改了JSP的内容,那么服务器会自动重新编译。

JSP是一种在HTML中嵌入动态输出的文件,它和Servlet正好相反,Servlet是在Java代码中嵌入输出HTML;

JSP语法

JSP的文件必须放到/src/main/webapp下,文件名必须以.jsp结尾,整个文件与HTML并无太大区别,但需要插入变量,或者动态输出的地方,使用特殊指令<% ... %>

整个JSP的内容实际上是一个HTML,但是稍有不同(即修改下HTML的某些部分即变为一个JSP)

  • 包含在<%----%>之间的是JSP的注释,它们会被完全忽略;
  • 包含在<%%>之间的是Java代码,可以编写任意Java代码;
  • 如果使用<%= xxx %>则可以快捷输出一个变量的值。

JSP页面内置了几个变量:

  • out:表示HttpServletResponse的PrintWriter;
  • session:表示当前HttpSession对象;
  • request:表示HttpServletRequest对象。

这几个变量可以直接使用。
访问JSP页面时,直接指定完整路径。例如,http://localhost:8080/hello.jsp

引入java类
除了<% ... %>外,JSP页面本身可以通过page指令引入Java类:
比如<%@ page import="java.io.*" %>
这样后面的代码可以使用简单的类名而不是输入完整的类名

应用举例:比如导入时间类。快速输出系统时间

引入另一个jsp文件
<html><body>
<%@ include file="header.jsp"%>
<h1>Index Page</h1>
</body>

*自定义输出的tag(标签)
<c:out value = "${sessionScope.user.name}"/>
JSP Tag需要正确引入taglib的jar包,并且还需要正确声明,使用起来非常复杂,对于页面开发来说,不推荐使用JSP Tag,后续会有更简单的模板引擎可供使用

*JSP转化为的Servlet源码

  1. <html>
  2. <head>
  3. <title>Hello World - JSP</title>
  4. </head>
  5. <body>
  6. <%-- JSP Comment --%>
  7. <h1>Hello World!</h1>
  8. <p>
  9. <%
  10. out.println("Your IP address is ");
  11. %>
  12. <span style="color:red">
  13. <%= request.getRemoteAddr() %>
  14. </span>
  15. </p>
  16. </body>
  17. </html>
  18. -------------------------------------------------------------------------------
  19. package org.apache.jsp;
  20. import ...
  21. public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase
  22. implements org.apache.jasper.runtime.JspSourceDependent,
  23. org.apache.jasper.runtime.JspSourceImports {
  24. ...
  25. public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
  26. throws java.io.IOException, javax.servlet.ServletException {
  27. ...
  28. out.write("<html>\n");
  29. out.write("<head>\n");
  30. out.write(" <title>Hello World - JSP</title>\n");
  31. out.write("</head>\n");
  32. out.write("<body>\n");
  33. ...
  34. }
  35. ...
  36. }