Servlet
- Servlet是Java所提供的一门动态资源开发技术
简单实现
- 创建web项目,导入Servlet的依赖坐标
javax.servlet javax.servlet-api 3.1.0 provided
- 创建一个类实现Servlet接口
public class ServletDemo implements Servlet { public void init(ServletConfig servletConfig) throws ServletException { } public ServletConfig getServletConfig() { return null; } public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { } public String getServletInfo() { return null; } public void destroy() { }}
- 对Servlet进行配置,在类上使用@WebServlet注解,配置访问路径
@WebServlet(/demo)public class ServletDemo implements Servlet {....}
这里完整的写法是
@WebServlet(urlPatterns = "/demo",loadOnStartup = 0)public class ServletDemo implements Servlet {....}
这里的loadOnStartup默认值是 -1 ,表示在调用时才会实现服务。如果是 0 及 以上,表示在容器工作时一起运行了,越小优先度越高,当一些较大且重要的功能需要实现而不希望用户等太久,就可以这样操作。
注意!!!!!
这里的路径前一定要加上" / ",不然会显示“子级路径创建失败”的错误!!!
- 启动Tomcat,浏览器输入相应的URL进行访问
http://localhost/demo
Servlet 的生命周期
Servlet运行在容器之中,生命周期由容器所决定,分为四个阶段:
- 加载和实例化:默认情况下,Servlet被第一次访问时,由容器所创建Servlet对象
- 初始化:在Servlet被实例化之后,Servlet容器将调用init()方法初始化对象,完成一些初始化的工作
- 请求处理:在每次请求Servlet时,容器都会调用Servlet中的service()方法
- 服务中止:在释放内容,容器关闭时Servlet会调用destroy()方法,并且释放Servlet实例。(要只用控制台运行Tomcat并且停止运行才OK,IDEA的直接关闭会毁掉协议)
Servlet 的基本方法
方法 | 作用时段 |
---|---|
public void init(ServletConfig servletConfig) | 初始化方法,只被调用一次 |
public ServletConfig getServletConfig() | 提供服务方法,每次调用都会执行 |
public void service(ServletRequest servletRequest, ServletResponse servletResponse) | 获取对象 |
public String getServletInfo() | 获取对象信息 |
public void destroy() | 销毁方法,在资源执行时会执行 |
HttpServlet 的简单介绍
- HttpServlet使用步骤
- 继承HttpServlet
- 重写doPost()和doGet()方法’’
@WebServleT ("/demo1")public class ServletDemo3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("啦啦啦"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("POST"); }}
- HttpServlet原理
- 获取请求方式,并且根据不同的请求方式使用不同的方法
比如写一个Post方式提交数据的表单
此时ServletDemo3里面的doPost方法就会实现
urlPattern的配置规则
- 精确匹配:
- 配置路径:@WebServlet(/demo)
- 访问路径:http://localhost/demo
- 目录匹配:
- 配置路径:@WebServlet(/demo/*)
- 访问路径:http://localhost/demo/aaa
- 访问路径:http://localhost/demo/bbb
- 扩展名匹配:
- 配置路径:@WebServlet(*.do)
- 访问路径:http://localhost/aaa.do
- 访问路径:http://localhost/bbb.do
!!注意 :这里的 * 之前没有 / !!
- 任意匹配:
- 配置路径:@WebServlet(/)
-
- 配置路径:@WebServlet(/*)
- 访问路径:随便啦~~
注意:当项目中的Servlet配置了任意匹配的路径,会覆盖tomcat的DfaultServlet,当其他的url-pattern匹配不上时,就会走这个Servlet,当项目中配置了"/"意味着会访问任意的路径
相关作业
HTML部分
Servlet部分
String name = req.getParameter("name"); System.out.println(name); name = new String(name.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8); System.out.println(name);
运行结果:
??????
张三
Cookie的基本使用
- Cookie是浏览器端的会话跟踪技术
发送Cookie对象
- 创建Cookie对象
Cookie cookie = new Cookie("key","value");
- 发送Cookie对象到客户端:使用response对象
response.addCookie(cookie);
获取Cookie对象
- 获取客户端所有Cookie对象,使用request对象
Cookie[] cookies = request.getCookies();
- 遍历数组
- 获取想要的信息
cookie.getName(); cookie.getValue();
具体的实现(例如想要获取“name”的信息)
Cookie[] cookies = request.getCookies(); //进行遍历 for(Cookie cookie : cookies){ if("name".equals(cookie.getNmae()){ String value = cookie.getValue(); System.out.println(value); break; } }
使用细节
- Cookie的存活时间
- 默认情况下当浏览器关闭时,内存释放,则Cookie释放
- 可以使用setMaxAge(int second)设置Cookie的存活时间
- 正数:将Cookie写入当前浏览器的内存中,直到时间结束
- 负数:默认值
- 0:删除对于的Cookie
- Cookie存储中文
- Cookie不能直接存储中文,要进行一系列的转码
例如,在设置时
String value = "名字"; value = URLEncoder.encode(value,"UTF-8");
在接收时
String value = request.getValue(); value = URLDecoder.decode(value,"UTF-8");
Session的一些基本使用
- 服务器端的会话跟踪技术
- JavaEE提供HttpSession接口,来实现一次会话多次请求数据之间的资源共享
- 使用
- 获取对象
HttpSession session = request.getSession(); - Session对象的基本使用功能
方法名称|作用
- 获取对象