1. Servlet

1.1 Servlet概述

java EE Api
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

1.2 Servlet的使用

编写一个Java类实现Servlet接口—>重写service()方法;
在web.xml中配置这个类(方便服务器识别并执行和访问)。

配置web.xml:配置servlet的名称:<servlet><servlet-name>servlet的名称</servlet-name><servlet-class>Servlet类的全路径</servlet-class></servlet>配置Servlet的映射<servlet-mapping><servlet-name>servlet的名称</servlet-name><url-pattern>/访问路径</url-pattern></servlet-mapping>
Servlet快速入门

伪登录:登录界面点击登录提交账号密码到Servlet,Servlet将获取到的数据打印到控制台。

实现步骤:

1、设计登录页面,login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body><form action="login" method="get">账号:<input type="text" name="username" ><br/>密码:<input type="password" name="password" ><br/><input type="submit" value="登录" ></form>
</body>
</html>

2、创建登录的Servlet,LoginServlet.java,重写service()方法

package com.offcn.servlet;import java.io.IOException;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class LoginServlet implements Servlet{@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic ServletConfig getServletConfig() {// TODO Auto-generated method stubreturn null;}@Overridepublic String getServletInfo() {// TODO Auto-generated method stubreturn null;}@Overridepublic void init(ServletConfig arg0) throws ServletException {// TODO Auto-generated method stub}@Overridepublic void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {String name = request.getParameter("username");    String password = request.getParameter("password");System.out.println("用户名:"+name+"  密码:"+password);}}

3、配置Servlet,在web.xml文件中

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><display-name>Edu-10</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><!--Servlet注册 --><servlet><!--Servlet的name,通常与类名一致  --><servlet-name>LoginServlet</servlet-name><!--Servlet的全路径 --><servlet-class>com.offcn.servlet.LoginServlet</servlet-class></servlet><!--配置Servlet的映射(访问)路径 --><servlet-mapping><servlet-name>LoginServlet</servlet-name><!--Servlet的映射路径,配置时前面一定要加/,代表根目录 --><!--此时设置login.html中的action属性的值与此处的值一样--><url-pattern>/login</url-pattern></servlet-mapping>
</web-app>

4、测试:

运行login.html,输入账号和密码,点击登录,注意浏览器的变化和控制台的输出

1.3 Servlet的执行流程(前后台交互原理)

在浏览器的地址栏中输入地址—>浏览器向服务器发送请求—>服务器根据配置在中找到访问路径名—>通过这个路径找到在同一个标签中的—>根据这个名称到标签中的同名的—>在根据这个name找到同标签下的类的全路径—>找到Java代码中的这个类,执行里面的service方法,向浏览器端做出响应。

1.4 Servlet的实现关系

Servlet接口
|
|
GenericServlet类 通用的Servlet,是一个与协议无关的Servlet
|
|
HttpServlet类 Http专用的Servlet

实际使用中,一般让这个Servlet继承HttpServlet,重写service()方法;
继而发现service方法内部会根据请求方式的不同来调用相应的方法do***(),所以继承HttpServlet后直接重写doGet方法或者doPost方法,并且这两者可相调用以简化编程。

总结:基于HTTP协议的web项目中的Servlet直接继承HttpServlet即可

1.5 Servlet与Tomcat之间的关系

1、Tomcat在初始化Servlet时,会自动读取web.xml文件中相关的配置信息,初始化ServletConfig和ServletContext,同时会创建ServletRequest和ServletResponse对象直接交给Servlet实例,这样一来,Servlet就拥有了相关的功能。

2、doGet与doPost方法
请求到来时,自动调用的依然是service(),但是在该方法中,根据请求方式的不同,调用对应的do***(),而这些do***()在自己的Servlet中又重写了,所以,运行的就是自己写的do***()中的代码。

什么时候调用doGet
1)form表单的method属性值为get
2)form表单的method属性未给值
3)通过超链接请求
4)直接通过路径访问Servlet

什么时候调用doPost
1)form表单的method属性值为post

