第八章 Servlet概述
第八章 Servlet概述
主要内容:
了解servlet;
掌握servlet实现;
掌握servlet的生命周期。
servlet概念
Servlet是运行在服务器端用Java语言编写的应用程序,用来处理B/S架构下客户端请求的。需要运行在容器里面,常见容器有Tomcat
如何实现servlet
前提:新建web项目;必须包含javax.servlet包
- 所有的 Servlet必须实现javax.servlet.Servletjavax.Servlet接口;
具体通过扩展这两个类实现:
javax.servlet.GenericServletjavax.GenericServlet 支持所有协议
javax.servlet.HttpServletjavax.HttpServlet 支持http协议
创建servlet:ServletDemo1.java
|
package com.silvan.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServletDemo1 extends HttpServlet { /** * Constructor of the object. */ public ServletDemo4() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(this.getClass()); out.println(", using the GET method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(this.getClass()); out.println(", using the POST method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { // Put your code here } } |
- 在web.xml里面进行配置,
a) <servlet>和<servlet-mapping>里面的<servlet-name>值要一致
b) <servlet-class>表示实际servlet类
c) <url-pattern>访问地址
d) <servlet>必须写在<servlet-mapping>前面
|
<servlet> <servlet-name>ServletDemo1</servlet-name> <servlet-class>com.silvan.servlet.ServletDemo1</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletDemo1</servlet-name> <url-pattern>/ServletDemo1</url-pattern> </servlet-mapping> |
- 启动Tomcat服务,通过地址http://localhost:8081/08Servlet/ServletDemo1进行访问,地址中的“/ServletDemo1”是web.xml文件中配置的<url-pattern>值
servlet的生命周期
指创建Servlet实例之后其存在的时间以及何时消失;
a) Init():在Servlet的生命周期中,仅执行一次init方法,是在服务器装入Servlet时执行的
如果servlet标签里面配置了<load-on-startup>且值不小于0则容器启动的时候调用init方法,否则第一次访问该servlet的时候调用;值越大优先级越高
|
<servlet> <servlet-name>ServletDemo1</servlet-name> <servlet-class>com.silvan.servlet.ServletDemo1</servlet-class> <load-on-startup>0</load-on-startup> </servlet> |
b) Service():可以无限次调用,是servlet的核心,主要业务逻辑块
c) Destroy():当容器reload的时候或者关闭的时候调用
整个生命过程:
(1)tomcat服务器创建servlet实例。
(2)tomcat服务器调用init()方法,进行初始化。
(3)用户发出请求,tomcat服务器将用户的请求封装为request对象,并创 建response对象,并当做参数传给Servlet中的service()方法。
(4)tomcat服务器调用service()处理请求,处理完请求,并将响应发送给 浏览器端,浏览器端显示结果。
(5)当用户再次发出对该servlet的请求,重复3和4步骤。
(6)当tomcat服务器检测很长时间都没有对该servlet的请求,或tomcat服 务器要关闭,就会自动的调用destroy()方法完成销毁servlet。
案例:
简单的用户认证
a) 登录页面
|
public class Login extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { try { // 解决中文乱码问题 response.setContentType("text/html;charset=gbk"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>登陆页面</title></head>"); out.println("<body>"); out.println("<h1>登陆页面</h1>"); out.println("<form action=logincontrol>"); out.println("用户名:<input type=text name=username><br>"); out.println("密码:<input type=password name=password><br>"); out.println("<input type=submit value=登陆>"); out.println("</form>"); out.println("</body>"); out.println("</html>"); } catch (Exception e) { e.printStackTrace(); } } } |
b) 登录验证
|
/** * 用户校验servlet(掌握1.如何实现用户校验;2.如果进行页面的跳转) * * @author * */ public class LoginContrl extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { // 获取请求的信息(方法的参数需要与input元素中name属性值相同,否则取不到值) String username = request.getParameter("username"); String password = request.getParameter("password"); String sex = request.getParameter("sex"); try { if (username.equals("admin") && password.equals("123")) {// 合法 // 如果用户名合法,则把用户名放到session里面 HttpSession hs = request.getSession(); // 设置session的生命时间(单位s) hs.setMaxInactiveInterval(30); // 向session中放置属性 hs.setAttribute("username", username); hs.setAttribute("password", password); // b.通过sendRedirect实现不同页面之间数据的共享 response.sendRedirect("welcome?username=" + username + "&password=" + password); } else {// 不合法 // 这个方法的参数是url-pattern里面配置的 response.sendRedirect("login"); } } catch (Exception e) { e.printStackTrace(); } } } |
c) 网站欢迎界面
|
/** * 网站的欢迎页面 * * @author * */ public class Welcome extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { try { response.setContentType("text/html;charset=gbk"); PrintWriter out = response.getWriter(); // 获取session HttpSession hs = request.getSession(); // 根据session中的属性名获取相应的属性值 String usernameSession = (String) hs.getAttribute("username"); String passwordSession = (String) hs.getAttribute("password"); if (usernameSession != null) {// 如果从session当中能够获取用户名,则可以进入我的网站 out.println("欢迎登陆我们的网站!用户名:" + usernameSession + " 密码:" + passwordSession); } else {// 否则显示空白页面 } } catch (Exception e) { e.printStackTrace(); } } } |
第八章 Servlet概述的更多相关文章
- Servlet概述-servlet学习之旅(一)
Servlet概述 servlet是server+applet的缩写.applet是运行于客户端浏览器的java小程序,java诞生的时候,因为applet而闻名于世,但是现在已经没有多少热使用了,而 ...
- 七、Servlet概述
Servlet概述 生命周期方法:void init(ServletConfig):出生之后(1次):void service(ServletRequest request, ServletRes ...
- Servlet概述及其生命周期
Servlet和传统CGI程序相比的优点: 1. 只需要启动一个操作系统进程以及加载一个JVM,大大降低了系统的开销 2. 如果多个请求需要做同样处理的时候,这时只需要加载一个类,这也大大降低了开 ...
- Servlet概述
1.Servlet简介 Servlet是使用Java Servlet应用程序设计接口及相关类和方法的Java程序.它在Web服务器上或应用服务器上运行并扩展了该服务器的能力.Servlet装入Web服 ...
- servlet概述(作业11)
1.什么是servlet. Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能 ...
- Servlet技术之——概述、实现、细节、获取资源、ServletConfig、ServletContext
Servlet概述.实现.细节.获取资源.ServletConfig.ServletContext (一) Setvlet基本概述 (1) 什么是Servlet ? Servlet(Server Ap ...
- Java—Servlet技术
1 Servlet 概述 Servlet简介——开发动态web资源的技术Sun公司在API提供了一个servlet接口,如开发一个java程序向浏览器输出数据:1)编写一个java类,实现servl ...
- Servlet目录
Servlet目录 课时1 Servlet概述12:30 课时2 servlet的第一个例子31:08 课时3 servlet的生命周期18:18 课时4 HttpServlet详细讲解31:43 ...
- Servlet知识
1.Servlet概述 2.编写Servlet的开发步骤a.建立标准的JavaWeb应用目录FirstAppWEB-INFclasseslibweb.xmlb.编写一个类,实现javax.servle ...
随机推荐
- Visual C++ 经常使用快捷键
大写和小写 Ctrl+Shift+U: 所有变为大写 Ctrl+U: 所有变为小写 凝视 Ctrl+K+Crtr+C: 凝视选定内容 Ctrl+K+Crtr+U: 取消选定凝视内容 折叠 折叠代码: ...
- 关于App class loader的总结
关于App class loader的总结 2010-05-11 15:19:09 分类: 系统运维 Java本身是一种设计的非常简单,非常精巧的语言,所以Java背后的原理也很简单,归结起来就是两点 ...
- 2014.04.16,读书,读书笔记-《Matlab R2014a完全自学一本通》-第17章 图形用户界面
界面对象分三类: 用户控件对象(uicontrol) 下拉式菜单对象(uimenu) 内容式菜单对象(uicontextmenu) 创建用户界面: 1.命令行方式 采用uicontrol来创建控件对象 ...
- qq邮箱的SMTP服务器是什么
qq邮箱的SMTP服务器是什么 QQ邮箱POP3 和 SMTP 服务器地址设置如下:POP3服务器地址为“pop.qq.com”,SMTP服务器地址为“smtp.qq.com”注:1.SMTP服务器需 ...
- Oracle 常见的33个等待事件
一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指Oracle正等待某种工作,在诊断和优化数据库的时 ...
- IPv6系列-入门指南
本文是<IPv6系列>文章的第一篇<入门指南>,用于快速了解并上手IPv6. 小慢哥的原创文章,欢迎转载 目录 ▪ 一. 为什么要了解IPv6 ▪ 二. 顾虑:IPv6地址太复 ...
- 【刷题笔记】LeetCode 222. Count Complete Tree Nodes
题意 给一棵 complete binary tree,数数看一共有多少个结点.做题链接 直观做法:递归 var countNodes = function(root) { if(root===nul ...
- ROS命令参考
前言:整理一些ROS常用命令,参考自:<ROS机器人编程>. 一.ROS执行命令 二.ROS信息命令 三.ROS catkin命令 四.ROS功能包命令 -END-
- Web api 测试 工具WebApiTestClient
1.打开Nuget 安装 WebApiTestClient 2.在HelpPageConfig.cs 里面添加这段文字 config.SetDocumentationProvider(new Xml ...
- 【转】JS回调函数--简单易懂有实例
JS回调函数--简单易懂有实例 初学js的时候,被回调函数搞得很晕,现在回过头来总结一下什么是回调函数. 我们先来看看回调的英文定义:A callback is a function that is ...