• J2EE之Servlet初见


            Servlet是J2EE12种规范之中的一个。它也是用java语言编写的程序,其本身也是一种JAVA类,在须要的时候被实例化,不须要的时候自己主动销毁,Servlet的执行是在Servlet容器内执行,容器负责调度Servlet,同一时候也控制着它的生命周期。Servlet主要目的是被用来处理来自client上所发出的请求。然后将处理的结果用HTML页面的形式返回,形成动态网页展示给client。


    生命周期


                          

    载入与实例化:

           由Servlet容器负责。当容器检測到须要Servlet来响应第一个请求时,创建Servlet实例。当servlet容器启动后,要必须知道这个Servlet类在哪里,Servlet能够在本地文件系统、远程文件系统或其它网络服务中。servlet一旦被成功载入,会调用默认的Servlet构造方法。

    初始化:

            Servlet实例被创建后,会调用Servletde init()方法来初始化这个对象,其目的在于让Servlet在处理由client发过来的请求之前完毕一些初始化工作,比方说建立数据库的链接、获取配置信息等。这种方法仅仅能被调用一次,也就是仅仅会初始化一次。在这初始化期间,会从ServletConfig对象(web.xml中配置)中获取初始化信息,保存配置数据,方便以后使用。

    请求处理:

            init()方法成功运行后,会处理client的请求。在service方法中,通过ServletRequest对象得到client的相关信息和请求信息,对请求处理后。会调用ServletResponse对象的方法设置响应信息。请求到来时,service方法决定请求的类型get、post。并把这些请求发给相应的doget、dopost,为了响应特定类型的HTTP请求。我们就必须重载doget、dopost。

    服务终止:

           当容器检測到一个Servlet实例须要从服务中被移除时,容器就会调用destroy()方法,让该实例释放它所使用的资源,保存数据到持久存储。当须要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。

    释放实例,随后会被Java的垃圾收集器所回收。假设再次须要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。

     

    实例


    html例如以下:

    <html>
    	<head>
    		<title>登陆</title>
    	</head>
    	<body>
    		<form action=http://localhost:8080/test_servlet/LoginServlet">
    			用户:<input type="text" name="username"><br>
    			密码:<input type="password" name="password"><br>
    			<input type="submit" value="登陆"><br>
    		</form>
    	</body>
    </html>

    java类例如以下:

    import javax.servlet.*;
    import java.io.*;
    import javax.servlet.http.*;
    public class LoginServlet extends HttpServlet{
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    		throws ServletException, IOException{
    			String username=request.getParameter("username");
    			String password=request.getParameter("password");
    
    			System.out.println("username="+username);
    			System.out.println("password="+password);
    
    			response.setContentType("text/html;charset=GB18030");
    			//response.getWriter().println("Login Success");
    				response.getWriter().println("<html>");
    				response.getWriter().println("<head>");
    				response.getWriter().println("<title>登陆信息</title>");
    				response.getWriter().println("</head>");
    				response.getWriter().println("<body>");
    				response.getWriter().println("欢迎【"+ username+"】用户登陆成功!

    "); response.getWriter().println("</body>"); response.getWriter().println("</html>"); } }

    web.xml例如以下:

    <?xml version="1.0" encoding="ISO-8859-1"?

    > <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> </servlet-mapping> </web-app>

    解析:

           第一:Servlet的名字。包类
    <servlet>  
    	<servlet-name>MyServlet(为servlet取的名字)</servlet-name> 
    	<servlet-class>LoginServlet(包名.类名)</servlet-class> 
    </servlet>   
    
           第二:映射、訪问的地址(url)
    <servlet-mapping>  
    	<servlet-name>MyServlet(与上面的servlet名字要全然一样)</servlet-name>  
    	<url-pattern><span style="font-family:Arial, Helvetica, sans-serif;">/LoginServlet</span>(Servlet訪问路径)</url-pattern> 
    </servlet-mapping>

    效果例如以下:

                 
                

    长处


           执行在Webserver、Servlet容器中,能够扩展server的功能;
           能够同其它资源交互,从而生成返回给client响应的内容,即动态网页。
           使用JAVA编写,跨平台。
           运用垃圾回收机制,避免内存回收问题。       

    总结


            Servlet事实上是执行在server端的小应用程序;
            依据client请求的方式,要重写doGet和doPost方法;
            要使容器正确识别Servlet,则必须填写配置web.xml;
            Servlet生命周期声明包括三个方法:init()、service()、destroy();

            Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都仅仅进行一次,初始化完毕后。Servlet容器会将该实例保存在内存中

            

  • 相关阅读:
    织梦CMS去广告方法 for DedeCMS V5.7
    织梦网站底部的Power by DedeCms怎么去掉?
    java环境变量最佳配置
    HTML课上小结
    PHP四个阶段目标以及第一阶段学习内容
    例子:选项卡和进度条
    例子:轮播效果
    例子:下拉列表
    document对象操作:浏览器页面文件
    Windows对象操作:浏览器窗口信息
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6753501.html
Copyright © 2020-2023  润新知