JavaWeb(深入了解JSP+九大内置对象+转发的特点和他与重定向的区别)

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中添加声明
}

练习:
为上一题增加编程式异常处理和声明式异常处理

作业:
员工管理--注册
需求:做一个登陆界面,用户进行登入,登陆后验证用户信息,如果该用户合法


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值