目录
一、Tomcat详解
二、http详解
什么是http
两个时代
http请求(request)
http响应
三、Maven详解
四、Servlet
1.什么是servlet?
2.配置环境变量?
3.helloservlet
4.servlet原理
5.mapping:
6.ServletContext
7.HttpServletResponse
8.HttpServletRequest
六、session
一、Tomcat详解
网站是如何进行访问的:
- 输入一个域名;
- 检查本机的C:\WindowsSystem32driversetchosts配置下有没有
- 有:直接返回相应的ip地址
- 没有:去DNS服务器上找 (全世界的域名都在这里)
二、http详解
什么是http
http(超文本传输协议)是一个简单的请求-响应协议,通常运行在tcp之上。
文本:html,字符串,......
超文本:图片,音乐,视频,......
端口:80
https:安全的
端口:443
两个时代
http/1.0:客户端可以与web服务器链接后,只能获得一个web资源,断开连接
http/1.1:客户端可以与web服务器链接后,可以获得多个web资源
http请求(request)
客服端--发送请求--服务器
请求行中的方式:get、post、head、delete、put
get:请求能够携带的参数少,大小有限制,能在浏览器显示,不安全但高效
post:大小没限制,安全但不高效
消息头
http响应
服务器--响应请求--客户端
响应码:
200:响应成功
3××:请求重定向
4××:资源不存在 404 403禁止访问
5××:粗武器代码错误 500 502网关错误
三、Maven详解
maven项目架构管理工具(方便导入jar包的)
Maven的核心思想:约定大于配置
四、Servlet
1.什么是servlet?
编写一个类,实现servlet接口
把开发好的部署到web服务器中
2.配置环境变量?
H2_HOME: maven目录下的bin目录
MAVEN_HOME:maven的目录
在系统变量的path:%MAVEN_HOME%bin
3.helloservlet
1.构建一个maven项目,删掉src目录。
2.关于父子工程:
父:会有module
子:parent
3.Maven环境优化
修改web.xlm为最新的
将maven的结构搭建完整
4.编写一个servlet程序
编写一个普通类
直接继承servlet接口,继承HttpServlet
5.编写servlet的映射
hello com.kun.servlet.HelloServlet hello /hello
6.配置tomcat
7.启动测试
4.servlet原理
5.mapping:
1.可以请求一个映射
2.可以请求多个映射
3.通配符
resp.sendRedirect("/r/img"); //
界面跳转:表单提交
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Hello World!
<%--这里提交的路径 需要找到项目的路径--%>
<%--${pageContext.request.getContextPath()}代表当前项目--%>
request com.kun.servlet.RequestTest request /login
System.out.println("进入请求");
// 处理请求
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println(username);
System.out.println(password);
// 重定向的时候一定要注意,当前路径问题
resp.sendRedirect("/r/success.jsp");
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
新界面
8.HttpServletRequest
代表客户端的请求,用户通过http协议访问服务器,http中所有的信息都被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户端所有信息。
1.获取前端的值
package com.kun.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobbies = req.getParameterValues("hobby");
// 后台接受乱码问题
System.out.println(username);
System.out.println(password);
System.out.println(Arrays.toString(hobbies));
// 通过请求转发
// req.getContextPath()=/req
System.out.println(req.getContextPath());
req.getRequestDispatcher("/success.jsp").forward(req,resp); //转发不用加项目目录名
//resp.sendRedirect("/req/success.jsp"); //重定向加路径名
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
五、cookie
1.会话:用户打开一个浏览器,点击了很多链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话
2.一个网站怎么证明你来过?
1.服务器给客户一个cookie,客户端下次访问服务器带上cookie就可以了
2.服务器登记你来过,下次你访问的时候来匹配你。
3.保存会话的两种技术
cookie:客户端技术(响应和请求)
session:服务器技术(利用整个技术,可以保存用户的会话信息,把信息放在session中)
cookie方法:
package com.kun.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
public class cookieDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
// resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=utf-8");
PrintWriter out = resp.getWriter();
// 服务器从客户端获取
cookie[] cookies = req.getcookies();
// 判断是否存在
if (cookies!=null){
// 如果存在
out.write("你上次访问的时间是:");
// for(cookie cookie:cookies){ }
for (int i = 0; i < cookies.length; i++) {
cookie cookie = cookies[i];
if (cookie.getName().equals("Time")){ // 获取cookie
// cookie.getValue(); //获取cookie的值
long l = Long.parseLong(cookie.getValue());
Date date=new Date(l);
out.write(date.toLocaleString());
}
}
}else {
out.write("这是你第一次访问");
}
// 服务器响应一个cookie
cookie cookie = new cookie("Time",System.currentTimeMillis()+"");
resp.addcookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
cookie[] cookies = req.getcookies(); //获取所有cookie信息
cookie.getName() //获取cookie的名称
cookie.getValue(); //获取cookie的值
//创建cookie
cookie cookie = new cookie("lastLoginTime", System.currentTimeMillis() + "");
cookie.setMaxAge(24 * 60 * 60); //设置cookie的有效期
cookie细节问题
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器大宋多个cookid,最多存放20个
- cookie大小限制4kb
- 上限大概为300个(浏览器上限)
删除cookie
- 设置有限期,关闭浏览器,自动失效
- 设置有限期为0
URLEncoder.encode("小明","utf-8") // 编码
URLDecoder.decode(cookie.getValue(),"UTF-8") // 解码
cookie存放位置:C:Users14024AppData
六、session
1.什么是session?
- 服务器会给每一个用户创建一个session对象
- 一个session独占一个浏览器,只要浏览器没有关闭,这个session就不会消失
- 用户登录,整个网站都可以访问——保存用户信息——保存购物。。。。
2.cookie和session区别
- cookie是把用户的数据写给用户的浏览器,浏览器去保存
- session是把用户的数据写到独占session中,服务器端保存
3.使用场景(保存用户信息——保存购物)
存数据
package com.kun.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class SessionDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//得到session
HttpSession session = req.getSession();
//给session存东西
session.setAttribute("name","小明");
// Person person = new Person(18, "小明");
// session.setAttribute("person",person);
//获取session的Id
String id = session.getId();
//判断session是不是新创建
if (session.isNew()){
resp.getWriter().write("session 创建成功,ID"+id);
}else {
resp.getWriter().write("session 已经存在了"+id);
}
//session创建的时候做了什么事情
// cookie cookie = new cookie("JSESSIONID", id);
// resp.addcookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
取数据
package com.kun.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class SessionDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//得到session
HttpSession session = req.getSession();
//从session中获取数据
String name = (String)session.getAttribute("name");
//Person person = (Person)session.getAttribute("person");
System.out.println(name);
//System.out.println(person);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
4.注销session
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//得到session
HttpSession session = req.getSession();
session.removeAttribute("name");
//注销
session.invalidate();
}
15



