Servlet
简介
servlet是java web开发的基石,是与平台无关的服务器组件,他是运行在servlet容器(tomcat),负责与客户端通信的组件。
Servlet功能:
如何使用:
如同简介所说,servlet是一组接口,因此我们想要使用servlet的功能,只需要自定义一个类去继承或者实现改接口即可。那么这个自定义的类就具备了接受客户端请求并作出响应的功能。
public class MyServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { String id = servletRequest.getParameter("id"); System.out.println("我是Servlet,我已经接收到了客户端发来的请求,参数是"+id); servletResponse.setContentType("text/html;charset=UTF-8"); servletResponse.getWriter().write("客户端你好,我已接收到你的请求"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
浏览器不能直接访问Servlet文件,只能通过映射的方式来间接访问Servlet
配置映射
- 基于xml文件的配置方式
在web.xml文件为每个Servlet文件进行配置
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>com.henu.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
此时启动项目,在地址栏访问/test就可以访问到MyServlet。
- 注解方式配置
只需要在实现了Servlet或继承了其子实现类的自定义类上面添加 WebServlet
注释即可
@WebServlet("/test") public class MyServlet implements Servlet { }
注解的方式与配置想,xml所实现的效果一致
Servlet生命周期
1、当浏览器访问 Servlet 的时候,Tomcat 会查询当前 Servlet 的实例化对象是否存在,如果不存在, 则通过反射机制动态创建对象,如果存在,直接执⾏第 3 步。
2、调⽤ init ⽅法完成初始化操作。
3、调⽤ service ⽅法完成业务逻辑操作。
4、关闭 Tomcat 时,会调⽤ destory ⽅法,释放当前对象所占⽤的资源。
Servlet 的⽣命周期⽅法:⽆参构造函数、init、service、destory
1、⽆参构造函数只调⽤⼀次,创建对象。
2、init 只调⽤⼀次,初始化对象。
3、service 调⽤ N 次,执⾏业务⽅法。
4、destory 只调⽤⼀次,卸载对象。
####ServletConfig
该接⼝是⽤来描述 Servlet 的基本信息的。
- getServletName() 返回 Servlet 的名称,全类名(带着包名的类名)
- getInitParameter(String key) 获取 init 参数的值(web.xml)
- getInitParameterNames() 返回所有的 initParamter 的 name 值,⼀般⽤作遍历初始化参数
- getServletContext() 返回 ServletContext 对象,它是 Servlet 的上下⽂,整个 Servlet 的管理者。
-
ServletConfig 和 ServletContext 的区别:
- ServletConfig 作⽤于某个 Servlet 实例,每个 Servlet 都有对应的 ServletConfig
- ServletContext 作⽤ 于整个 Web 应⽤
- ⼀个 Web 应⽤对应⼀个 ServletContext,多个 Servlet 实例对应⼀个 ServletContext。
- ⼀个是局部对象,⼀个是全局对象。
Servlet层次结构

GenericServlet 实现 Servlet 接⼝,同时为它的⼦类屏蔽了不常⽤的⽅法,⼦类只需要重写 service ⽅ 法即可。 HttpServlet 继承 GenericServlet,根据请求类型进⾏分发处理,GET 进⼊ doGET ⽅法,POST 进⼊ doPOST ⽅法。
我们只需要⾃定义的 Servlet 类只需要继承 HttpServlet 即可,重新实现 doGET 和 doPOST。
package com.henu.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/test")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().write("GET");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().write("POST");
}
}
JSP
内置对象
1、request:表示⼀次请求,HttpServletRequest。
2、response:表示⼀次响应,HttpServletResponse。
3、pageContext:⻚⾯上下⽂,获取⻚⾯信息,PageContext。
4、session:表示⼀次会话,保存⽤户信息,HttpSession。
5、application:表示当前 Web 应⽤,全局对象,保存所有⽤户共享信息,ServletContext。
6、config:当前 JSP 对应的 Servlet 的 ServletConfig 对象,获取当前 Servlet 的信息。
7、out:向浏览器输出数据,JspWriter。
8、page:当前 JSP 对应的 Servlet 对象,Servlet。
9、exception:表示 JSP ⻚⾯发⽣的异常,Exception。
常⽤的是 request、response、session、application、pageContext
request 常⽤⽅法
1、String getParameter(String key) 获取客户端传来的参数。
2、void setAttribute(String key,Object value) 通过键值对的形式保存数据。
3、Object getAttribute(String key) 通过 key 取出 value。
4、RequestDispatcher getRequestDispatcher(String path) 返回⼀个 RequestDispatcher 对象,该对 象的 forward ⽅法⽤于请求转发。
5、String[] getParameterValues() 获取客户端传来的多个同名参数。
6、void setCharacterEncoding(String charset) 指定每个请求的编码。
HTTP 请求状态码
200:正常
404:资源找不到
400:请求类型不匹配
500:Java 程序抛出异常
response 常⽤⽅法:
sendRedirect(String path) 重定向,⻚⾯之间的跳转。
转发 getRequestDispatcher 和重定向 sendRedirect 的区别:
转发是将同⼀个请求传给下⼀个⻚⾯,重定向是创建⼀个新的请求传给下⼀个⻚⾯,之前的请求结束⽣ 命周期。 转发:同⼀个请求在服务器之间传递,地址栏不变,也叫服务器跳转。 重定向:由客户端发送⼀次新的请求来访问跳转后的⽬标资源,地址栏改变,也叫客户端跳转。 如果两个⻚⾯之间需要通过 request 来传值,则必须使⽤转发,不能使⽤重定向。
JSP 内置对象作⽤域
4个
page、request、session、application
通过进行设置和取出共享变量:
setAttribute、getAttribute
作⽤域:
page 作用域:对应的内置对象是 pageContext。
request 作⽤域:对应的内置对象是 request。
session 作⽤域:对应的内置对象是 session。
application 作⽤域:对应的内置对象是 application。
作用域的共享范围:
page < request < session < application
page 只在当前⻚⾯有效。
request 在⼀次请求内有效。
session 在⼀次会话内有效。
application 对应整个 WEB 应⽤的。
原文
https://seulg.github.io/post/hou-duan-kai-fa-ji-chu-zhi-servlet/
本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 后端开发基础之Servlet&JSP