目录
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个监听器(接口)