文档章节

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

朱门中人
 朱门中人
发布于 2016/05/10 16:46
字数 1540
阅读 39
收藏 0

       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接口定义三个实现类,分别是FacesServletGenericServletHttpServlet。下面我们简单的介绍一下。

 

2、Servlet接口实现类

     

     (1)FacesServlet是一个用于管理利用JSF(JavaServer Faces)构建用户界面的web应用程序请求处理生命周期的Servlet。(FacesServlet is 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基础知识,大家还有什么疑问可以给我留言,我会及时给大家解决。

本文转载自:http://blog.csdn.net/jiuqiyuliang/article/details/36424981

共有 人打赏支持
朱门中人
粉丝 3
博文 47
码字总数 310
作品 0
南京
程序员
浅谈jsp、freemarker、velocity区别

以前做web开发页面层用的基本就是就是,最近公司java项目页面层用的技术是velocity。听说jsp要淘汰,也不知道是真是假,但本人还是比较喜欢jsp的,下面是网上查找的javaweb项目页面3种技术的...

cccyb
2017/10/21
0
0
Jsp 和 Servlet 有什么不同?

面试中被问到了 Jsp 和 Servlet 有什么不同?在这里总结分享下。 回答思路先分别进行基本介绍,然后分析说明两者相同点和不同点。 基本介绍 Servlet: Servlet 是一种服务器端的Java应用程序...

几个栗子
08/22
0
0
(JavaEE-07)JSP.md

JSP JSP全称是Java Server Pages,它和Servlet技术一样,都是SUN公司定义的一种用于开发动态Web资源的技术。JSP的编写就像编写HTML一样简单,但是与HTML不同的是,在JSP中,可以编写Java代码...

_-Leon-_
2014/07/04
0
0
六、JSP的由来以及与Servlet的关系

JavaWeb在有了Servlet这项技术以后,就可以编写动态网页了。在动态网页中,一般来说样式是不变的,变化的是数据。如果程序员在Servlet类中写了大量的静态代码,例如out.println("<html>");这...

Wakeeee_
07/09
0
0
9.java web的发展 javaweb是什么 J2EE发展历史 规范 J2EE是什么 发展背景 组件标准 J2EE好处作用 Servlet 含义 本质 发展 java在web中的发展 servlet工作流程 java 开发web项目发展 javaBean jsp

javaweb 本质上来说就是使用java 语言来解决企业web应用中一系列技术体系与规范; jdk1.2 playground 此版本中把java技术体系拆分为三个方向 J2SE J2EE J2ME 这个大家都知道 其中之一的J2EE,...

noteless
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用碎片化时间Get Linux系统

起初,我做着一份与IT毫无关系的工作,每月领着可怜的工资,一直想改变现状,但无从下手,也就是大家熟知的迷茫。我相信,每一个人都会或多或少的经历过迷茫,迷茫每一个选择,迷茫工作或者生...

Linux就该这么学
8分钟前
0
0
图像显示深入学习一:Activity启动过程

一个月左右写了图像显示深入学习之文章开篇文章表明了自己近期的计划,前半年重新学习了opengl es,c++以及Linux的一些知识,觉得是时候开始看图像这一块的源码了,边看边补缺补漏吧。 作为该...

JerryLin123
30分钟前
0
0
给MySQL授权远程访问

putty登录服务器; 登录MySQL: mysql -u root -p 新建远程用户: CREATE USER 'myusername' IDENTIFIED BY 'mypassword'; 授权: grant all on *.* to john@'101.102.103.104' identified by......

sweethome
59分钟前
0
0
在t-io老巢造谣,不过有造谣的就会有反造谣的!

只发当事人的截图,不发表评论,以免有引导嫌疑 PS: 截图是由不同的人发过来的 本人已经不在此微信群 图3:有造谣的,就有反造谣的 图4是2018-09-23的t-io官方群的一个发言小统计,有助于让...

talent-tan
今天
99
0
heartbeat 资源

drbd+apache+heartbeat : http://blog.51cto.com/11838039/1827901 heartbeat双机热备的架设 : http://blog.51cto.com/11838039/1827560 对heaetbeat的深一步认识 : http://blog.51cto.co......

寰宇01
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部