JSP基本知识
JSP脚本元素
Jsp声明语法:<%! %>
jsp声明只在当前页面有效,并且jsp声明中不能使用jsp内置对象。在其内声明的变量或方法为实例方法或实例变量
Jsp中Java代码块语法:<% %>
jsp中嵌入的java代码块称Scriptlet,默认为与jsp对应的Servlet类的service()方法中的代码块。Scriptlet位置由page指令中的method确定method值可以为service(),doGet(),doPost()等。在其内声明的变量为局部变量
Jsp中的表达式语法:<%= %>用于在页面上输出表达式或变量的值
JSP内置对象
对象 类型
request javax.servlet.HttpServletRequest
response javax.servlet.HttpServletResponse
pageContext javax.servlet.jsp.PageContext
application javax.servlet.ServletContext
out javax.servlet.jsp.JspWriter
config javax.servlet.ServletConfig
page java.lang.Object(类似于java中的this关键字)
session javax.servlet.HttpSession
exception java.lang.Exception
JSP的异常处理:
Jsp和Java一样在运行时也有可能抛出异常,在发生异常的页面中可以添加如下代码
<%@ page errorPage="errorpage.jsp" %>
当前页面发生异常跳转至errorpage.jsp进行异常处理
在errorpage.jsp页面中添加如下语句声明此页面是处理异常的页面
<%@ page isErrorPage="true" %>
在处理异常的页面可以直接访问exception内置对象,获取异常信息
<% exception.printStackTrace(new PrintWriter(out)); %>
JSP请求转发:
request.getRequestDispatcher("success.jsp").forward(request,response);
特点:地址栏不改变,我们称为请求转发,发起的是同一次请求,数据未丢失
response.sendRedirect("success.jsp");
特点:地址栏改变,我们称为重定向,发起的是两次请求,数据丢失
中文乱码解决方式:
post提交方式:通过request.setCharacterEncoding("utf-8");
get提交(url传参)方式:String str= new String(request.getParameter("uName").getBytes("iso-8859-1"),"utf-8");
关于JSP预编译:通过特殊的请求参数jsp_precomplie,它的值可以true或false;请求为ture那么Servlet容器仅仅对客户端请求的JSP文件进行预编译,即将JSP文件转化为Servlet类,但不运行Servlet;
1.http://localhost:8080/helloapp/hello.jsp?jsp_precomplie=true
2.找到Tomcat目录下work目录对应项目helloapp下的hello_jsp.class文件
将其复制到WEB-INF/classes对应的子目录中
3.在web.xml文件中配制hello_jsp类
<servlet>
<servlet-name>hi</servlet-name>
<servlet-class>org.apache.jsp.hello_jsp</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>hi</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
摘自 gdn_wolf的专栏
补充:Web开发 , Jsp ,