目录
一 HTTP协议
http协议是基于tcp协议的应用传输层 , 是一种通信协议 。 简单来说就是客户端和服务端之间传输数据的一种规则。
javaweb三大核心组件:
1.servlet 控制器
2.filter 过滤器
3.Listener 监听器
二 Servlet
1.什么是servlet?
servlet是处理前端请求并且做出程序的前端小程序。
2.servlet实现
方法一:
1.创建一个类 , 实现Servlet接口
2.在web.xml文件中 , 配置servlet
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>com.feisi.controller.HelloServlet(servlet类的全限定名称)</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
方法二:
上面那种实现接口的方式需要实现的方法太多 , 而tomcat帮我们写了一个类 , 它实现了不常用的方法 , 我们只需要实现service方法 , 所以我们第二种方式就是:继承GenericServlet类
public class myController_2 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
}
方法三(我们用的方法):继承HttpServlet
它起始就是在方法二的基础上 , 把service方法继续进行了划分 , 当请求方式get的时候 , 调用doget方法 , 当请求方式是post的时候 , 调用封装好的dopost方法 , 而且也不需要我们自己必须覆盖 , 而是可以按照需求重写某一个方法。
public class myController_3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
3.Servlet注意事项
1.servlet是单例的 , 由服务器创建
2.servlet是线程不安全的 , 所以不能够在servlet中创建全局性的无状态变量 , 只能创建有状态变量。
4.Servlet生命周期
5.ServletConfig:servlet配置对象
6.ServletContext:servlet上下文对象
注意:一个应用程序只有一个ServletContext
创建对象:
// ServletContext对象
ServletContext servletContext = this.getServletConfig().getServletContext() ;
方法:
1.String getContextPath(): 获取上下文路径,即项目名称
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("servlet被调用");
String contextPath = servletContext.getContextPath();
System.out.println("路径:"+contextPath);
}
2.String MimeType(String name):获取某个资源MIME类型格式
3.String getRealPath(String path):获取资源的真实路径
4.ClassLoader getClassLoader():获取类加载器
5.setAttribute(String key , Object value): 在上下文对象中设置一个key--value键值对信息
6.getAttribute(String key):获取上下文对象key对应的value信息
7.removeAttribute(String key ) :移除指定key的信息
7.Session和Cookie
1.什么是会话
第一次请求该项目资源->退出或关闭浏览器即是完成一次会话
2.什么是Cookie
cookie是当你浏览某个网站的时候,由web服务器存储在你的机器硬盘上的一个小的文本文件。它其中记录了你的用户名、密码、浏览的网页、停留的时间等等信息。当你再次来到这个网站时,web服务器会先看看有没有它上次留下来的cookie。如果有的话,会读取cookie中的内容,来判断使用者,并送出相应的网页内容,比如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。
3.为什么要使用Session和Cookie
HTTP最大的特点是无连接无状态,使用Cookie和Session的技术就是为了解决这个问题,简单来说,就是让浏览器在一段时间内认识你
4.会话的原理
1.当第一次访问项目资源时 , 浏览器会创建一个会话的id , 保存在cookie中
2.当第一次请求服务器 , session会随着cookie一次发给服务器
3.服务器会查询是否保存该会话对应的id的对象 , 如果没有则创建session对象 , 保存在服务器中 ,如果有则说明已经存在了则不创建
4.处理完成后 , 会将session的id保存cookie中 , 然后将session的id待会并且保存在浏览器中
5.cookie和session区别
1.cookie中保存String类型 , session中保存Object类型
2.cookie保存在浏览器中 , session保存在服务器中
3.cookie保存数据是不安全的 , session保存数据是安全的
4.cookie除非主动清除浏览器数据 , 否则一致存在;而session只要关闭浏览器就会自动清除
Session一些常用方法:
@WebServlet("/Session_Servlet")
public class Session_Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入");
// 会话
HttpSession session = req.getSession() ;
// 保存当前会话
session.setAttribute("user" , "当前登录的用户对象");
// 获取当前会话对象
session.getAttribute("user") ;
// 清除当前会话对象
session.removeAttribute("user");
// 会话失效
session.invalidate();
// 设置会话失效的最大不活跃状态事件(就是你长时间停留在某个页面不操作)
session.setMaxInactiveInterval(1000);
/*
可以用于判断当前用户是否登录 , 我们通过用户名去获取会话 , 如果这个会话等于null
说明没有建立会话 , 即说明改用户没有登录。(因为我们只有在登录成功后,才保存会话内容(用户姓名等))
*/
}
}
三 HttpServletResponse
1.常用方法
--void addCokie(Cokie cokie):添加cokie数据
--void addHeader:添加响应头
--void addDateHeader:添加日期类型的响应头
--OutputStream getOutputStream:获取io字节输出流
2.解决编码乱码问题
resp.setContentType("text/html;charset=utf-8")
3.注意
JavaWeb下的WEB-INF下的文件是不能被直接访问的 , 所以放在它下面的文件安全性是很高的。