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

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  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.           
  9.         <form action="http://localhost:8080/loginServlet/LoginServlet" method="post">  
  10.             用户:<input type="text" name="username" /><br/>  
  11.             密码:<input type="password" name="password" /><br/>  
  12.             <input type="submit" value="登录" />  
  13.               
  14.         </form>  
  15.     </body>  
  16. </html>  

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

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

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


[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  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.       
  8.     <servlet>  
  9.         <servlet-name>MyServlet</servlet-name>  
  10.         <servlet-class>LoginServlet</servlet-class>  
  11.     </servlet>  
  12.   
  13.     <servlet-mapping>  
  14.         <servlet-name>MyServlet</servlet-name>  
  15.             <url-pattern>/LoginServlet</url-pattern>  
  16.     </servlet-mapping>  
  17. </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基础知识,大家还有什么疑问可以给我留言,我会及时给大家解决。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编写一个基本的登录页面,需要使用Servlet和JSP进行开发,并且需要使用HTML和CSS进行前端设计。以下是一个基本的登录页面的示例代码: index.jsp: ```html <!DOCTYPE html> <html> <head> <title>Login Page</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div class="login-box"> <h2>Login Here</h2> <form action="LoginServlet" method="post"> <p>Username</p> <input type="text" name="username" placeholder="Enter Username"> <p>Password</p> <input type="password" name="password" placeholder="Enter Password"> <input type="submit" name="submit" value="Login"> </form> </div> </body> </html> ``` style.css: ```css .login-box { width: 280px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: #191919; padding: 30px; border-radius: 5px; color: #fff; text-align: center; } .login-box h2 { margin: 0 0 30px; padding: 0; } .login-box input[type="text"], .login-box input[type="password"] { width: 100%; padding: 10px; margin-bottom: 25px; background: none; border: none; border-bottom: 1px solid #fff; font-size: 16px; color: #fff; } .login-box input[type="submit"] { width: 100%; background: none; border: 2px solid #fff; padding: 10px; color: #fff; font-size: 20px; cursor: pointer; border-radius: 5px; transition: all 0.3s ease; } .login-box input[type="submit"]:hover { background: #fff; color: #191919; } ``` LoginServlet.java: ```java import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String password = request.getParameter("password"); if(username.equals("admin") && password.equals("12345")) { out.println("<h1>Login Successful</h1>"); } else { out.println("<h1>Login Failed</h1>"); } } } ``` 在这个示例中,我们使用HTML和CSS创建了一个简单登录页面。在表单中,我们定义了两个输入字段,分别接受用户名和密码。当用户单击“登录”按钮时,表单将通过POST请求发送到名为“LoginServlet”的Servlet。在LoginServlet中,我们从请求中获取用户名和密码,并将其与硬编码的值进行比较。如果用户名和密码与硬编码值匹配,则在响应中输出“登录成功”,否则输出“登录失败”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值