JSP(java server page)
是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
在tomcat web.xml中的监听listings改为true,可以目录显示
jsp运行时jsp引擎将文件转换成servlet源文件和并将源文件转化成class文件,
然后以jsp引擎把控制权交给servlet容器
JSP标准指令
page作用当前页面,全局指令,只要在页面中即可
语法:
<%@ page language="java" contextType="text/html;charset=utf-8" session="true" %> <%@ page import="java.util.Date,java.util.List" %>
session="false"表示当前页面不能使用session
buffer="none|8kb|size kb" 设置jsp向客户端输出的缓冲区大小,默认为8kb
autoflush="true|false"决定输出流的缓冲区是否要自动清除
pageEncoding="utf-8" 设置字符编码,当和contextType同时存在时,pageEncoding优先,只在当前页面有效,转化成java时无效
include 导入(运行后生成的源码只有一个java源文件)
语法:
<%@ include file="导入页面的路径"%>
建议被引入的页面后缀改为jspf,表示代码片段
注意事项:
除了import和pageEncoding属性外,page指令的其他属性不能在这两个页面中有不同的设置值
taglib <% @ taglib %>指令声明此JSP文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀
JSP程序代码标签
<%! jsp声明语句,声明的都是全局变量 转换后为servlet中的全局变量和方法 %>
<% java代码片段 转换后为_jspservice()中的变量和方法,属于_jspservice()方法中的变量而非<%%>中 body中的<%%>和<%=%>都属于_jspservice() %>
<%=静态方法%>
在h标签中使用<h<%=i+1%>>斯蒂芬<h<%=i+1%>>
jsp注释
<!--html的注释--> <% //java注释%> <%--jsp注释--%>只在jsp页面存在,不会被转化到源文件
JSP动作标签
<jsp:include path="引入路径">
</jsp:include>
include和jsp:include的区别
在a.jsp中引入b.jsp
include:静态引入
*<%@ include file="b.jsp"%>
*a.jsp被jsp引擎转化后生成一个a_jsp.java文件,b.jsp不被生成java文件。运行时生成一个a_jsp.java文件
*执行过程
*jsp引擎从a.jsp文件的第一行代码开始转化为java文件
*当执行到<%@ include file="b.jsp"%>代码时,把b.jsp代码转化为java文件
*把b.jsp代码转化的java文件嵌入<%@ include file="b.jsp"%>所在的位置
*a.jsp继续下面代码的转化,最终生成一个java源文件(servlet)
*jsp引擎编译java文件为a_jsp.class文件
*serlver容器执行a_jsp.class文件对客户端输出
jsp:include:动态引入
*<jsp:include page="b.jsp"></jsp:include>
*a.jsp和b.jsp分别生成两个对应的java文件 a_jsp.java b_jsp.java
*执行过程
*jsp引擎把a.jsp文件转化为a_jsp.java文件,把b.jsp文件转化为b_jsp.java文件
*jsp引擎把a_jsp.java文件和b_jsp.java文件编译成class文件
*servlet容器执行a_jsp.class【运行结果是html页面】文件,从第一行代码开始
*当执行到<jsp;include page="b.jsp"></jsp:include>代码时,servlet容器加载b_jsp.class文件,运行结果是html页面
*servlet容器继续往下执行a_jsp.class文件输出到客户端
<jsp:forward page="路径"> <jsp:param name="参数1" value="参数值"/> </jsp:forward>
jsp异常处理
errorPage="转发地址" 地址栏地址没有发生改变
isErrorPage="true"用于设置是否允许处理网页中出现的异常错误,默认为false
开发阶段异常输出
<%@ page errorPage="转发地址"%>页面中的优先于web.xml中的配置
<!--
//exception jsp的内置对象,固定写法
//*这里保存jsp运行中出现的异常信息
//*jsp中如果没有异常,该对象的值为null
isErrorPage="true"
*true 表示在该页面中可以直接显示exception对象
*false 表示在该页面中不可以直接显示exception对象
-->
<%=exception%>
在web.xml中配置错误页跳转页面
配置异常类型优先于异常代码
<error-page> <exception-type>异常类型java.lang.Exception</exception-type> <localtion>错误页面</localtion> </error-page> <error-page> <error-code>异常代码</error-code> <localtion></localtion> </error-page>
jsp内置对象
request:jsp的内置对象,固定写法,类型HttpServletRequest类型
request.getContextPath(),找到web根
reponse: jsp的内置对象,固定写法,类型HttpservletResponse
response.setHeader("refresh","1");//每隔1s刷新页面一次
response.setHeader("refresh","2;url=request.jsp");//2秒后转到别的页面
response。sendRedirect("./request.jsp");//重定向
session: jsp的内置对象,固定写法,类型HttpServletSession
在<%@ page session="true"%>配置为true以后当前页面才可以使用session对象
session=false 不可以直接使用jsp中的内置session对象,但仍可以从request中获取
HttpSession session=request.getSession();
application jsp的内置对象,固定写法,类型ServletContext类型
out: jsp的内置对象,固定写法,类型jspWrite
out:servlet中的PrintWriter类型
可以将jspWriter看成是PrintWriter的包装类对象
config: jsp的内置对象,固定写法,类型:ServletConfig
把jsp文件作为servlet配置
<servlet> <servlet-param>config</servlet-param> <jsp-file>config.jsp</jsp-file> <servlet>
page jsp内置对象,固定写法,类型 Object 就是当前页面this
exception jsp内置对象 固定写法 类型java.lang.Throwabled表示未捕获的异常
isErrorPage="true|false"
true:在jsp页面中可以使用exception
false:在jsp页面不能使用exception
pageContext: jsp的内置对象,固定写法,类型:PageContext
* 具有管理其他对象的功能
* 利用该对象可以获取其他的内置对象
* 处理其他对象能完成的功能
* 代表的就是当前的jsp页面
pageContext.forward(地址)====request.getRequestDispatcher.forward(地址); HttpServletRequest req=(HttpServletRequest)pageContext.getRequest(); HttpServletResponse res=(HttpServletResponse)pageContext.getResponse(); JspWriter jw=(JspWriter)pageContext.getOut(); Exception E=(Exception)pageContext.getException(); ServletContext sc=(ServletContext)pageContext.getServletContext(); HttpSession hs=(HttpSession)pageContext.getHttpSession(); ServletConfig conf=(ServletConfig)pageContext.getServletConfig(); Object obj=pageContext.getPage(); pageContext.getAttribute(name)查找的是page作用域中的值 pageContext,getAttribute(name,作用域);作用域PageContext.PAGE.SCOPE) //findAttribute依次在page,request,session,application查找,找到值后就不再往后查找,如果没有找到返回null pageContext.findAttribute(name)
处理jsp中的乱码
处理post请求的中文乱码
* 在代码的第一行写request.setCharacterEncoding("utf-8");
处理get请求的中文乱码
* String s=new String(username.getBytes("ISO-8859-1","utf-8"));//IE6下只能处理成双的汉字
*在传递前进行重新编码和解码
java.net.encode(username,"utf-8");
原始方式java.net.decode(username,"utf-8");不方便
在tomcat服务器下的server.xml的<Connector>中配置端口那里加上URIEcoding="utf-8"属性
*使用jstl标签库中的标签进行编码
<c:url value="地址" var="url">
<c:param name="username" value="<%=username%>"></c:param>
</c:url>
<a href="${url}">get方式传值</a>
文章评论