2021年9月13日
1.URL匹配规则
2.ServletContext对象【重点】
3.Request对象
4.Response对象
1.URL的匹配规则
@WebServlet("/test")
/test就是咱们某一个资源的路径写法
用户申请了一个资源
http://localhost:8080/day41_wb/LoginServlet
1.http协议
2.localhost 本地服务器主机的名字
3.8080端口号
4.day41_wb/LoginServlet是咱们所申请的资源
day41_wb/当前应用程序目录,就是程序的绝对路径
LoginServlet 申请的资源
url匹配原则:
1.精准匹配
比如 /资源名字@WebServlet("/test.do")
2模糊匹配符
比如 @WebServlet("*.do") 以.do为后缀的资源都可以进行访问
比如@WebServlet("/*") 所有资源都可以访问
package com.qfedu.a_servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//精准匹配,通过你写的@WebServlet真实的值,去找到你所对应的资源
package com.qfedu.a_servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//这个模糊匹配是以后缀是.do的资源
//进行匹配的时候在web应用程序下面,.do可以随意些就可以找到这个资源了
//注意*前面没有加斜线
//@WebServlet("*.do")
public class TestServlet2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.getWriter().append("这个是模糊匹配里面的一种 以.do后缀的匹配");
}
}
package com.qfedu.a_servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//模糊匹配的另外一种写法,就是在/后面随意写就可以了!!!
//以后会用,在将过滤器的时候使用。
//@WebServlet("/*")
public class TestServlet3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.getWriter().append("我这个是随意的资源访问,url写啥都可以给你匹配到");
}
}
2.ServletContext【重要】
ServletContext接口,实例化以后是一个对象,
是咱们当前应用程序可以使用的唯一对象。
在一个Servlet里面,使用另外一个Servlet的提供的数据,怎么办?转发,但是不用用转发怎么办?需要使用ServletContext对象,是全局的。比如你在一个Servlet里面设置一个数据,想要在另外一个Servlet里面使用这个数据,没办法。但是可以通过ServletContext这个接口,这个对象是全局的。如果你在一个Servlet里面使用servletContext 对象设置一个数据,在另外一个Servlet里面也可以通过ServletContext这个对象获取这个数据
两个Servlet依靠servletContext对象进行通信,分享一些数据
package com.qfedu.b_servletContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
package com.qfedu.b_servletContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
3.Request对象
ServletReuqest接口
用户访问服务器,服务器会生成一个对象包含了http所有请求头
由于使用的是http协议,HttpServletRequest
3.1RequestAPI
getRequestURL(); 获取完成的url
getRequestURI();获取资源名字
getQueryString();获取一个url参数部分
getRemoteAddr();返回的是客户端的ip地址
getRemoteUser();返回的是客户端的用户
getRemotePort();返回的是客户端的主机的端口号
getRemoteHost();返回的是客户端的主机地址
getCookie();获取CookieD对象
getSession();获取Session对象
getLocalName();获取Web服务器主机的名字
getServletContext();获取上下文对象的
setCharacterEncoding();设置编码集的
getParameter();获取前端传过来的数据的
setAttribute();将数据设置给request对象
getAttribute();获取request对象中的数据的
package com.qfedu.c_request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
4.Response对象
响应对象,把数据给客户端
咱们的Servlet紧紧围绕着两个点学习(Request, Response)请求和响应
setHeader(); 设置响应头的参数
setContentType();设置字符编码集
getWriter();获取字符输出流对象
addCoookie(); 对浏览器新增一个Cookie
sendRedirect();重定向
5.Cookie和Session
http是一种无状态的访问
浏览器发送请求到服务器,服务器给与一定的响应,但是断开连接以后,如果服务器更新了,如果服务器没有发送任请求,是没有任何响应的
这个就是无状态的访问:
实际操作中存在一定的问题:
比如登录一个网站以后,再次跳转到这个网站的其他页面,他是不会保持第一个页面的状态的,这叫无状态的。
登录一个页面的话,他不会保证上一页面的状态,如何来保持上一个页面的状态的呢?靠咱们即将要讲的会话技术(Cookie和Session),才能保持上一个页面的状态!!!
如果没有cookie和session的话,http协议是一个无状态的协议,你每一个跳转到下一个页面的时候都是需要先登录的,这就很麻烦了。
比如淘宝(cookie和session的话),登录上去了,(需要登录才能)选择商品,(需要登录)放到购物车,(需要登录)然后购买,这样用户的体验是相当差的然后才有咱们即将要讲的会话控制。会话控制的目的就是为了点击页面的时候,保持上面一个页面的状态
5.1会话技术
cookie:
浏览器保存的内容,通常cookie是在浏览器中保存的,每一次访问服务器的时候,浏览器会自动的把cookie带到下一个页面。
cookie的大小时有限制,通常是4096byte.
cookie信息中不能有中文
cookie的保存是以键值对形式存在的
session:
保存服务器中,每一个session在咱们当前的服务器会有一个标识号,
会保存浏览器访问服务器的一些记录信息,没有大小的限制
可以保存中文
信息的保存也是以键值对形式存在的
5.2Cookie
如果想要使用cookie要保证咱们的浏览器是开启cookie,所以说有一定的弊端,如果浏览器cookie关了,关了就不能再使用cookie了
常用的API
1.cookie的构造方法,目的是实例化出来cookie对象
Cookie(String name, String value);
2.设置cookie的方法
setValue(String value);修改cookie的值
setMaxAge(int time);设置cookie的有效时间
setPath(String path);设置当前cookie的有效路径
3.要将cookie发送到浏览器
response.addCookie(Cookie cookie);
先给浏览器设置cookie,获取cookie,销毁cookie,获取cookie(销毁cookie以后还有没有cookie)
设置cookie
package com.qfedu.d_cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
获取cookie
package com.qfedu.d_cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
销毁cookie
package com.qfedu.d_cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/destroyCookie")
public class DestroyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//退出登录
Cookie[] cookies = request.getCookies();//获取cookie
for (Cookie cookie : cookies) {
//JSESSION
//java2109
if(cookie.getName().equals("java2109")) {
cookie.setMaxAge(0);//销毁cookie
//重新发送给浏览器
response.addCookie(cookie);
}
}
}
}
浙公网安备 33010602011771号