Servlet了解

Servlet了解

1 Servlet介绍

Servlet用于接收及响应前端发送的请求,可以在同一个Servlet中处理多个请求,也可以定义返回的数据类型。

Servlet和JSP之间的关系

先有的Servlet再有JSP,JSP文件执行需要先翻译成java文件(servlet),然后再进行编译成class文件,最后执行

查找路径:eclipse中配置本地的Tomcat,项目启动运行后,在Tomcat的work中查找

2 Servlet入门案例

需求:定义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>
3 Servlet生命周期

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的时候,才会被初始化(不用就不初始化)

4 Servlet配置
4.1 加载顺序

配置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文件中的配置顺序,靠后的先加载,如果不写该标签,只有在第一次请求的时候才会初始化

4.2 全局参数与局部参数

局部参数只在对应的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);

你可能感兴趣的:(Javaweb,servlet)