JSP从0开始详细简介
JSP 基本介绍
1. JSP 全称是 Java Server Pages,Java 的服务器页面
2. JSP 这门技术的最大的特点在于,写 JSP 就像在写 HTML
● 相比 html 而言,html 只能为用户提供静态数据,而 JSP 技术允许在页面中嵌套 java 代码,为用户提供动态数据
● 相比 Servlet 而言,Servlet 很难对数据进行排版,而 jsp 除了可以用 java 代码产 生动态数据的同时,也很容易对数据进行排版。
3. jsp 技术基于 Servlet, 你可以理解成 JSP 就是对 Servlet 的包装. 4. 会使用 JSP 的程序员, 再使用 thymeleaf 是非常容易的事情, 几乎是无缝接
应用实例-JSP 基本使用
创建 javaWEB 项目,并引 jar
sum.jsp
1. <%@ page import="java.io.PrintWriter" %> 2. <%@ page import="org.apache.jasper.runtime.HttpJspBase" %> 3. <%@ page contentType="text/html;charset=UTF-8" language="java" %> 4. <html> 5. <head> 6. <title>jsp的简单的求和计算器</title> 7. </head> 8. <body> 9. <h1>jsp的简单的求和计算器</h1> 10. <% 11. //1. 在jsp的 该标签中, 可以写java代码 12. int i = 10; 13. int j = 20; 14. int res = i + j; 15. 16. // jsp 中内置对象,可以直接使用, 比如 out 17. out.println(i + " + " + j + " = " + res); 18. // 如果要看HttpJspBase类的关系, 需要引入一个包, alt+enter 19. 20. //在java片段中,仍然是java的注释 21. /* 22. 多行注释 23. */ 24. %> 25. <%--email: <%=email%>--%> 26. <!--html注释 --> 27. </body> 28. </html>
运行效果
注意事项和细节
1. jsp 页面不能像 HTML 页面, 直接用浏览器运行。只能通过浏览器访问 Tomcat 来访问jsp 页面
JSP 运行原理
1. jsp 页面本质是一个 Servlet 程序, 其性能是和 java 关联的, 只是长得丑.
2. 第 1 次访问 jsp 页面的时候。Tomcat服务器会把jsp页面解析成为一个java源文件。并且对它进行编译成为.class字节码程序。
看下Cal.jsp对应的cal_jsp.java和cal_jsp.class
3. 分析下 cal_jsp.java 的源码,可以看出本质就是Servlet
提示
要看到源码和分析类图,需要加入 jasper.jar 这个包[在 tomcat/lib 下拷贝]
page 指令(常用的)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
1. language 表示 jsp 翻译后是什么语言文件, 只支持 java
2. contentType 表示 jsp 返回的数据类型,对应源码中 response.setContentType()参数值
3. pageEncoding 属性 表示当前 jsp 页面文件本身的字符集
4. import 属性 跟 java 源代码中一样。用于导包,导类
JSP 三种常用脚本
声明脚本基本语法 statement_jsp
1. 声明脚本的格式是: <%! 声明 java 代码 %>
2. 作用:定义 jsp 的需要属性、方法、静态代码块和内部类等
应用实例:
1. <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2. <html> 3. <head> 4. <title>jsp声明脚本</title> 5. </head> 6. <body> 7. <h1>jsp声明脚本</h1> 8. <%! 9. //这里我们可以声明该jsp需要使用的属性,方法,静态代码块, 内部类 10. //也就是给 statement.jsp 对应的 statement_jsp 类定义成员 11. //1. 属性 12. private String name = "nnn"; 13. private int age; 14. private static String company; 15. 16. //2 方法 17. public String getName() { 18. return name; 19. } 20. //3. 静态代码块 21. static { 22. company = "字节跳动"; 23. } 24. %> 25. </body> 26. </html>
表达式脚本基本语法
1. 表达式脚本的格式是:<%=表达式%>
2. 表达式脚本的作用是:在 jsp 页面上输出数据
3. 表达式脚本中的表达式不能以分号结束。
表达式脚本应用实例
script.jsp
1. </html> 2. <%@ page contentType="text/html;charset=UTF-8" language="java" %> 3. <html> 4. <head> 5. <title>jsp 表达式脚本</title> 6. </head> 7. <body> 8. <h1>jsp 表达式脚本应用实例</h1> 9. <%! 10. String name = "vvv"; 11. %> 12. <hr/> 13. <h1>个人信息</h1> 14. 用户名= <%=wyx%><br/> 15. 工作是: <%="java 工程师"%><br/> 16. 得到参数= <%=request.getParameter("sex")%> 17. </body> 18. </html>
代码脚本基本语法
1. 代码脚本的语法是:<% java 代码%>
2. 代码脚本的作用是:可以在 jsp 页面中,编写我们需要的功能(使用 java )
3. 可以由多个代码脚本块组合完成一个完整的 java 语句。
4. 代码脚本还可以和表达式脚本一起组合使用,在 jsp 页面上输出数据
应用实例:
计算结果
Monster.java
1. public class Monster { 2. private Integer id; 3. private String name; 4. private String skill; 5. 6. public Monster(Integer id, String name, String skill) { 7. this.id = id; 8. this.name = name; 9. this.skill = skill; 10. } 11. 12. public Integer getId() { 13. return id; 14. } 15. 16. public void setId(Integer id) { 17. this.id = id; 18. } 19. 20. public String getName() { 21. return name; 22. } 23. 24. public void setName(String name) { 25. this.name = name; 26. } 27. 28. public String getSkill() { 29. return skill; 30. } 31. 32. public void setSkill(String skill) { 33. this.skill = skill; 34. } 35. }
java_code.jsp
1. <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2. <html> 3. <head> 4. <title>演示代码脚本</title> 5. </head> 6. <body> 7. <h1>演示代码脚本</h1> 8. <% 9. //创建ArrayList ,放入两个monster对象 10. ArrayList<Monster> monsterList = new ArrayList<>(); 11. monsterList.add(new Monster(1, "牛魔王", "芭蕉扇")); 12. monsterList.add(new Monster(2, "蜘蛛精", "吐口水")); 13. %> 14. <table bgcolor="#f0f8ff" border="1px" width="300px"> 15. <tr> 16. <th>id</th> 17. <th>名字</th> 18. <th>技能</th> 19. </tr> 20. <% 21. for (int i = 0; i < monsterList.size(); i++) { 22. //先取出monster对象 23. Monster monster = monsterList.get(i); 24. %> 25. <tr> 26. <td><%=monster.getId()%></td> 27. <td><%=monster.getName()%></td> 28. <td><%=monster.getSkill()%></td> 29. </tr> 30. <% 31. } 32. %> 33. 34. </table> 35. </body> 36. </html> 37.
JSP 注释
JSP 内置对象
● 基本介绍
1、JSP 内置对象(已经创建好的对象, 直接使用 inbuild),是指 Tomcat 在翻译 jsp 页面成为Servlet 后,内部提供的九大对象,叫内置对象
2、内置对象,可以直接使用,不需要手动定义
● JSP 九大内置对象
1. out 向客户端输出数据,out.println("");
2. request 客户端的 http 请求
3. response 响应对象
4. session 会话对象
5. application 对应 ServletContext
6. pageContext jsp 页面的上下文,是一个域对象,可以 setAttribue(),作用范围只是本页面
7. exception 异常对象 , getMessage()
8. page 代表 jsp 这个实例本身
9. config 对应 ServletConfig
● 对照 Servlet 来理解就比较轻松了.
1) 一张图, 展示了 JSP 的父类 HttpJspBase 继承关系, 说明 JSP 内置对象的来源是 Servlet 和HttpJspPage
代码实列
HiServlet.java
1. public class HiServlet extends HttpServlet { 2. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 3. System.out.println("HiServlet 被调用.."); 4. 5. //servlet中可以使用哪些对象 6. PrintWriter writer = response.getWriter(); 7. writer.println("haha"); 8. request.getParameter("age"); 9. response.setContentType("text/html;charset=utf-8"); 10. HttpSession session = request.getSession(); 11. session.setAttribute("job", "java工程师90000"); 12. //这个可以被多个 servlet 共享, 被多个会话共享-做网站计数器 13. ServletContext servletContext = request.getServletContext(); 14. servletContext.setAttribute("count", 666); 15. ServletConfig servletConfig = getServletConfig(); 16. servletConfig.getInitParameter("pwd"); 17. 18. } 19. 20. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 21. doPost(request, response); 22. } 23. }
inbuild_object.jsp
1. <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2. <html> 3. <head> 4. <title>jsp内置对象</title> 5. </head> 6. <body> 7. <h1>jsp内置对象</h1> 8. <% 9. //jsp的内置对象 10. //out 类型是 JspWriter 父类就是 Writer. 11. out.println("jsp out"); 12. 13. //request是HttpServletRequest 14. request.getParameter("age"); 15. 16. //response就是 HttpServletResponse 17. //response.sendRedirect("http://www.baidu.com"); 18. //session 就是 HttpSession 19. session.setAttribute("job", "JAVA工程师"); 20. 21. //application类型就是ServletContext 22. application.setAttribute("name", "wyx"); 23. 24. //pageContext 可以存放数据(属性), 但是该数据只能在本页面使用 25. pageContext.setAttribute("age", 100); 26. 27. //exception 异常对象 使用比较少 28. //page 内置对象,类似 this 29. out.println("page=" + page); 30. 31. //config 内置对象的类型就是ServletConfig 32. String pwd = config.getInitParameter("pwd"); 33. 34. 35. %> 36. </body> 37. age: <%=pageContext.getAttribute("age")%> 38. </html>