一:响应重定向,和请求转发 概念
响应重定向:
1:浏览器跳转302
2:请求次数多
3:地址会变
4:得不到原始请求参数
:response.sendredirect(“跳转 的页面?参数列表”);//地址栏会变
301 redirect: 301 代表永久性转移(Permanently Moved),
302 redirect: 302 代表暂时性转移(Temporarily Moved ),
Http 状态 200 标示没有任何问题发生,没问题ok.
404:找不到,
500:internal error系统错误,tomcat错误
400:请求无效
401:未授权
403:禁止访问
请求转发:
1:服务器内部请求:
2:路径不变,
3:用户只能看见请求只有一次
4:得得到原始参数
5:在服务器中跳转,用户看不见,安全
requst.getrequesdispatcher(“result?isSuccess=RIGHT”).forward(request, response);
二:什么时候用哪种跳转:
1:请求转发多用于在服务器内部的多个处理阶段之间的衔接:A>b>C
内部跳转内部中有很多步骤,用请求转发,服务器,内部
request获取(get……)
jsp本质上也是一个servlet
多个servlet使用请求转发
2:响应重定向:业务处理结束,进入一个新的页面或调外部网页
response发送(send……)
三:扩展
f5:把之前的请求发一遍,把之前的流程重复执行一次
请求转发:重新提交,原参数重新提交
重定向:把当前网页刷新,不会把原参重新提交
jsp改配置:在Window下-》preference-》搜索jsp-》templates-》new jsp file(html 5)-》改所有的${encoding}改为utf-8
jsp:文件格式,本质上是一个servlet,服务器端一个组件
可以编写动态的页面,可以写java和html
四:常用语法:
四.1表达式元素
<%= %>=====><% response.getwriter %>、<%=request.getAttribute(“year”)%>、<% out.write%>
脚本元素:
<%java代码,可以写for循环%>
声明:比如说:new Date()需要导包import
默认声明<%!%>
四.2 JSTL标签库
标签库:
jstl:
<%@:表示指令
导入标签库:导包:jstl.jar和servlet.jar,
写指令:<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
日期 格式的指令
<%@ taglib prefix=f" uri=“http://java.sun.com/jsp/jstl/fmt” %>
- jar -> taglib指令
- c:forEach items="${data}" var varStatus
- c:if test
- c:choose/when/otherwise [test]
- c:set
- fmt:formatDate pattern
五:怎么找到jsp的.java和.class:
在随便的一个jsp页面中输入:<%=request.getServletContext().getRealPath(".")%>
运行后得到路径,找到temp0 下的work一直到 你要查找的项目名 ,一直查到jsp这个文件,可以看到jsp的class和java
查看他的java代码
六:jsp生命周期
jsp翻译成java代码
- jsp翻译成java
- 表达式元素 out.print(表达式代码) =>_jspService
- 脚本元素 直接java代码运行=>_jspService
- 静态部分(HTML或者文字) out.write(静态代码)=>_jspService
- 声明元素 类中作为属性或者方法存在
- 静态注释 out.write(静态代码),保留在原处 / 动态,直接不翻译
- java编译成class文件
- 执行
七:jsp为什么能直接使用request和response,
因为他是继承httpservlet,实际上jsp是一个servlet,有一个doget
,dopost的方法,直接有request和response
八:九大内置对象:
request,response,
context:表示上下文
九:路径问题:
-
html路径
- form action
- a链接 href
- 图片
相对路径:
1:没有' / ' 默认相对于当前路径的上一级目录:
(跳转到loginservlet, 如:项目名/a/aa---->项目名/a/loginservlet)
2:HTML <base>链接默认打开方式标签元素
<base href="<%=application.getContextPath() %>/" />
校正相对路径为 当前上下文路径,
通过这个base标签,在本个jsp页面的所有跳转都是从 (项目名/跳转页面或servlet)
绝对路径:
1:有' / ' 相对于tomcat的根路径
(跳转到loginservlet, 如:http://localhost:8080/开始的
2:- Servlet(路径在根目录下;路径不在根目录下 /product/add)
- getRequestDispatcher(url).forward()
- 绝对路径 /
- 相对于 上下文路径
response:
- sendRedirect(url)
- 绝对路径
- 相对于tomcat的根路径
- 手动添加上下文路径response.sendRedirect(request.getContextPath()+"/b");
request:一般需要'/',表示从项目名到指定跳转页面:
如:request.getRequestDispatcher("/index,jsp").forward(request,response);
--->项目名/index.jsp(servlet一样的,jsp本质上是一个servlet)
response:如果需要绝对路径:
response.sendRedirect(request.getContextPath()+"/index.jsp");
知识梳理:
页面与页面间不需要来回的传request,使用response使用响应重定向,
大多数使用请求转发的情况,为了使数据的安全,不容易被破解,使用(请求转发)request.getreques……,也知道了jsp实际上是一个servlet,可以把它看成多个servlet传输数据,所以多数情况下使用的是请求转发。jap代码相当于客户端为我们做了一些基础的设定,本质上的静态页面还是使用的是response.getwriter()重命名后变成九大内置对象的out了。
怎么把按钮与文本相互关联 input-----label:
<input type="checkbox" value="true" name="autologin" id="autologin" />
<label for="autologin">是否记住用户名密码</label>
<!-- input标签下的id与label下的for属性,组成一对表单控件定义标签 -->
input跳转页面可以在里面添加a标签