目录
1.Servlet 介绍
1.1 什么是Servlet
1.2 Servlet的使用方法
1.3 Servlet接口的继承结构
2.Servlet的生命周期
2.1 servlet生命周期中重要的方法
3.获得前端提交数据
4.中文乱码的解决方案
5.重定向和转发
5.1 重定向
5.2 转发
6. Request对象
7. Response对象
8.Cookie和Session
8.1 Cookie
10.2.session
9.过滤器和监听器
9.1 过滤器
9.2 监听器
1.Servlet 介绍
1.1 什么是Servlet
Servlet是Server Applet的简称,是用Java编写的是运行在 Web 服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Servlet是Java编程语言编写的服务器端程序,运行在支持Java Servlet规范的Web服务器上。Servlet主要用于处理客户端请求和生成动态Web页面。Servlet通常用于开发基于Web的应用程序,如电子商务网站、社交网络和在线游戏等。
Servlet是一个独立的Java类,它可以接收来自客户端的HTTP请求,并生成HTML、XML或其他格式的响应。Servlet通常通过HTTP协议与客户端进行通信,但也可以处理其他协议,如HTTPS、FTP等。
Servlet通常通过Java Servlet容器来运行,最常用的容器是Apache Tomcat。Servlet容器负责加载、初始化和管理Servlet,以及处理与Servlet的通信。Servlet容器还提供了一些额外的功能,如会话管理、安全性和性能优化。
总的来说,Servlet是一种强大的服务器端编程技术,可以帮助开发人员构建高性能、可扩展和可靠的Web应用程序。通过使用Servlet,开发人员可以轻松地处理各种Web请求,并生成动态内容,从而为用户提供更好的用户体验。
1.2 Servlet的使用方法
Servlet技术的核心是Servlet接口,定义了Servlet与Servlet容器之间的契约,Servlet容器将Servlet类载入内存,生成Servlet实例并调用它具体的方法,所以它是所有Servlet类必须直接或者间接实现的一个接口。
1.3 Servlet接口的继承结构
Servlet接口:只负责定义Servlet程序的访问规范;
GenericServlet抽象类:实现了Servlet接口,做了很多空实现,并持有一个ServletConfig类的引用,并提供了一些ServletConfig的使用方法;
HttpServlet抽象类:实现了service方法,并实现了请求分发处理;
2.Servlet的生命周期
简单来说,Servlet的生命周期就是servlet类对象什么时候创建?什么时候调用对应的方法,什么时候销毁。
2.1 servlet生命周期中重要的方法
构造方法:创建servlet的时候调用。默认情况下,第一次访问servlet的时候,会创建servlet对象。此时会有且只会调用1次构造函数,证明了servlet对象是单实例的。
init方法:创建完servlet对象之后调用,也只是会调用1次。
service方法:提供服务的方法,接收用户的请求,并处理用户的请求,然后响应用户的请求。每次发送请求,都会调用service方法。调用几次,service方法会执行几次。
destroy方法:销毁的方法。销毁servlet对象的时候调用。比如我们停止服务器或者重新部署服务器,都会销毁servlet对象,只会调用1次。
3.获得前端提交数据
学好Servlet必须紧紧围绕着请求和响应这两个概念 以上写的代码只是进行请求,然后再响应到客户端。请求的时候没有带数据给Servlet 下面开始写在请求的时候前端带数据到servlet里面,我们servlet要接收前端给我们的这个数据
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="login" method="post">
<input type="text" name="username"/><br>
<input type="text" name="password"/><br>
<input type="submit" value="提交">
</form>
</body>
</html>
servlet实例
public class LoginServlet 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 {
request.setCharacterEncoding("utf-8");
//html页面中 input标签发送的数据,都会存到HttpServlet这个对象里面
//通过前端input标签name的属性值获取前端发送的数据
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username: " + username+"===password"+password);
//Servlet响应数据到客户端的时候,如果是中文的话,会乱码
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("username: " + username+"===password"+password);
}
}
4.中文乱码的解决方案
请求时候的乱码问题:
//前端发送数据到Servlet,如果是post请求的话,input输入中文数据的时候,Servlet接到的数据是乱码的。 request.setCharacterEncoding("utf-8");
响应时候中文乱码的问题:
//Servlet响应数据到客户端的时候,如果是中文的话,会乱码
response.setContentType("text/html;charset=utf-8");
5.重定向和转发
5.1 重定向
是什么
用户通过浏览器发送一个请求,Tomcat服务器接收这个请求,会给浏览器发送一个状态码302,并设置一个重定向的路径,浏览器如果接收到了这个302的状态码以后,就会去自动加载服务器设置的路径
一个页面跳转到另外一个页面(应用场景)、登录页面跳转到主页面: login.jsp====>LoginServlet====>main.jsp
特征:
①重定向的过程是浏览器(客户端)的行为 ②实际上浏览器做了2次请求(当点击登录按钮的时候做了两次请求)(分别是请求login和main.jsp) ③注意上一次请求的request对象会丢失 ④重定向有一个非常明显的特征,即浏览器的url变化了
response.sendRedirect("main.jsp"); //就这一行代码,但是这一行代码必须写在doGet或者doPost方法中
5.2 转发
是什么
用户发送数据请求到服务器,服务器接收当前请求,会调用内部方式(转发)处理该请求,最终把响应给客户端
特征:
①转发是服务器的行为 ②浏览器在这个过程中只有一次行为 ③转发可以带有数据 request对象中 ④url不会发生任何的变化
request.getRequestDispatcher(“main.jsp”).forward(request,response);
//这一行代码就表示进行了转发,url没有变,但是响应的结果却是一次请求干了两个活
6. Request对象
-
是什么
ServletRequest是一个接口,用户访问服务器,服务器会生成一个对象包含了http所有请求头,由于使用的是http协议,所以该对象的名字叫HttpServletRequest
-
常用的方法
getRequestURL() //获取的完整的URL,即统一资源定位符
getRequestURI() //获取资源的名字,即统一资源标识符
getQueryString() //获取一个url参数部分
getRemoteAddr() //返回的是客户端的ip地址
getRemoteUser() //返回的是客户端的用户
getRemotePort() //返回的是客户端的主机的端口号
getRemoteHost() //返回的是客户端的主机地址
getCookie() //获取Cookie对象
getSession() //获取Session对象
getLocalName() //获取Web服务器主机的名字
getServletContext() //获取上下文对象的
setCharacterEncoding() //设置编码集的
getParameter() //获取前端传过来的数据
setAttribute() //将数据设置给request对象
geAttribute() //获取request对象中的数据
7. Response对象
-
是什么
响应对象,把数据返回给客户端。 我们的Servlet紧紧围绕着两个点(Request,Response)请求和响应
-
常用方法
setHeader() //设置响应头的参数 setContentType() //设置字符编码集 getWriter() //获取字符输出流对象 addCookie() //对浏览器新增一个Cookie sendRedirect() //重定向
8.Cookie和Session
8.1 Cookie
是什么
cookie是在浏览器中保存的
如果想要使用cookie要保证我们的浏览器是开启cookie,所以说有一定的弊端,如果浏览器没有开启cookie,就不能再使用cookie了
cookie的大小是有限制的,通常是4096byte
cookie的保存是以键值对的形式存在的
常用方法
//1.cookie的构造方法,目的是实例化出来cookie对象
Cookie(String name,String value)
//2.设置cookie的方法
setValue(String value) //修改cookie的值
getValue(String value) //获得cookie的值
getName(String value) //获得cookie的键
setMaxAge(int time) //设置cookie的有效时间
//3.要将cookie发送到浏览器
response.addCookie(Cookie cookie);
//4.获得所有cookie
request.getCookies();
10.2.session
为什么使用session?
cookie保存数据类型是单一的,只能保存字符串类型的数据
cookie的大小有限制
是什么?
保存服务器中
当用户发送一个HTTP请求到服务器时,服务器会检查该请求是否包含session标识符(通常是存cookie),如果没有,则会创建一个新的session(存储区域),并将session标识符发送给客户端。浏览器再发送请求时会携带session标识符,此时服务器根据session标识符就可以找到对应的session(存储区域)
使用session的时候一般要开启cookie如果浏览器没有开启cookie功能,我们可以通过html的url传参完后session的使用
没有大小的限制
信息的保存也是以键值对的形式存在的
常用方法
request.getSession(); //返回HttpSession
setAttribute(key,value); //设置属性 key ,value
getAttribute(key); //获取key的值
removeAttribute(String key) //通过key值删除数据
invalidate(); //将session中的变量全部清空
setMaxInactiveInterval(int interval); //设置session失效时间,单位为秒
getMaxInactiveInterval();//获取session失效时间
getId(); //获取sessionID
9.过滤器和监听器
9.1 过滤器
-
什么是过滤器
当浏览器向服务器发送请求的时候,过滤器可以将请求拦截下来,完成一些特殊的功能,比如:编码设置、权限校验、日志记录等。
-
过滤器执行流程
9.2 监听器
-
是什么?
监听器可以监听ServletContext,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
-
Listener分类:Javaweb提供了8个监听器(接口)