Servlet 是什么?
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:
- 性能明显更好。
- Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
- Servlet 是独立于平台的,因为它们是用 Java 编写的
- 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
- Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。
使用 Servlet可以用实现接口和继承来完成
继承:不强制重写,需要什么就可以写什么
访问方式: GET / POST
GET: 1. 通过地址栏携带参数 2. 网页中的链接全部都是GET
POST:1. 参数不会显示 2. 参数没有长度限制
这是接口版本的
这是实现接口:
package com.zking.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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 ServletConfig getServletConfig() {
//得到配置
return null;
}
@Override
public String getServletInfo() {
//得到信息
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
//初始化 这个servlet被别个访问的
System.out.println("初始化了");
}
@Override
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
//服务 访问的时候他来提供信息
//request :请求 获取用户带过来的数据
//response 响应 给用户输出信息
//乱码
req.setCharacterEncoding("utf-8");
//获取信息
String username = req.getParameter("username");
String userpwd = req.getParameter("userpwd");
//获取输出对象
resp.setCharacterEncoding("gbk");
PrintWriter out = resp.getWriter();
//逻辑判断
if("root".equals(username)&&"root123".equals(userpwd)) {
//显示在页面中 登陆成功
out.print("登陆成功");
}else {
//显示在页面中 登陆失败·
out.print("登陆失败");
}
}
@Override
public void destroy() {
//销毁
// 1.你跟新了servlet代码
// 2.服务器关闭
System.out.println("我销毁了");
}
}
这是继承版本的
package com.zking.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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("/two.do")
public class LoginTwoServlet extends HttpServlet{
//提供方法给别个访问才可以
//servlet可以支持多重访问方式
//提供get访问
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
//提供post访问
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//拿数据
String username = req.getParameter("username");
//alt+1
String userpwd = req.getParameter("userpwd");
//获取输出对象
resp.setCharacterEncoding("gbk");
PrintWriter out = resp.getWriter();
//逻辑判断
if("root".equals(username)&&"root123".equals(userpwd)) {
//显示在页面中 登陆成功
out.print("登陆成功");
//resp.sendRedirect("");
//req.getRequestDispatcher("").forward(req, resp);
}else {
//显示在页面中 登陆失败·
out.print("登陆失败");
}
//session
req.getSession();
//application
req.getServletContext();
//Context 上下文 [容器]
}
}
web.xml界面 :servlet配置与配置访问路径:
<!-- servlet的配置 -->
<servlet>
<servlet-name>login</servlet-name>
<!-- 类在哪里? -->
<servlet-class>com.zking.servlet.LoginServlet</servlet-class>
</servlet>
<!-- 配置servlet的访问路径 -->
<servlet-mapping>
<!-- 需要一个名字 -->
<servlet-name>login</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
@WebServlet("/two.do")
Servlet 生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
- Servlet 通过调用 init () 方法进行初始化。
- Servlet 调用 service() 方法来处理客户端的请求。
- Servlet 通过调用 destroy() 方法终止(结束)。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。