Servlet是Sun公司提供的一门用于开发动态web网页的技术。Sun公司在API中提供了一个servlet接口,咱们若是想使用java程序开发一个动态的web网页,只须要实现servelet接口,并把类部署到web服务器上就能够运行了。html
通俗一点,只要是实现了servlet接口的java程序,均称Servlet。Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在服务器端运行的小程序。java
一、咱们先写一个简单的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>
//引入所须要的包 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); } }
三、在WebRoot下的WEB-INF的web.xml,部署咱们的Servlet,启动服务器。web
<?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>
实例的demo:http://download.csdn.net/detail/jiuqiyuliang/7593641数据库
==============================================================================================================================小程序
若是不知道怎么配置java Web项目,能够移驾到个人上篇博客(一步步教你使用MyEclipse搭建java Web项目开发环境(一)),下面咱们详细介绍Servlet的基础知识。浏览器
==============================================================================================================================安全
解读API对于拒绝学习API的程序员们是一种煎熬,但它倒是咱们学习和进步的最好工具,且学且珍惜。服务器
你们能够在点进去看一看,从上图,能够看出Servlet接口定义三个实现类,分别是FacesServlet, GenericServlet, HttpServlet。下面咱们简单的介绍一下。多线程
(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就好。
客户端经过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
servlet程序是由web服务器调用,web服务器实现了对servlet生命周期的管理。servlet的生命周期分为四步:
1)实例化以及加载servlet,new的过程。
2)初始化init(ServletConfig)。
3)处理请求,调用servlet的service,doget,dopost方法将Request和Response,做为参数传递。
4)退出服务,调用destory方法释放资源。
注意:
一、servlet只实例化一次。感受有点单例模式的意思,你们能够研究一下Tomcat的实现原理。
二、init方法也只执行一次。servlet实例只建立一次,因此init初始化只调用一次。
当多个客户端并发访问同一个Servlet时,web服务器会为每个客户端的访问请求建立一个线程,并在这个线程上调用service方法,所以,service方法内若是访问了同一个资源的话,就有可能引起线程安全问题。你们重点理解下面两句便可:
(1) Servlet是单实例多线程的,若是存在能够修改的成员变量将会出现线程安全问题。
(2) 使用Servlet最好保证Servlet是无状态的,也就是没有能够修改的成员变量。
这篇博文只是介绍了Servlet基础知识,你们还有什么疑问能够给我留言,我会及时给你们解决。
=============================================================================================================================
下篇博文,咱们作一个JDBC链接Oracle数据库的实例,欲知后事如何,请看下回分晓!
=============================================================================================================================