form表单中get方式与post方式的区别
1、get方式,提交的数据将会直接被拼接到地址栏中;post不会
2、get方式提交的数据量较少;post相对而言多一些
3、get方式提交的数据会被浏览器直接缓存;post不会

总结:get不安全的,post相对而言要安全一些。提交的数据量小且不需要保密时使用get,反之使用post

1.6 servlet生命周期

servlet的生命周期是指servlet对象从创建到销毁的过程,这个过程包括了初始化,服务和销毁三个阶段,对应的方法是init、service和destroy。
(1)servlet在第一次被访问的时候会被实例化,而servlet一旦被实例化那么其中的init方法就会被执行,而且只会被执行一次。
(2)任何一次从客户端发送过来的请求,都会导致servlet中的service方法被执行,这个过程中在service方法的内部根据请求方式的不同调用不同的do***方法。
(3)当servlet从服务器中移除或者服务器关闭的时候servlet对象就会被销毁,里面的destroy方法就会执行,然后垃圾回收器就会将其回收。
package com.offcn.servlet;import java.io.IOException;
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("/LifeServlet")
//上文说过,基于HTTP协议的web项目中的Servlet直接继承HttpServlet即可
public class LifeServlet extends HttpServlet {@Overridepublic void init() throws ServletException {System.out.println("初始化");}@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("服务了");}@Overridepublic void destroy() {System.out.println("销毁了");}
}

1、初始化(init方法)
默认情况下,第一个请求到达时被初始化,初始化在整个生命周期中只有一次。
可以使用其值为大于或等于0的整数,设置Servlet在服务器启动时初始化。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><display-name>Edu-10</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><servlet-name>LifeServlet</servlet-name><servlet-class>com.offcn.servlet.LifeServlet</servlet-class><!--使用<load-on-startup>其值为大于或等于0的整数,设置Servlet在服务器启动时初始化  --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>LifeServlet</servlet-name><url-pattern>/life</url-pattern></servlet-mapping>
</web-app>

2、提供服务(service方法)
在生命周期中,会提供n次服务
3、销毁(destroy方法)
服务器停止时自动销毁,销毁在生命周期中也只有一次。

1.6.1 Servlet的启动时加载

Servlet对象是第一次访问时被创建的,init方法就会执行。假设在init方法中做了一些比较耗时的操作(比如加载一些配置文件并且解析),那么第一个用户第一次访问这个Servlet的时候据需要等待一些时间。为了是第一个用户第一次访问时不用等待,就使用了启动时加载。通过配置文件将Servlet的实例化的过程放在服务器启动时。

方法:在web.xml中的<servlet>标签中进行配置,<load-on-startup>整数<load-on-startup>,整数越小,优先级越高(通常写2和2之后的数值,因为Tomcat中默认配置的是1)。

1.7 Servlet访问路径的配置

