01.hello servlet

初识servlet

继承Servlet并且实现所有方法

  • init(ServletConfig servletConfig)
    初始化 servlet 并且只在初始化的时候执行一次
  • service(ServletRequest servletRequest, ServletResponse servletResponse)
    当应用程序运行时,每次刷新,都会执行
  • destroy()
    服务器关闭时执行
  • web.xml的配置:
<servlet>
    <servlet-name>demo1</servlet-name>
    <servlet-class>plus.mahua.servlet.ServletDemo01</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>demo1</servlet-name>
    <url-pattern>demo1</url-pattern>
</servlet-mapping>

servlet 方法

-1. 两种参数设置
  • 使用init里面的cogfig配置参数(这是servlet参数,局部参数):

    • xml中设置参数:
name zhangsan ``` - init中获取:
String name = servletConfig.getInitParameter("name");
System.out.println("name:" + name);
Enumeration<String> enumeration = servletConfig.getInitParameterNames();
while (enumeration.hasMoreElements()){
  String key = enumeration.nextElement();
  String value = servletConfig.getInitParameter("key");
  System.out.println(key+" = "+value);
}
  • 配置 ServletContext参数(全局参数)
<context-param>
    <param-name>username</param-name>
    <param-value>123456</param-value>
</context-param>
<context-param>
    <param-name>password</param-name>
    <param-value>123456</param-value>
</context-param>
  • 在 init 中获取
ServletContext servletContext = servletConfig.getServletContext();
String username = servletContext.getInitParameter("username");
Enumeration<String> enumeration = servletContext.getInitParameterNames();

####-2. 获取文件在web服务器的绝对路径

  1. 在web目录下创建一个文件 a.txt
  2. servletContext.getRealPath(“a.txt”) 获取
  3. 注意:这是服务器的绝对路径,不是自己创建的路径

####-3. 获取web服务器的容器名

String servletName = servletConfig.getServletName();

Servlet 与 http

-1.获取页面数据

  • POST 与 GET 就不赘述
  • 1.jsp 代码
  <form method="post" action="/JavaWeb_war_exploded/servletDemo2">
    账号:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    爱好:<input type="checkbox" name="hobby" value="篮球">篮球
          <input type="checkbox" name="hobby" value="足球">足球
          <input type="checkbox" name="hobby" value="乒乓球">乒乓球
          <input type="checkbox" name="hobby" value="羽毛球">羽毛球
      <br>
    <input type="submit" value="submit">
  </form>
  • 2.servlet代码
//获取指定属性值
String password = servletRequest.getParameter("password");
System.out.println("password = "+password);
//获取所以属性名
Enumeration<String> hobby = servletRequest.getParameterNames();
//获取 map 键值对
Map<String, String[]> parameterMap = servletRequest.getParameterMap();
for (Map.Entry entry: parameterMap.entrySet()){
    System.out.println(entry.getKey()+" = "+entry.getValue());
}
servletResponse.getWriter().println("success");

综合小案例:使用ServletContext的参数进行登录校验,成功返回 你好+username,失败返回 账号或密码错误

  • ServletContext 中的属性
<context-param>
    <param-name>username</param-name>
    <param-value>mahua</param-value>
</context-param>
<context-param>
    <param-name>password</param-name>
    <param-value>123456</param-value>
</context-param>
  • servlet 代码
ServletContext servletContext = servletRequest.getServletContext();
String myusername = servletContext.getInitParameter("username");
String mypassword = servletContext.getInitParameter("password");
String username = servletRequest.getParameter("username");
String password = servletRequest.getParameter("password");
if (password.equals(mypassword) && username.equals(myusername)){
    servletResponse.getWriter().println("欢迎:"+username);
}else {
    servletResponse.getWriter().println("账号或者密码错误");
}

HttpServlet:

  • HttpServlet 继承 GenericServlet

GenericServlet :

  • GenericServlet 实现了Servlet 的接口
  • 简化 Servlet 的操作,将不用的方法去除(destroy)

HttpServlet :

  • 主要将service方法重写并且强转为 HttpServlet
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    HttpServletRequest request;
    HttpServletResponse response;
    try {
        request = (HttpServletRequest)req;
        response = (HttpServletResponse)res;
    } catch (ClassCastException var6) {
        throw new ServletException("non-HTTP request or response");
    }

    this.service(request, response);
}

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String method = req.getMethod();
    long lastModified;
    if (method.equals("GET")) {
        lastModified = this.getLastModified(req);
        if (lastModified == -1L) {
            this.doGet(req, resp);
        } else {
            long ifModifiedSince = req.getDateHeader("If-Modified-Since");
            if (ifModifiedSince < lastModified) {
                this.maybeSetLastModified(resp, lastModified);
                this.doGet(req, resp);
            } else {
                resp.setStatus(304);
            }
        }
    } else if (method.equals("HEAD")) {
        lastModified = this.getLastModified(req);
        this.maybeSetLastModified(resp, lastModified);
        this.doHead(req, resp);
    } else if (method.equals("POST")) {
        this.doPost(req, resp);
    } else if (method.equals("PUT")) {
        this.doPut(req, resp);
    } else if (method.equals("DELETE")) {
        this.doDelete(req, resp);
    } else if (method.equals("OPTIONS")) {
        this.doOptions(req, resp);
    } else if (method.equals("TRACE")) {
        this.doTrace(req, resp);
    } else {
        String errMsg = lStrings.getString("http.method_not_implemented");
        Object[] errArgs = new Object[]{method};
        errMsg = MessageFormat.format(errMsg, errArgs);
        resp.sendError(501, errMsg);
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值