Servlet
是一个接口,定义了生命周期等等方法属性,本身定义的是一种网络服务
是sun为后续技术发展做的一个接口,目前仅Http协议,今后可能会发展出其他协议
因此,再有新的协议出现的时候,直接实现Servlet接口即可。
HttpServlet
HttpServlet遵循HTTP协议并实现了servlet接口,并把servlet接口中的方法实现了
doget和dopost是执行用户请求的终点,get请求会调用doget方法,post请求会执行dopost方法。
所以我们可以再这2个方法中定义我们自己的业务逻辑。
实现
web.xml配置映射
<servlet>
<servlet-name>className</servlet-name>
<servlet-class>package.class</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>className</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
添加注解
@WebServlet(name = "className", urlPatterns = "/index")
public class IssuServlet extends HttpServlet {
}
Request
request
定义
封装了客户端请求的信息
包括
请求行(General) :请求方式,资源路径,协议
请求头(Request Headers) Referer用于防盗链
请求体(Query String Parameters) 请求参数
demo:
G:\project\demo\interface\servlert
请求转发
request.getRequestDispatcher(String path).forward(request,response);
一次请求,服务器跳转
地址栏不变
只能在同web内跳转,可传递request对象,不可跨域
统一资源定位符 例如 http:/localhost:8080/MavenMyutils/home.do request.getRuquestURL()
- 协议和版本 例如 HTTP/1.1 request.getProtocol()
- 协议 例如 http request.getScheme()
- 域名 例如 localhost request.getServerName()
- 端口 例如 8080 request.getServerPort()
- 发布到tomcat下的项目名称 request.getContextPath()
- servlert路径 request.getServlertPath()
Response
response
定义
封装了服务器返回客户端信息的对象
包括响应行,响应头,响应体
demo:
G:\project\demo\interface\servlert
重定向
response.sendRedirect("http://www.baidu.com")
可以跨域
两次请求
浏览器地址栏改变
记得重定向完加return
两个请求已经不在一个线程了(一个请求就是一个线程,servlert多线程单实例)
Cookie对象
cookie
定义:
服务器向客户端写的文本内容
规则:
服务器只能获取自己写的cookie
客户端可以阻止服务器写入
种类:
属于窗口/子窗口(放在内存中的)
属于文本(放在本地,有生命周期的)
作用域:
对于服务器而言:内存里的cooie只能被同一个浏览器及其子窗口访问
对于客户端而言:同一个浏览器窗口的cookie能够被同一个webapp(跨域失效)下的url访问
同一个
6:一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到 (路径 = URL)(路径 != 真实文件路径)
Session对象
session
定义:
一个浏览器访问服务器,服务器自己开辟一块session内存,用来保存访问者信息,因为http协议是非连接的,
服务器还需要将这个session独一无二的sessionid给浏览器,这样才能保证浏览器每次请求,服务器读取它自己的session信息。
浏览器关闭,session消失
作用域:
对于浏览器而言,同一个webApp(不能跨域)下的所有url共享一个一个session
对于服务器而言,只能是同机器的同一个浏览器(包括子窗口),再打开一个浏览器 不共享session
重点:
1.记录在服务器端内存里的数据
2.浏览器关闭session结束
实现:
将sessionid写给客户端即可实现session功能:cookie实现或者url重写实现
demo:
G:\project\demo\interface\servlert
场景;
系统权限:session里设置你用户的权限,其他页面的Controller根据session里的权限决定页面哪些隐藏
登录
白名单
Application对象
post请求和get请求的区别
从底层实现上来看,本质上俩这没什么区别,都是基于通信协议向指定的URL传数据
细节上的区别在于:
get方式一次性将数据放在请求头里,一次性将数据发送到指定URL
post方式分两步,第一步先发送请求头告诉服务器我要传Form Data 数据,服务器响应后在发送Form Data给服务器
因为get方式发送的参数会在URL显示,被缓存到,不安全,而post请求的参数看不到,但是F12就能解决,所以...
get方式发送数据的大小受浏览器对URL长度的限制,比较小,而post请求的大小受到服务器处理数据能力的限制,一般会比较大。