<url-pattern>配置的方式:
1)完全路径匹配以 / 开始      如/bbb
2)目录匹配以 / 开始,以 /* 结束   如/aaa/*  表示/aaa/这个目录下输入任意字符都可以访问
3)扩展名匹配以 * 开始     如*.action  表示以.action结尾的路径都可以访问

优先级:完全路径匹配 > 目录匹配 > 扩展名匹配

动态网页开发技术(一):Servlet相关推荐

  1. 动态网页开发技术(三):jsp

    Jsp概述 java server pages-java服务器页面,是一种动态网页技术标准,在传统的网页HTML中插入Java程序段(Scriptlet和JSP标记tag),从而形成JSP文件.JSP ...

  2. JSP动态网页开发技术

    一.学习目标 1.JSP概述 2.JSP指令 3. JSP 隐式对象 二.重点知识 1.JSP概述:JSP是什么? 1)JSP全称Java Server Pages,是一种动态网页开发技术.它使用JS ...

  3. 动态网页开发技术(二):Servlet

    ServletConfig对象 1)ServletConfig是用来获得Servlet的相关配置的对象 2)获得ServletConfig对象-通过Servlet的实例调用getServletConf ...

  4. jsp php动态网站开发,动态网站开发技术ASP、PHP与JSP的比较

    龙源期刊网 http://www.doczj.com/doc/4d5157a89a89680203d8ce2f0066f5335b816746.html 动态网站开发技术ASP.PHP与JSP的比较 ...

  5. 第四本书第1章 动态网页开发基础、

    一.动态网页开发基础 1.动态网页:能跟用户进行交互的网页,能够处理用户请求的网页 2.B/S架构:浏览器:客户端零维护:与操作系统平台的关系最小化:在响应速度和安全性上需要花费更多设计成本 C/S架 ...

  6. 雅虎JavaScript架构师:网页开发技术安全优先

    由于当前技术仍偏向功能强化为主要思维,指令码趋向庞杂的结果,容易产生更多安全漏洞,且失去快速因应攻击调整架构的灵活性. 身为JavaScript网路技术重要推手的雅虎(Yahoo!)架构设计师Doug ...

  7. 畅游Python 二十二:网页开发技术方案:AJAX

    一.概述 对于WEB应用程序而言:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回的是字符串(HTML),浏览器将字符串(HTML)渲染并显示在浏览器上. 1.传统的Web应用 一个简 ...

  8. Python动态网页爬虫技术

    这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动态网页爬虫技术一之API请求法 动态网页爬虫技术二之模拟浏览器法 安装selenium模块下载 Google Chr ...

  9. 网页三剑客软件测试自学,动态网页制作技术实验指导书.doc

    PAGE 动态网页制作技术实验指导书 Computer Science and Technology西南科技大学(SouthWest University of Science and Technol ...

最新文章

  1. 何恺明团队新作:只用普通ViT,不做分层设计也能搞定目标检测
  2. 同一服务器上多个版本的 sqlserver ,如何连接,改变某一实例的端口号
  3. ubuntu系统安装的MySql数据库,远程不能访问的几种可能问题
  4. C#之foreach语句
  5. gin-vue-blog自建博客
  6. 一次性配置VS2015属性的方法,新工程无需重新配置
  7. 四十二、开始Vuex的学习:如何在Vue中使用Vuex
  8. 十字链表计算矩阵乘积 c语言,求用十字链表实现矩阵相加算法(C语言)急!!!...
  9. hse不起振 stm8_STM8S207使用外部24M晶振不起振的解决办法
  10. mysql 启动报错-server PID file could not be found
  11. 10年老分析师最终抛弃Excel,它不是最好的数据分析工具
  12. 数据挖掘:模型状态评估
  13. 面试题总结:可能是全网最好的MySQL重要知识点
  14. VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)
  15. matlab遗传算法求解车辆路径问题(一)
  16. W25Q64 Flash芯片原理与应用方案(含W25Q64中文数据手册)
  17. CDA I 级 备考之 PART 1
  18. 三国志战略版鸿蒙梦魇,三国志战略版梦中弑臣厉害吗 梦中弑臣战法搭配
  19. 智库大会 | 高端对话:智能科技推动管理学变革...
  20. python推箱子游戏顶层设计子层设计_python实现推箱子游戏

热门文章

  1. 外媒:Apple面临着印度iPhone的停用
  2. LoadRunner场景设置里的各参数解释
  3. 重读《从菜鸟到测试架构师》--黑色的盒子里有什么(中)
  4. 不得不赞! CV算法工程师的高效利器
  5. 内卷、996的背后,AI技术该如何服务企业“人、财、物”?
  6. 阿姆斯特丹大学博士招生,月薪2.3K-3K 欧,QUVA Lab 计算机视觉与机器学习方向...
  7. CV Code|计算机视觉开源周报20200602期~文末送书
  8. 波士顿动力再发逆天机器人视频:倒立、360°旋转、空中劈叉,真是秀儿
  9. 霸榜 | 微软CV模型收获近 2k star
  10. Transformer靠什么得以闯入CV界秒杀CNN?