jsp小脚本:
语法规则:<%.....%>
合法内容:能够写在方法里的java代码片段都可以作为小脚本.
转译成servlet时的规则:原封不动成为servlet类的service()方法里面的一段代码.
jsp声明
语法规则:<%!....%>
合法内容:成员属性或成员方法的声明
转译成servlet时的规则:成为JSP页面转译成的servlet类中成员属性或成员方法
<%!
public String getResult(){
//...
}
%>
转译:将代码整条插入到servlet类中
jsp页面中的指令:
语法规则:<%@指令名 属性=值%>
常用指令:
include指令:
taglib指令:导入jar包
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
作用:
控制jsp在转译成servlet类时生成的内容
page指令:用于导包,设置页面属性
例如:<%@ page import="java.util.*,java.sql.*"%>
<%@ page contentType="text/html;"%>
设置当前页面被浏览器打开时的默认的格式
<%@ page pageEncoding="ISO-8859-1"%>
设置容器读取该文件时的解码格式,这也就是为什么Web服务器默认按照iso-8859-1解码的原因
<%@ page charset=ISO-8859-1"%> 容器在解析jsp内部用ISO-8859-1这个进行编码
<meta content="text/html; charset=ISO-8859-1"> 浏览器打开后进行ISO-8859-1解码
include指令:
作用:在jsp页面转换成servlet时,能够将其他文件包含进来,可以包含jsp文件也可以是静态的HTML文件
通过该语句能方便的在每个jsp页面中包含导航栏,版权声明和logo等
语法:
<%@ include file="url"%>
<%@ include file="head.html" %>
JSP页面中隐含对象
什么是隐含对象?
容器自动创建,在jsp文件中可以直接使用的对象
作用
JSP预先创建的这些对象可以简化对http请求,响应信息的访问等
隐含对象
输入输出对象:request,response,out
作用域通信对象:session,application,pageContext
servlet对象:page,config
异常对象:exception
request HttpServletRequest 请求信息
response HttpServletResponse 响应信息
out JSPWriter 输出的数据流
session HttpSession 会话
application ServletContext 全局的上下文对象
pageContext pageContext jsp上下文对象
page Object jsp页面本身
config ServletContext servlet配置参数
exception Throwable 抓捕网络异常
转发
什么是转发:
一个web组件(servlet/jsp)将未完成的处理通过容器转交给另外一个web组件继续完成
常见情况:
一个servlet获得数据之后(比如通过dao),将这些数据转发给一个jsp,由这个jsp来展示这些数据(比如:以表格的方式来展示)
如何实现转发:
1.绑定数据到request对象,
2.获得转发器
3.转发
request.getRequestDispatcher(String path).forword(request,response);
如何实现绑定
request.setAttribute(String name,Object obj);
读取绑定值
Object request.getAttribute(String name);
如果绑定名的对应值不存在,返回null.
获取转发器
RequestDispatcher rd = request.getRequestDispatcher(String path)
path:转发的目的地,即将未完成的处理继续下去的另一个组件,比如说jsp
转发
实现转发rd.forward(request,response).
通常第二步和第三步合为一行语句
转发特点:
.转发之后,地址栏地址不会发生变化,原因是转发的过程是发生在服务器内部,浏览器并不知道
.转发的目的地必须是一个应用内部的某个地址
.转发所涉及的各个web组件会共享同一个request和response对象.
思考:
1.重定向语句之后在写语句会报异常
所以转发之后再写代码语句是否会报异常,还是正常执行
正常进行,只要代码不出异常进行
2.编写程序,查询t_emp表中的数据,封装成对象,使用转发将数据传递到下一个页面遍历数据进行展示
转发和重定向的区别:
.重定向发送请求并收到响应以后再次向一个新地址发送请求,转发是服务器收到请求后为了完成响应转到一个新的地址
.重定向中有两次请求对象,不共享数据,转发只产生一次请求对象且在组件间共享数据
.重定向地址栏发生改变,而转发不会
.重定向的新地址可以是任意地址,转发到的新地址必须是同一个应用内的某地址.
异常处理:
编程式处理
try{
}catch(Exception){
//转发到错误页面
request.getRequestDispatcher(String path).forward(request,response);
}
容器中声明式处理:
1.将异常抛给容器,但是底层的错误提示不要反回给用户
ps:异常只允许抛service指定的异常,不能超出其异常
-使用如下写法:throw new ServletException(e)
try{
....
}catch(Exception e){
request.getRequestDispatcher("head.jsp").forward(request,response);
}
Writer writer = new StringWriter();
e.printStackTrace(new PrintWriter(writer));
// TODO Auto-generated catch block
request.setAttribute("err", "系统错误请重试"+writer.toString().substring(0,100));
2.在web.xml文件中配置错误处理页面
<error-page>
<exception-type>
javax.servlet.servletException
</exception-type>
<location>error.jsp</location>
</error-page>
2.声明式:
try{
....
}catch(Exception e){
e.printStackTrace();
throw new ServletException(e);//将异常抛给服务器,在xml.web中添加声明
}
练习:
为上一题增加编程式异常处理和声明式异常处理
作业:
员工管理--注册
需求:做一个登陆界面,用户进行登入,登陆后验证用户信息,如果该用户合法