a)什么是 Servlet
1、Servlet 是 JavaEE 规范之一。规范就是接口
2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
b)手动实现 Servlet 程序
1、编写一个类去实现 Servlet 接口
2、实现 service 方法,处理请求,并响应数据
3、通过注解方式 中去配置 servlet 程序的访问地址
@WebServlet("/HelloServlet")
public class HelloServlet implements Servlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("HelloServlet被调用了");
}
}
c)Servlet的分发处理
如何得知是get请求还是post请求
使用ServletRequest的getmethod方法
//类型转换(要使用getmethod方法)
HttpServletRequest httpServletRequest=(HttpServletRequest)ServletRequest;
String method=httpServletRequest.getMethod();
这个method存的便是get或者post
d) 通过继承 HttpServlet 实现 Servlet 程序
一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。
1、编写一个类去继承 HttpServlet 类
2、根据业务需要重写 doGet 或 doPost 方法
3、通过注解方式配置 Servlet 程序的访问地址
public class ContextServlet extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
e)Servlet 类的继承体系
2.ServletConfig 类
ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类。
Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。
Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象。
a)ServletConfig 类的三大作用
1、可以获取 Servlet 程序的别名 servlet-name 的值 getServletName()方法
2、获取初始化参数 init-param getInitParameter()方法
3、获取 ServletContext 对象 getServletContext()方法
ServletConfig config=getServletConfig();
System.out.println("别名是"+config.getServletName());
System.out.println("初始化参数username的值是"+config.getInitParameter("username"));
System.out.println("初始化参数url的值是"+config.getInitParameter("url"));
System.out.println(config.getServletContext());
3.ServletContext 类
a)什么是 ServletContext?
1、ServletContext 是一个接口,它表示 Servlet 上下文对象
2、一个 web 工程,只有一个 ServletContext 对象实例。
3、ServletContext 对象是一个域对象。
4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。
域对象是什么?
域对象,是可以像 Map 一样存取数据的对象,叫域对象。
这里的域指的是存取数据的操作范围,整个 web 工程。
b)ServletContext 类的四个作用
1、获取 web.xml 中配置的上下文参数 context-param 也是getInitParameter()方法
2、获取当前的工程路径,格式: /工程路径
3、获取工程部署后在服务器硬盘上的绝对路径
4、像 Map 一样存取数据
//像map一样存取数据
ServletContext context=getServletContext();
context.setAttribute("key1","value1");
System.out.println("context1 中获取域数据key1值为"+context.getAttribute("key1"));
4.HttpServletRequest 类
a)HttpServletRequest 类有什么作用。
每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。
然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的信息
b)HttpServletRequest 类的常用方法
i. getRequestURI() 获取请求的资源路径
System.out.println("URL =>"+req.getRequestURI());
ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
System.out.println("请求头 User-Agent ==>> " + req.getHeader("User-Agent"));
iii. getRemoteHost() 获取客户端的 ip 地址
System.out.println("客户端 ip地址 =>"+req.getRemoteHost());
/*
idea中使用localhost访问时,得到的客户端ip地址是---》》》127.0.0.1
idea中使用127.0.0.1访问时,得到的客户端ip地址是---》》》127.0.0.1
idea中使用真实ip访问时,得到的客户端ip地址是---》》》真实客户端ip地址
*/
iv. getHeader() 获取请求头
System.out.println("请求头 User-Agent ==>> " + req.getHeader("User-Agent"));
v. getParameter() 获取请求的参数
vi. getParameterValues() 获取请求的参数(多个值的时候使用)
vii. getMethod() 获取请求的方式 GET 或 POST
viii. setAttribute(key, value); 设置域数据
ix. getAttribute(key); 获取域数据
x. getRequestDispatcher() 获取请求转发对象
c)如何获取请求参数
首先编写html页面
<body>
<form action="http://localhost:8080/07_servlet/parameterServlet" method="get">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
兴趣爱好:<input type="checkbox" name="hobby" value="cpp">C++
<input type="checkbox" name="hobby" value="java">Java
<input type="checkbox" name="hobby" value="js">JavaScript<br/>
<input type="submit">
</form>
</body>
java代码
// 获取请求参数
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobby = req.getParameterValues("hobby");
System.out.println("用户名:" + username);
System.out.println("密码:" + password);
System.out.println("兴趣爱好:" + Arrays.asList(hobby));