专栏首页用户2442861的专栏【java项目实战】Servlet详解以及Servlet编写登陆页面(二)

【java项目实战】Servlet详解以及Servlet编写登陆页面(二)

http://blog.csdn.net/jiuqiyuliang/article/details/36424981

    Servlet是Sun公司提供的一门用于开发动态web网页的技术。Sun公司在API中提供了一个servlet接口,我们如果想使用java程序开发一个动态的web网页,只需要实现servelet接口,并把类部署到web服务器上就可以运行了。

到底什么是Servlet呢?

       通俗一点,只要是实现了servlet接口的java程序,均称Servlet。Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在服务器端运行的小程序。

编写一个现实登陆的Servlet,并部署访问

1、我们先写一个简单的HTML,可以在WebRoot新建,也可以复制一个写好的HTML,我们用post提交方式,当然也可以用get提交,大家可以自己尝试一下。

[html] view plain copy

print?

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  5. <title>登录</title>
  6. </head>
  7. <body>
  8. <form action="http://localhost:8080/loginServlet/LoginServlet" method="post">
  9.             用户:<input type="text" name="username" /><br/>
  10.             密码:<input type="password" name="password" /><br/>
  11. <input type="submit" value="登录" />
  12. </form>
  13. </body>
  14. </html>

2、完成Servlet,在Web项目的src中右键新建一个类LoginServlet,输入下面代码即可。

[java] view plain copy

print?

  1. //引入所需要的包
  2. import java.io.*;  
  3. import javax.servlet.*;  
  4. import javax.servlet.http.*;  
  5. public class LoginServlet extends HttpServlet {  
  6. //重写doGet方法
  7. public void doGet(HttpServletRequest request,  
  8.             HttpServletResponse response)  
  9. throws ServletException,  
  10.             IOException {  
  11.         String username = request.getParameter("username");     
  12.         String password = request.getParameter("password");        
  13. //服务器端打印信息
  14. //System.out.println("username=" + username);
  15. //System.out.println("password=" + password);
  16. //设置编码格式
  17.         response.setContentType("text/html;charset=GB18030");  
  18. //返回html页面
  19.         response.getWriter().println("<html>");  
  20.         response.getWriter().println("<head>");     
  21.         response.getWriter().println("<title>登录信息</title>");      
  22.         response.getWriter().println("</head>");    
  23.         response.getWriter().println("<body>");     
  24.         response.getWriter().println("欢迎【" + username + "】用户登录成功!!!");    
  25.         response.getWriter().println("</body>");    
  26.         response.getWriter().println("</html>");  
  27.         }                     
  28. //重写doPost方法
  29. public void doPost(HttpServletRequest request,  
  30.             HttpServletResponse response)  
  31. throws ServletException,  
  32.             IOException {  
  33.         doGet(request, response);                     
  34.     }       
  35. }  

3、在WebRoot下的WEB-INF的web.xml,部署我们的Servlet,启动服务器。

[html] view plain copy

print?

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4"
  3. xmlns="http://java.sun.com/xml/ns/j2ee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7. <servlet>
  8. <servlet-name>MyServlet</servlet-name>
  9. <servlet-class>LoginServlet</servlet-class>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>MyServlet</servlet-name>
  13. <url-pattern>/LoginServlet</url-pattern>
  14. </servlet-mapping>
  15. </web-app>

4、一定要启动服务器,之后在浏览器中输入你的URL,此时我们就可以调用Servlet了,我们看一下运行结果。

       实例的demo:http://download.csdn.net/detail/jiuqiyuliang/7593641

==============================================================================================================================

 如果不知道怎么配置java Web项目,可以移驾到我的上篇博客(一步步教你使用MyEclipse搭建java Web项目开发环境(一)),下面我们详细介绍Servlet的基础知识。

==============================================================================================================================

Servlet基础

1、解读API文档,纯手工编写一个Servlet程序,并部署访问(如上所示)。

      解读API对于拒绝学习API的程序员们是一种煎熬,但它却是我们学习和进步的最好工具,且学且珍惜。

       大家可以在点进去看一看,从上图,可以看出Servlet接口定义三个实现类,分别是FacesServlet, GenericServlet, HttpServlet。下面我们简单的介绍一下。

