zoukankan      html  css  js  c++  java
  • 【java项目实战】Servlet详解以及Servlet编写登陆页面(二)

           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提交,大家可以自己尝试一下。

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

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

    //引入所需要的包
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    public class LoginServlet extends HttpServlet {
    	//重写doGet方法
    	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");
    		
    		//返回html页面
    		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>");
    		}                 	
    	//重写doPost方法
    	public void doPost(HttpServletRequest request,
                HttpServletResponse response)
        throws ServletException,
                IOException {
    		doGet(request, response);               	
    	}     
    }
    

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


    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" 
    	xmlns="http://java.sun.com/xml/ns/j2ee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    	
        <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>
    

    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是无状态的,也就是没有可以修改的成员变量。



           这篇博文只是介绍了Servlet基础知识,大家还有什么疑问可以给我留言,我会及时给大家解决。



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

            下篇博文,我们做一个JDBC连接Oracle数据库的实例欲知后事如何,请看下回分晓!

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




  • 相关阅读:
    Count and Say leetcode
    Find Minimum in Rotated Sorted Array II leetcode
    Find Minimum in Rotated Sorted Array leetcode
    Search in Rotated Sorted Array II leetcode
    search in rotated sorted array leetcode
    Substring with Concatenation of All Words
    Subsets 子集系列问题 leetcode
    Sudoku Solver Backtracking
    Valid Sudoku leetcode
    《如何求解问题》-现代启发式方法
  • 原文地址:https://www.cnblogs.com/ainima/p/6331006.html
Copyright © 2011-2022 走看看