动态网页开发技术(一):Servlet
1. Servlet1.1 Servlet概述java EE ApiServlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。1.2 Servlet的使用编写一个Java类实现Servlet接口—>重写service()方法;在we
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{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public 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 {
@Override
public void init() throws ServletException {
System.out.println("初始化");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("服务了");
}
@Override
public 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结尾的路径都可以访问
优先级:完全路径匹配 > 目录匹配 > 扩展名匹配
更多推荐
所有评论(0)