作者:java_wxid
1.什么是Jsp?
jsp是java server page,java的服务器页面。
2.为什么要学习jsp技术
因为jsp技术可以很好的解决在Servlet程序中回传数据是html内容,这个问题。
在Servlet程序中回传html数据,为什么是个问题?
public class PrintHtml extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 解决响应乱码 response.setContentType("text/html; charset=UTF-8"); // 回传一个html页面的数据 PrintWriter writer = response.getWriter(); writer.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n"); writer.write("<html>\r\n"); writer.write(" <head>\r\n"); writer.write(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n"); writer.write(" <title>Insert title here</title>\r\n"); writer.write(" </head>\r\n"); writer.write(" <body>\r\n"); writer.write(" 这是hello的html页面\r\n"); writer.write(" </body>\r\n"); writer.write("</html>"); } }
可以看到创建一个html页面非常繁琐
3.如何创建一个jsp动态页面。
4.如何修改jsp页面的默认编码?
小结:
html和jsp一样。都在放在webContent目录下
WebContent
a.html =====>>>> http://ip:port/工程名/a.html
b.jsp =====>>>> http://ip:port/工程名/b.jsp
5.jsp的本质是什么。
jsp本质上,也是一个Servlet程序。
当我们第一次访问jsp页面的时候,Tomcat服务器会把jsp翻译成为java源文件,然后保存到Tomcat服务器的work目录下。
双击Tomcat v7.0 Server at localhost [Started ,Synchronized],弹出如下窗口
jsp生成的class文件和java源文件
我们打开a_jsp.java源文件,不难发现生成的这个类继承了HttpJspBase类。
然后我们再通过查看源代码发现,HttpJspBase又继承了HttpServlet程序。所以生成的类本质上也是一个Servlet程序。
jsp翻译成为Servlet源文件,全名规则(了解大概):
a.jsp 翻译之后命名的全名为:a_jsp.java
b.jsp 翻译之后命名的全名为:b_jsp.java
源文件名.jsp 翻译之后是: 源文件名_jsp.java
6.jsp的三种语法
a)jsp头部的page指令
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
i.language属性 值只能是java。表示jsp翻译之后是java源文件。
ii.contentType属性 返回的内容类型。response.setContentType的参数值。
iii.pageEncoding属性 是当前jsp页面的字符集
iv.import属性 可以在jsp页面中导入需要的包和类。
v.autoFlush属性 设置jsp中的out输出流是否自动刷新 默认是true(一般都不会修改自动刷新为false),
当jsp中out输出流的缓冲区满了之后,就会自动刷新。
vi.buffer属性 设置jsp中的out输出流的缓冲区大小。默认是8kb
vii.errorPage属性 设置当jsp运行时出错,就自动跳转的页面。
viii.isErrorPage属性 设置当前jsp是否是错误页面,默认是false,表示不启动异常对象。设置为true,可以启用Exception异常对象
ix.session 属性 设置访问jsp的时候,是否创建Session会话对象。默认是true.
x.extends 属性 extends继承属性是预留给服务器厂商使用的。(基本都不会动)
b)jsp中的三种脚本
i.声明脚本(几乎不用)
声明脚本的格式: <%! 声明代码 %>
声明脚本可以声明在类的内部定义的代码。
1.我们可以定义全局变量。
2.定义static静态代码块
3.定义方法
4.定义内部类
测试代码:
<body> <!-- 1.我们可以定义全局变量。 --> <%! int i = 0; private static Map<String,Object> map = new HashMap<String,Object>(); %> <!-- 2.定义static静态代码块 --> <%! static { map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); } %> <!-- 3.定义方法 --> <%! public void abc(){ System.out.println("国哥真帅!"); } %> <!-- 4.定义内部类 --> <%! private static class A { private String name; } %> </body>
ii.表达式脚本
表达式脚本的格式:<%=表达式 %>
表达式脚本可以在jsp页面中输出数据。
表达式脚本都会被翻译到_jspService方法中
表达式脚本翻译之后都是out.print进行输出
表达式脚本中的表达式不能以分号结尾
由于表达式脚本翻译之后都在_jspService方法中,所以在_jspService方法中的对象都可以在表达式脚本中直接使用。
1.输出整型
2.输出浮点型
3.输出字符串
4.输出对象