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

           Servlet是Sun公司提供的一门用于开发动态web网页的技术。

    Sun公司在API中提供了一个servlet接口,我们假设想使用java程序开发一个动态的web网页,仅仅须要实现servelet接口,并把类部署到webserver上就能够执行了。


    究竟什么是Servlet呢?


           通俗一点,仅仅要是实现了servlet接口的java程序,均称Servlet。

    Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在server端执行的小程序


    编写一个现实登陆的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");      
    		
    		//server端信息打印
    		//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,启动server。


    <?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、一定要启动server,之后在浏览器中输入你的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部署

           

           client通过URL地址訪问webserver中的资源,所以若想訪问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、Webserver调用Servlet过程(Servlet生命周期)

         

          servlet程序是由webserver调用,webserver实现了对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线程安全问题


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




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



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

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

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




  • 相关阅读:
    SQLSever语句(增、删、改、查)一、增:有4种方法1.使用insert插入单行数据
    Java-IDEA环境搭建swagger
    Kettle Rest大文件上传(RestUploadFile.ktr) Rest文件下载(FileDownload.ktr)
    Mybatis find_in_set 子查询,替代 in
    Kettle-Spoon入门示例
    TruncateTable数据库清理
    域账户密码登录验证
    数据库表新增触发器
    第一个Delphi小程序
    Java 方法重载
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6820198.html
Copyright © 2011-2022 走看看