jsp全称是java server pages,Java的服务器页面。
主要作用是代替Servlet程序回传html页面的数据,因为使用Servlet程序回传html页面数据开发和维护成本都比较高。
servlet程序回传html页面数据:
public class PrintHtml extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=UTF-8"); //通过响应的回传流回传html页面数据 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"); writer.write("\r\n"); } }jsp回传html页面数据:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> a.jsp页面 </body> </html>jsp页面本质上是一个Servlet程序,当我们第一次访问jsp页面时,Tomcat服务器会帮我们把jsp页面翻译成为一个Java源文件,并对它进行编译称为**.class字节码程序**。
jsp的page指令可以修改jsp页面中的一些重要的属性或者行为。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 属性作用language属性表示jsp翻译后的语言文件contextType属性表示jsp返回的数据类型,即源码中的response.setContextType()参数值pageEncoding属性表示当前jsp页面文件本身的字符集import属性用于导包、导类autoFlush属性设置当out输出流缓冲区满了之后是否自动刷新缓冲区,默认值是truebuffer属性设置out输出流缓冲区的大小,默认是8kberrorPage属性设置当jsp页面运行时出错,自动跳转去的错误页面路径(用于提示用户页面出错)isErrorPage属性设置当前jsp页面是否是错误信息页面,默认是false,如果是true可以获取异常信息session属性设置访问当前jsp页面,是否会创建HttpSession对象,默认是trueextends属性设置jsp翻译出来的java类默认继承谁例:
<%--1、声明类属性--%> <%! private Integer id; private String name; private static Map<String,Object> map; %> <%--2、声明 static 静态代码块--%> <%! static{ map = new HashMap<String,Object>(); map.put("key1","value1"); map.put("key2","value2"); map.put("key3","value3"); } %> <%--3、声明类方法--%> <%! public int abc(){ return 12; } %> <%--4、声明内部类--%> <%! public static class A{ private integer id = 12; private String name = "abc"; } %>作用:在jsp页面上输出数据。
特点:
所有的表达式脚本都会被翻译到__jspService()方法中;表达式脚本都会被翻译成out.print()输出到页面上;由于表达式脚本翻译的内容都在__jspService()方法中,所以jspService()方法中的对象都可以直接调用;表达式脚本中的表达式不能以分号结束。 练习: <%--输出整型--%> <%=12%><br> <%--输出浮点型--%> <%=12.12%><br> <%--输出字符串--%> <%="字符串"%><br> <%--输出对象--%> <%=map%><br> <%=request.getParameter("username")%><br>作用:可以在jsp页面中编写需要的功能。
特点:
代码脚本翻译之后都在__jspService()方法中;代码脚本由于翻译到__jspService()方法中,所以在jspService()方法中现有的对象都可以直接使用;多个代码脚本块可以组合成一个完整的Java语句;代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据。jsp中的内置对象,是指Tomcat服务器在翻译jsp页面成为Servlet源代码后,内部提供的九大对象。
对象名说明request请求对象response响应对象pageContextjsp的上下文对象session会话对象applicationServletContext对象configServletConfig对象outjsp输出流对象page指向当前jsp的对象exception异常对象例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>scope.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> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%--取四个域对象中的数据--%> pageContext是否有值:<%=pageContext.getAttribute("key")%><br> request是否有值:<%=request.getAttribute("key")%><br> session是否有值:<%=session.getAttribute("key")%><br> application是否有值:<%=application.getAttribute("key")%><br> %> </body> </html>writer中表示响应,经常用于设置返回给客户端的内容。
out也用来做输出操作。
由于jsp翻译之后,底层源代码都使用out来进行输出,所以一般情况下,在jsp页面中统一使用out进行输出,避免打乱页面输出内容的顺序。
out.write()——输出字符串。
out.print()——输出任意数据(转换成字符串后调用write输出)。