1.servlet使用注解
@WebServlet(“上下文路径”)
注意:
使用注解前,配置web.xml false表示启动注解
2.servlet-请求转发
- 地址栏没有变化【因为只发送了一次请求(多个Servlet用的是同一个请求对象)】
- 请求数据相同(同一个请求对象,所以请求信息相同)
- 转发到最后的响应对象,才会生效(除非include包含方式转发)
- forward(转发)不可以跨域(项目)访问【现在访问的是自己的网站,不能从自己网站的内部,直接跳到别的网站】
- 可以访问到 WEB-INF中的资源(因为在项目里)
①WEB-INF里面的资源是安全的,不能直接从外部(浏览器)直接访问
②通过内部程序来访问WEB-INF中的资源
req.getRequestDispatcher("/WEB-INF/inf.html").forward(req, resp);
/代表 了webapp项目根路径,必须写
3.servlet-重定向
- 地址会发生变化(请求先到a,之后重定向,出去项目外边,重新进来,发送了第2次请求)
- 不是同一个请求对象:请求信息不一样(请求头不共享)
- 响应依然是最后一个BServlet
- 可以跨域访问,因为重定向是去了项目外面,重新发了一个请求,不在项目内部
- 重定向不能访问WEB_INF的资源文件 (因为已经出去了项目外,不能直接访问WEB-INF内的资源)
4.请求转发和重定向的区别
请求转发 | 重定向 |
---|---|
同一个请求对象 | 不是同一个对象 |
地址不会变化 | 地址会变化 |
请求信息相同 | 重定向后请求信息不用(另外一个请求对象) |
不可以跨域访问(网站内) | 可以跨域访问(网站外) |
可以直接访问WEB-INF下的资源 | 不可以直接访问WEB-INF下的资源 |
5.请求包含(了解)
req.getRequestDispatcher("/include/b").include(req, resp);
两个Servlet都会响应
6.作用域对象
作用域对象的作用:通过作用域对象让不同Servlet共享数据
4大作用域对象:
-
pageContext 不会用 当前页面存在
-
Request : service方法传递的请求对象 http无状态,每次请求相互独立存在
-
Session session = Req.getSession(); 同一次回话时存在,除非浏览器断开连接
-
Application ->其实是ServletContext对象 同一次应用时存在,除非服务器关闭
ServletContext(上下文路径对象)获取4种获取方式:
作用域对象存取数据
作用域对象.setAttributer(“list”,list)
使用Request对象时:
请求转发方式可以实现数据不同servlet数据共享
重定向时,下一个servlet取不到上一个servlet存取的数据(可通过Session和ServletContext实现)
7.ServletContext对象的介绍
表示上下文对象,也是Application-ServletContext
获取方式四种:
ServletContext常用方法
getContextPath()//拿到上下文路径 如:/xx
getRealPath(“/”);拿到真实路径–(以后做上传下载可以使用) 项目真实(绝对路径)
getInitParameter(“encoding”);//拿到初始化参数(只能拿到全局里面的参数信息)
8.Jsp
Servlet:接收数据,获取数据,
Jsp:展示数据
jsp是一种类似html的文件,本身也是一个servlet
Html可以拖到浏览器直接运行
Jsp必须开启服务器才能在浏览器执行,服务器会对jsp进行编译
Jsp原理
jsp继承了HttpServlet的一个子类
Jsp其实也是一个servlet,他会将jsp页面生成一个Java文件,里面有一个类似service的方法_jspService方法
Jsp语法
Jsp注释
<%-- 注释内容–%>页面源代码看不见
<%在_jspService内部的java代码%>
<%= java代码获取值的表达式 %>
<%! 在_jspService外面,用于定义成员变量和成员方法 %>
JSP三大指令
Page : 页面指令
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
errorPage="/myerror.jsp" :如果当前页面出错,就跳转到对应的页面
isErrorPage=“true” :这个页面是否是错误页面(当我们要在页面上直接使用exception的时候就可以加上它)在错误页面写
Include : 包含指令
当每个页面都有导航的时候,我们只需要使用一个,这个时候就可以使用包含指令:
Taglib:标签指令
九大内置对象
- Request
- Response
- pageContext
- Session
- Application
- Config
- Out
- Page
这9个对象在_jspServlet方法内可直接使用,也就是在jsp中可通过<%%>和<%=%>访问
其中包含了四大作用域对象在里面
Request
pageContext
Session
Application–>ServletContext
Jsp动作元素
只了解包含include
静态包含<%@ include file="/include/b.jsp" %>
动态包含<jsp:include page="/include2/b.jsp"></jsp:include>
包含的时机不同!!
静态包含先把页面包含进来,再翻译成java代码!!(只有一个文件)
动态包含先都编译成java代码,再将内容进行包含!!(有多个文件)
什么时候使用静态包含,什么时候使用动态包含?
如果包含的是静态页面(html),那么使用静态包含
如果包含的是动态网页(jsp),那么使用动态包含