servlet是java web开发的基石,是与平台无关的服务器组件,他是运行在servlet容器(tomcat),负责与客户端通信的组件。
如同简介所说,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
在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所实现的效果一致
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 的基本信息的。
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");
}
}
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
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) 指定每个请求的编码。
200:正常
404:资源找不到
400:请求类型不匹配
500:Java 程序抛出异常
sendRedirect(String path) 重定向,⻚⾯之间的跳转。
转发是将同⼀个请求传给下⼀个⻚⾯,重定向是创建⼀个新的请求传给下⼀个⻚⾯,之前的请求结束⽣ 命周期。 转发:同⼀个请求在服务器之间传递,地址栏不变,也叫服务器跳转。 重定向:由客户端发送⼀次新的请求来访问跳转后的⽬标资源,地址栏改变,也叫客户端跳转。 如果两个⻚⾯之间需要通过 request 来传值,则必须使⽤转发,不能使⽤重定向。
4个
page、request、session、application
通过进行设置和取出共享变量:
setAttribute、getAttribute
作⽤域:
page 作用域:对应的内置对象是 pageContext。
request 作⽤域:对应的内置对象是 request。
session 作⽤域:对应的内置对象是 session。
application 作⽤域:对应的内置对象是 application。
作用域的共享范围:
page < request < session < application
page 只在当前⻚⾯有效。
request 在⼀次请求内有效。
session 在⼀次会话内有效。
application 对应整个 WEB 应⽤的。
网站访问量统计
<%
Integer count = (Integer) application.getAttribute("count");
if(count == null){
count = 1;
application.setAttribute("count",count);
}else{
count++;
application.setAttribute("count",count);
}
%>
您是当前的第<%=count%>位访客