目录
一、servlet的概念
狭义的 Servlet 是指 Java 语言实现的一个接口,广义的 Servlet 是指任何实现了这个 Servlet 接口的类,一般情况下,人们将Servlet 理解为后者。 Servlet 运行于支持 Java 的应用服务器中。从原理上讲,Servlet 可以响应任何类型的请求,但绝大多数情况下 Servlet 只用来扩展基于 HTTP 协议的 Web 服务器。
简而言之,Servlet 是指实现了Servlet 接口的类。
二、servlet的生命周期
Servlet的生命周期为启动服务器之后的第一次调用到服务器关闭。
如果在web.xml中对该Servlet配置了<load-on-startup>1</load-on-startup>,则生命周期为启动服务器该到服务器关闭。
在Servlet中可以重写init()方法和destroy()方法,其中init()方法为第一次调用Servlet,被加载进内存时执行。destroy()方法为关闭服务器时,Servlet被销毁时执行。
三、 servlet实现登录的案例
💕登录界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="test.do" method="post">
<p><input type="text" name="username"></p>
<p><input type="text" name="password"></p>
<p><button>登录</button></p>
</form>
</body>
</html>
💕实现式开发
package com.xyz.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 用来实现登录请求的处理
* @author zjjt
*
*/
public class LoginServlet implements Servlet{
@Override //init 初始化
public void init(ServletConfig arg0) throws ServletException {
//当请求来到这个servlet 就会调用init方法
System.out.println("开始初始化");
}
@Override //服务
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
HttpServletResponse response=(HttpServletResponse)resp;
HttpServletRequest request=(HttpServletRequest)req;
//所有的代码全部写在这个方法中
req.setCharacterEncoding("utf-8");
//取到用户数据
String username = req.getParameter("username");
String password = req.getParameter("password");
//通过响应对象获取了输出对象
PrintWriter out=response.getWriter();
//通过请求对象取session
HttpSession session = request.getSession();
//通过请求对象取application
ServletContext application = request.getServletContext();
if("root".equals(username)&&"root123".equals(password)) {
out.print("登录成功");
}else {
out.print("登录失败");
}
}
@Override // 销毁
public void destroy() {
//1.服务关闭了
//2.这个类被修改了
System.out.println("销毁了");
}
@Override // 得到配置
public ServletConfig getServletConfig() {
return null;
}
@Override // 得到信息
public String getServletInfo() {
return null;
}
}
💕继承式开发
package com.xyz.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/test.do") //直接填访问路径
public class MyServlet extends HttpServlet{
//不同的请求方式
//doGet 专门处理get请求
//doPost 专门处理post请求
//<a href="baidu.jsp">xx</a> 【get】
//location.href='baidu.jsp' 【get】
//表单默认是get,可以改成post
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//登录功能
req.setCharacterEncoding("utf-8");
//设置编码
//【utf-8】【gb2312】【big5】支持中文的编码
resp.setCharacterEncoding("gb2312");
//取到用户数据
String username = req.getParameter("username");
String password = req.getParameter("password");
//通过响应对象获取了输出对象
PrintWriter out=resp.getWriter();
//通过请求对象取session
HttpSession session = req.getSession();
//通过请求对象取application
ServletContext application = req.getServletContext();
if("root".equals(username)&&"root123".equals(password)) {
out.print("登录成功");
}else {
out.print("登录失败");
}
}
}
【utf-8】【gb2312】【big5】支持中文的编码
💕servlet的配置
💗配置式开发
需要在web.xml中配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>web-10</display-name>
<!-- web.xml是整个项目的配置文件 -->
<!-- web.xml如果被修改,服务器必须重启 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 1.配置servlet -->
<servlet>
<!-- 给它取个名字 -->
<servlet-name>one</servlet-name>
<!-- servlet-class 需要填上类的全路径 -->
<servlet-class>com.xyz.servlet.LoginServlet</servlet-class>
</servlet>
<!-- 2.配置servlet的访问路径 -->
<!-- mapping 映射 -->
<servlet-mapping>
<!-- 对应的servlet的名字 -->
<servlet-name>one</servlet-name>
<!-- 给它配置一个访问的路径 -->
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
</web-app>
💗注解式开发
@WebServlet("/test.do") //直接填访问路径
servlet就讲解到这啦