第八章 Servlet概述

主要内容:

了解servlet;

掌握servlet实现;

掌握servlet的生命周期。

servlet概念

Servlet是运行在服务器端用Java语言编写的应用程序,用来处理B/S架构下客户端请求的。需要运行在容器里面,常见容器有Tomcat

如何实现servlet

前提:新建web项目;必须包含javax.servlet包

  1. 所有的 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

}

}

  1. 在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>

  1. 启动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概述的更多相关文章

  1. Servlet概述-servlet学习之旅(一)

    Servlet概述 servlet是server+applet的缩写.applet是运行于客户端浏览器的java小程序,java诞生的时候,因为applet而闻名于世,但是现在已经没有多少热使用了,而 ...

  2. 七、Servlet概述

    Servlet概述 生命周期方法:void init(ServletConfig):出生之后(1次):void service(ServletRequest request, ServletRes ...

  3. Servlet概述及其生命周期

    Servlet和传统CGI程序相比的优点:   1. 只需要启动一个操作系统进程以及加载一个JVM,大大降低了系统的开销 2. 如果多个请求需要做同样处理的时候,这时只需要加载一个类,这也大大降低了开 ...

  4. Servlet概述

    1.Servlet简介 Servlet是使用Java Servlet应用程序设计接口及相关类和方法的Java程序.它在Web服务器上或应用服务器上运行并扩展了该服务器的能力.Servlet装入Web服 ...

  5. servlet概述(作业11)

    1.什么是servlet. Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能 ...

  6. Servlet技术之——概述、实现、细节、获取资源、ServletConfig、ServletContext

    Servlet概述.实现.细节.获取资源.ServletConfig.ServletContext (一) Setvlet基本概述 (1) 什么是Servlet ? Servlet(Server Ap ...

  7. Java—Servlet技术

    1  Servlet 概述 Servlet简介——开发动态web资源的技术Sun公司在API提供了一个servlet接口,如开发一个java程序向浏览器输出数据:1)编写一个java类,实现servl ...

  8. Servlet目录

    Servlet目录   课时1 Servlet概述12:30 课时2 servlet的第一个例子31:08 课时3 servlet的生命周期18:18 课时4 HttpServlet详细讲解31:43 ...

  9. Servlet知识

    1.Servlet概述 2.编写Servlet的开发步骤a.建立标准的JavaWeb应用目录FirstAppWEB-INFclasseslibweb.xmlb.编写一个类,实现javax.servle ...

随机推荐

  1. mysql数据库优化原则

    一.一个例子 数据库需要处理的行数: 189444*1877*13482~~~479亿 如果在关联字段上加上合适的索引: 数据库需要处理的行数:368006*1*3*1~~~110万 MySQL通常是 ...

  2. Github博客私人订制(一)

    这是博客订制的第一步,简单博客的建立. (这里不做截图说明了,贴图实在是太累,有问题大家QQ私聊我) (一)创建Github账号 URL:https://github.com/ (二)登录Github ...

  3. 造个简单的轮子倒是不难,但可用性健壮性高到qt这样全世界都在用,就几乎不可能了

    造个简单的轮子倒是不难,但可用性健壮性高到qt这样全世界都在用,就几乎不可能了比如自己写个事件循环实现信号槽,还真不难,我这边的架构里就这么搞了个仿osgi的事件总线嵌入式实时操作系统上能用的大型gu ...

  4. Nginx系列(三)--管理进程、多工作进程设计

    Nginx由一个master进程和多个worker进程组成,但master进程或者worker进程中并不会再创建线程. 一.master进程和worker进程的作用 master进程 不须要处理网络事 ...

  5. php后期静态绑定

    php后期静态绑定 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 虽然也可以调用非静态方法,但是不会在运行时绑定. static 不再只是简 ...

  6. DB-MySQL:MySQL 索引

    ylbtech-DB-MySQL:MySQL 索引 1.返回顶部 1. MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果 ...

  7. Memched——C#操作

    Memched还是比较简单的,这里把C#的相关操作整理了一下,Mark~ /// <summary> /// 缓存操作类. /// </summary> /// <rem ...

  8. Python—JSON数据解析

    1.安装pip pip是python的包管理工具,使用它能非常方便地安装和卸载各种python工具包 第一步:直接用浏览器访问地址:https://raw.github.com/pypa/pip/ma ...

  9. ffmpeg x264编译与使用介绍

    问题1:我用的是最新版本的ffmpeg和x264,刚刚编译出来,编译没有问题,但是在linux 环境使用ffmpeg的库时发现报错error C3861: 'UINT64_C': identifier ...

  10. python 3.x 学习笔记16 (队列queue 以及 multiprocessing模块)

    1.队列(queue) 用法: import queue q = queue.Queue() #先进先出模式 q.put(1) #存放数据在q里 作用: 1)解耦    2)提高效率 class qu ...