2、Servlet接口实现类

     (1)FacesServlet是一个用于管理利用JSF(JavaServer Faces)构建用户界面的web应用程序请求处理生命周期的Servlet。(FacesServletis a servlet that manages the request processing lifecycle for web applications that are utilizing JavaServer Faces to construct the user interface.),大家如果想深入的学习,可以点这里

     (2)GenericServlet是HttpServlet的父类,包含了servlet的常用方法。GenericServlet使得程序员写servlets更加简单,它提供了初始化和销毁生命周期的方法,以及实现了写日志文件的方法。

     (3)HttpServlet指能够处理HTTP请求的servlet。这是开发人员在编写Servlet时,通常应继承这个类即可。

        对于这三个实现类,只为大家做一个简单的介绍,如果想深入的研究,直接看API就好。

3、Servlet部署

       客户端通过URL地址访问web服务器中的资源,所以若想访问Servlet必须要把servlet程序映射到一个URL地址上,在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成,如上面的实例。

        *<servlet>用于注册Servlet,包含了<servlet-name>和<servlet-class>两个子元素,分别用于设置servlet的名称以及servlet的类名。

        *<servlet-mapping>用于映射上面<servlet>中的对外访问路径,同样包含<servlet-name>和<url-pattern>两个元素,分别用于设置servlet的名称以及servlet的对外访问路径。

        在servlet映射到URL有两种格式:

        1.“*.扩展名”

        2.以正斜杠(/)开头并以“/*”结尾。

        servlet对url的匹配规则以及路径问题,大家可以上网查,有很多相关的资料,例如:http://blog.csdn.net/xh16319/article/details/8014107

4、Web服务器调用Servlet过程(Servlet生命周期)

      servlet程序是由web服务器调用,web服务器实现了对servlet生命周期的管理。servlet的生命周期分为四步:

          1)实例化以及加载servlet,new的过程。

          2)初始化init(ServletConfig)。

          3)处理请求,调用servlet的service,doget,dopost方法将Request和Response,作为参数传递。

          4)退出服务,调用destory方法释放资源。

 注意:

         1、servlet只实例化一次。感觉有点单例模式的意思,大家可以研究一下Tomcat的实现原理。

         2、init方法也只执行一次。servlet实例只创建一次,所以init初始化只调用一次。

5、Servlet线程安全问题

       当多个客户端并发访问同一个Servlet时,web服务器会为每一个客户端的访问请求创建一个线程,并在这个线程上调用service方法,因此,service方法内如果访问了同一个资源的话,就有可能引发线程安全问题。大家重点理解下面两句即可: (1) Servlet是单实例多线程的,如果存在可以修改的成员变量将会出现线程安全问题。 (2) 使用Servlet最好保证Servlet是无状态的,也就是没有可以修改的成员变量。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python单元测试unittest

    http://blog.csdn.net/five3/article/details/7104466

    bear_fish
  • 神经网络python实现

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

    bear_fish
  • web.xml文件的作用及基本配置

    Java的web工程中的web.xml文件有什么作用呢?它是每个web工程都必须的吗?

    bear_fish
  • JavaWeb概念解读

    Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,最新的Servlet 和J...

    乐心湖
  • 走进JavaWeb技术世界1:JavaWeb的由来和基础知识

    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

    Java技术江湖
  • loadrunner 脚本录制-录制选项设置HTML-based URL-based Script

    脚本录制-录制选项设置, HTML-based Script与URL-based Script

    授客
  • python web开发入门

    Ps:2019-1-18修改 我其实对这篇文章能有两万+的阅读量感觉很惊讶,占了我博客访问人数的很大一部分,我猜测可能确实是传统的Python web开发的学...

    py3study
  • 学习web前端开发时需要注意什么

    web前端是当下互联网时代下最流行的技术之一,在大部分的软件产品的研发中,Web前端扮演着非常重要的角色。学习web前端开发时需要注意什么呢

    千锋哈尔滨IT培训
  • Servlet3.0新特性(从注解配置到websocket编程)

         Servlet3.0的出现是servlet史上最大的变革,其中的许多新特性大大的简化了web应用的开发,为广大劳苦的程序员减轻了压力,提高了web开发...

    Single
  • web前端知识体系大全,教你如何学习前端!

    大约在几个月之前,让我看完了《webkit技术内幕》这本书的时候,突然有了一个想法。想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前...

    一墨编程学习

扫码关注云+社区

领取腾讯云代金券