多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# JSP ## JSP指令 新建一个jsp文件,最上面一行就是jsp指令 ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> ~~~ JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。 JSP指令的基本语法格式: <%@ 指令 属性名="值" %> 举例:<%@ page contentType="text/html;charset=gb2312"%> 注意:属性名部分是大小写敏感的 在目前的JSP 2.0中,定义了page、include和taglib这三种指令,每种指令中又都定义了一些各自的属性。 如果要在一个JSP页面中设置同一条指令的多个属性,可以使用多条指令语句单独设置每个属性,也可以使用同一条指令语句设置该指令的多个属性。 第一种方式: <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.util.Date"%> 第二种方式: <%@ page contentType="text/html;charset=gb2312" import="java.util.Date"%> *** ### Page指令 ~~~ JSP 2.0规范中定义的page指令的完整语法: <%@ page // jsp支持的语言类型 [ language="java" ] // jsp翻译成Servlet可以继承哪些类 [ extends="package.class" ] // 导包 [ import="{package.class | package.*}, ..." ] // 当前页面是否允许使用session [ session="true | false" ] [ buffer="none | 8kb | sizekb" ] [ autoFlush="true | false" ] [ isThreadSafe="true | false" ] [ info="text" ] [ errorPage="relative_url" ] [ isErrorPage="true | false" ] // 指定当前jsp页面的响应类型 [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] // 指定当前jsp页面的字符编码 [ pageEncoding="characterSet | ISO-8859-1" ] // 指定当前jsp页面是否可以使用EL表达式,通常取值为true [ isELIgnored="true | false" ] %> ~~~ errorPage和isErrorPage ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="/error.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% int i = 10 / 0; %> </body> </html> ~~~ error.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>ErrorPage</h1> <%= exception.getMessage() %> </body> </html> ~~~ 一般来说,这样的错误页面不建议直接访问,那么如何处理能够达到这样的效果。 对于Tomcat服务器而言,WEB-INF下的文件是不能通过在浏览器中直接输入URL来直接访问的(即将error.jsp剪切到WEB-INF),但通过请求的转发是可以的,所以可以这么处理一下 ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="/WEB-INF/error.jsp" %> ~~~ *** 在web.xml也可以配置错误页面(jsp中的errorPage删除) ~~~ <error-page> <!-- 404:没有指定资源;500,内部错误 --> <error-code>500</error-code> <location>/WEB-INF/error.jsp</location> </error-page> ~~~ 或 ~~~ <error-page> <exception-type>java.lang.ArithmeticException</exception-type> <location>/WEB-INF/error.jsp</location> </error-page> ~~~ *** ### include指令 ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>A Page</h1> <!-- 在a.jsp中包含b.jsp,file后的资源写的是相对路径,如果有/代表是wen应用根目录 --> <%@include file="b.jsp" %> </body> </html> ~~~ 静态包含,也称为源码级包含,只有一个.java源文件 *** ### JSP标签 ①jsp:include ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>A Page</h1> <!-- 在a.jsp中包含b.jsp --> <%-- <%@include file="b.jsp" %> --%> <jsp:include page="b.jsp"></jsp:include> </body> </html> ~~~ <jsp:include page="b.jsp"></jsp:include>与include指令不太一样,是动态包含,存在两个.java源文件 ②jsp:forward a.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <jsp:forward page="/b.jsp"> <jsp:param value="test" name="username"/> </jsp:forward><jsp:forward page="/b.jsp"></jsp:forward> </body> </html> ~~~ b.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>Page 222</h1> <%= request.getParameter("username") %> </body> </html> ~~~ 相当于request.getRequestDispatcher("/b.jsp").forward(request,response);还能够使用jsp:param传递一些参数,可以通过request.getParameter(String name)获取请求参数。 *** ### 中文乱码问题 ①在JSP页面上输入中文,请求页面后不出现乱码: ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> ~~~ 以及浏览器显示的字符编码与请求的jsp字符编码一致 ②获取请求参数中存在中文(默认字符编码为ISO-8859-1) a.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="b.jsp" method="post"> username:<input type="text" name="username"> <input type="submit" value="Submit"> </form> </body> </html> ~~~ b.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>Page 222</h1> <%= request.getParameter("username") %> </body> </html> ~~~ 在a.jsp提交表单后出现乱码 ![](https://box.kancloud.cn/b60e14f86da56a63b45f40c16a9c1eed_382x255.png) 解决方式 ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>Page 222</h1> // 对于post请求,在获取请求参数之前,指定请求参数的字符编码为UTF-8,即可解决中文乱码 <% request.setCharacterEncoding("UTF-8"); %> <%= request.getParameter("username") %> </body> </html> ~~~