1. 什么是JSP
l JSP – 简单的说,就是嵌入了Java代码的HTML,由静态HTML、专用的JSP标签和Java代码组成 – 服务器端的技术。在后台被自动转换成servlet – 仅在修改后的第一次被访问时,才会被转换成servlet并进行编译,创建JSP唯一的一个一实例,并调用_jspInit完成初始化,之后每个用户请求都会创建一个调用JSP实例的_jspService方法的线程。因而多个并发请求会导致多个线程同时调用_jspService – Tomcat中,默认目录下的JSP文件被转换生成的servlet文件及编译后生成的class文件被放在install_dir/work/ Catalina/ localhost/ _/org/apache/jsp目录下 |
JSP页面page指令的15个常用属性
<%@pageimport="java.util.Date"%> <%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPEhtml> <html> <head> <meta charset="UTF-8"> <title>第一个JSP页面</title> <!-- JSP里的page指令的15个属性 1.language 设置JSP页面的默认语言 2.extends 设置JSP页面继承的java类 3.import 导入JSP页面所需要的类 4.pageEncoding 设置JSP页面的编码格式 5.contentType 设置JSP页面的MIME类型和字符编码 6.session 设置JSP页面是否使用HTTP的session 7.buffer 设置JSP的out输出对象使用的缓冲区大小 8.autoFlush 设置JSP页面页面的缓存满的时候是否自动刷新 9.isErrorPage 设置当前JSP页面是否被设置成错误处理页面 10.info 属性定义一个可以在 servlet 中通过 getServletInfo 方法获取的字符串 11.errorPage 用来指定一个 JSP 页面,由该页面来处理当前页面中抛出但未被捕获的任何异常 12.isThreadSafe 控制由 JSP页面生成的 servlet 是允许并行访问 13.isELIgnored 略(true)JSP 2.0 表达式语言(EL),还是进行正常的求值(false) --> </head> <body> <% Date date = new Date(); out.print(date); %> </body> </html> |
1. include指令
在JSP的用法中,经常通过Include指令来包含另外一个页面。 当我们对这些页面进行编译时,当前的页面会与include指令指定的页面进行合并。 这就是JSP的include的运行机制 |
2. taglib指令
可以通过taglib指令标识申明该页面中所使用的标签库,如jstl,struts2 |
4. JSP的动作标签
在JSP中的动作指令包括:Include、 Forward、 UseBean、 GetProperty、 SetProperty、 Plugin。 |
Request对象
<%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPEhtml> <html> <head> <meta charset="UTF-8"> <title>request</title> </head> <body> <% request.setCharacterEncoding("utf-8"); %>
<%="传递方式:"+request.getMethod()%><br/> <%="字符编码方式:"+request.getCharacterEncoding()%><br/> <%="使用的协议:"+request.getProtocol()%><br/> <%="客户端地址:"+request.getRequestURI()%><br/> <%="客户端地址:"+request.getRequestURL()%><br/> <%="客户端IP地址:"+request.getRemoteAddr()%><br/> <%="获取服务器端口:"+request.getServerPort()%><br/> <%="获取服务器名称:"+request.getServerName()%><br/> <%="获取主机名:"+request.getRemoteHost()%><br/> <%="获取脚本文件路径:"+request.getServletPath()%><br/> <%="获取协议头部信息:"+request.getHeader("host")%><br/> <%="获取协议头部信息:"+request.getHeader("user-agent")%><br/> <%="获取协议头部信息:"+request.getHeader("accept-language")%><br/> </body> </html> |
Response
<%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPEhtml> <html> <head> <meta charset="UTF-8"> <title>response</title> </head> <body> <% //重定向页面 response.sendRedirect("out.jsp"); //禁止使用缓存 response.setHeader("Cache-Contral","no-store"); //禁用缓存 response.setHeader("Expires","0"); //设置页面自动刷新 response.setHeader("refresh","1"); //定时跳转页面 response.setHeader("refresh","5;URL=out.jsp"); //强制将缓冲区内容输出客户端 response.flushBuffer(); //获取缓冲区大小 response.getBufferSize(); //设置缓冲区大小 response.setBufferSize(1023); //清除缓冲区大小 response.reset(); //检查服务器端是否已经把数据写入到了客户端 response.isCommitted(); %> </body> </html> |
Session
1.test1.jsp <%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPEhtml> <html> <head> <meta charset="UTF-8"> <title>Session</title> </head> <body> <% String name = "felayman"; session.setAttribute("username",name); %> <jsp:forward page="getsession.jsp"></jsp:forward> </body> </html> 3. test.jsp <%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPEhtml> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% String username = (String)session.getAttribute("username"); %> session:<%=username %> </body> </html> |
PageContext对象
<%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPEhtml> <html> <head> <meta charset="UTF-8"> <title>pageContext</title> </head> <body> <!-- pageContext对象是或获取上下午对象的一个内置对象 改对象的创建和销毁是由服务器来完成的,该对象在开发的时候比较少用 --> <% //跳转页面 pageContext.forward("out.jsp"); %> </body> </html> |