Servlet初识(JavaWeb学习笔记四)

来源:互联网 发布:淘宝赚钱软件 编辑:程序博客网 时间:2024/05/17 15:18

mdzz,写了一个中午的,我还以为已经保存到草稿箱了,然后就都删了,写另外一篇博客!结果!!!!又要重新写一遍了!            - - ||

本篇博客主要内容有以下几点:

 1. 什么是Servlet?它的作用是什么? 2. 怎么创建一个Servlet? 3. 使用Servlet做一个最简单的小栗子。

1.什么是Servlet?它的作用是什么?

首先让咱们看看StackOverFlow上的回答:什么是Servlet? 从这个回答中,我们不难分析出Servlet的几大特点:

  • Servlet其实就是一个简单的Java类,唯一不同的是它可以运行在服务器端,用于处理network上的请求。

  • Servlet可以说是Web的地基,尽管在它之上有许多高楼大厦,如Struts,Spring等。

  • Servlet可以运行在服务器(如Tomcat)中。

2.怎么创建一个Servlet?

一般而言,创建Servlet分为以下几步:

 - 创建一个类继承自HttpServlet - 重写父类的doGet()以及doPost()方法 - 在web.xml部署描述符中配置这个Servlet - 测试运行

重点介绍一下第三点,如何web.xml部署描述符中配置这个Servlet,如下图所示:

这里写图片描述

首先,根据用户输入的URL,找到对应url-pattern(1),然后根据servlet-name(2)匹配到servlet标签中的(3),然后找到这个用于处理请求的Servlet(4)。

测试:运行Tomcat,在浏览器中输入:http://localhost:8080/servlet/first ,成功!!!

这里有个小问题:当我在浏览器中输入这个地址的时候,发现了这样一个错误:
这里写图片描述

具体的代码如下所示,想一想问题出在哪里

protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {        System.out.println("req get!!");        super.doGet(req, resp);    }

当然,创建Servlet还可以通过实现Servlet接口,并实现service()方法,或者通过继承GenericServlet类,实现service()方法等,但是一般最常用的还是继承HttpServlet

3. 使用Servlet做一个最简单的小栗子。

上面也已经简单的介绍了一下,Servlet可以用来处理HTTP请求,下面简单的完成一个用户登录的小栗子。
要求:

  • 1.创建界面:login.html

  • 2.使用LoginServlet处理登陆请求,如果name等于张玥,password等于iloveyue,就表示登录成功,否则,给它跳转到一个错误界面,然后五秒钟之后自动跳转回登录界面。

1.界面很简单,就是创建一个表单,表单将会在下一章详细的介绍一下,主要是表单中的两个属性,一个action,表示请求的虚拟目录为”/login”(可以将Servlet的URL设置为这个目录 - - ),method表示请求传递的方式,为post。之后也会详细的分析这个method属性的参数

<!-- 之前设置为/login, 结果Servlet根本就没有进行处理,此html在 WebContent下的html文件夹中,使用../login可以访问Servlet  -->    <form action="../login" method="post">        Username: <input type="text" name="username"/><br>        Password: <input type="password" name="password"/><br>        <input type="submit" value="用户注册"/>    </form>

2.创建LoginServlet

String username = req.getParameter("username");        String password = req.getParameter("password");        if("zhangyue".equals(username) && "iloveyue".equals(password)) {            //  之前的路径为(../html/success.html)            req.getRequestDispatcher("/html/success.html").forward(req, resp);        }        else{            //  之前的路径为(../html/failed.html)            req.getRequestDispatcher("/html/failed.html").forward(req, resp);        }

3.创建failed.html,其他的html,如success就不创建了:

<!DOCTYPE html><html><head><meta charset="UTF-8"><!-- 之前的url设置为login.html  结果跳转到http://localhost:8080/login/login.html  --><meta http-equiv="refresh" content="5; url='html/login.html'"><title>Insert title here</title></head><body>    登陆失败!!五秒钟后自动跳转会登陆界面!!!</body></html>

这里有几个小问题:

  1. 相对路径以及绝对路径的问题,设置了很久,打算在后面几章统一进行总结,这里将会是一个难点。我成功的避开了所有正确的路径写法!

  2. 关于页面定时跳转,可以使用meta标签,也可以使用js定时器。

  3. 关于Request的一些API,在这里就不细细分析了,在后面的博客中,有时间再总结一下,主要是真心觉得只记录API没有任何意思。

    好啦,下班啦,今天就到这里了

0 0
原创粉丝点击