Servlet用于接收及响应前端发送的请求,可以在同一个Servlet中处理多个请求,也可以定义返回的数据类型。
Servlet和JSP之间的关系
先有的Servlet再有JSP,JSP文件执行需要先翻译成java文件(servlet),然后再进行编译成class文件,最后执行
查找路径:eclipse中配置本地的Tomcat,项目启动运行后,在Tomcat的work中查找
需求:定义Servlet接收前端发送的登录请求,对请求进行处理
<form action="loginServlet" method="post">
<input type="text" name="uname">
<input type="submit" value="提交">
form>
//自定义的Servlet要继承HttpServlet
public class LoginServlet extends HttpServlet {
/**
* Servlet中提供了service方法用于接收及响应web客户端的请求
* service可以执行多次(每次请求都会执行该方法)
* super.service(req, resp);用于请求分发
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("------service------");
//设置编码
request.setCharacterEncoding("utf-8");
//获取请求中的参数
String uname = request.getParameter("uname");
if(uname.equals("admin")){
//重定向
response.sendRedirect("success.jsp");
} else{
response.sendRedirect("fail.jsp");
}
}
}
servlet配置
<servlet>
<servlet-name>LoginServletservlet-name>
<servlet-class>cn.yunhe.servlet.LoginServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>LoginServletservlet-name>
<url-pattern>/loginServleturl-pattern>
servlet-mapping>
Servlet的生命周期依赖于web容器的生命周期,生命周期划分为:初始化(一次)、执行(多次)、销毁(一次)。
public LifeCycleServlet(){
System.out.println("-----LifeCycleServlet构造器执行-------");
}
@Override
public void init() throws ServletException {
System.out.println("------LifeCycleServlet 初始化执行--------");
super.init();
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("------LifeCycleServlet service执行--------");
}
@Override
public void destroy() {
System.out.println("------LifeCycleServlet destroy执行--------");
super.destroy();
}
默认Servlet的初始化是在web客户端发送对应的请求到Servlet的时候,才会被初始化(不用就不初始化)
配置Servlet加载顺序(默认是使用的时候才初始化),需要在配置Servlet的时候去指定load-on-startup标签
<servlet>
<servlet-name>LifeCycleServletservlet-name>
<servlet-class>cn.yunhe.servlet.LifeCycleServletservlet-class>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>LifeCycleServletservlet-name>
<url-pattern>/lifeCycleServleturl-pattern>
servlet-mapping>
初始化顺序:值越大越靠后加载,值一样按照在xml文件中的配置顺序,靠后的先加载,如果不写该标签,只有在第一次请求的时候才会初始化
局部参数只在对应的Servlet中使用,全局参数是在所有的Servlet中都可以使用
<servlet>
<servlet-name>paramServletservlet-name>
<servlet-class>cn.yunhe.servlet.ParamServletservlet-class>
<init-param>
<param-name>countparam-name>
<param-value>1param-value>
init-param>
servlet>
获取结果
//获取局部变量参数
String count = getInitParameter("count");
System.out.println("ParamServlet count="+count);
全局变量配置
<context-param>
<param-name>nameparam-name>
<param-value>applicationparam-value>
context-param>
//获取全局变量(需要获取到上下文对象)
ServletContext servletContext = getServletContext();
String value = servletContext.getInitParameter("name");
System.out.println("ApplicationParamServlet name="+value);