文章目录
一、Servlet是什么
Server + Applet,是一种服务器端的Java应用程序。
只有当一个服务器端的程序使用了Servlet API的时候,这个服务端的程序才能称之为Servlet。
二、为什么要用Servlet
由于JSP页面过于杂乱,分离显示和业务逻辑显然更合适 → JSP负责显示,Servlet负责控制。
三、Servlet做了什么?
- 本身不做任何业务处理
- 只是接收请求并决定调用哪个JavaBean去处理请求
- 确定用哪个页面来显示处理返回的数据
四、Servlet API
5.1 主要Servlet API介绍
- javax.servlet.Servlet 接口:
所有 Java Servlet 的基础接口类,规定了必须由 Servlet 具体类实现的方法集。 - javax.servlet.GenericServlet 类
是 Servlet 的通用版本,是一种与协议无关的 Servlet 。 - javax.servlet.http.HttpServlet类
在 GenericServlet 基础上扩展的基于 Http 协议的 Servlet 。
5.2 如何创建Servlet
- 实现Servlet接口
- 继承GenericServlet类
- 继承HttpServlet类
五、Servlet中主要方法
- init():Servlet的初始化方法,仅仅会执行一次
- service():处理请求和生成响应
- destroy():在服务器停止并且程序中的Servlet对象不再使用的时候调用,只执行一次
- ServletRequest
封装客户的请求信息
作用相当于JSP内置对象request - ServletResponse
创建响应信息,将处理结果返回给客户端
作用相当于JSP内置对象response - ServletConfig:包含了servlet的初始化参数信息
六、Servlet生命周期
- 加载和实例化
- 初始化
- 处理请求
- 销毁
七、Servlet部署与运行
7.1 新手上路的部署
- 修改web.xml(部署描述文件)
添加<servlet>:把Servlet内部名映射到一个Servlet类名。
添加<servlet-mapping>:把用户访问的URL映射到Servlet的内。 - 通过URL访问Servlet
注意:<servlet-mapping>与<servlet>中的<servlet-name>必须一致。
7.2 快捷部署
一键完成三个操作:
- 创建普通类
- 继承 Servlet 并重写方法
- 在 web.xml 中绑定
八、简单的使用Servlet登陆示例
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
<%
String userName="";
Cookie[] cookies = request.getCookies();
if(cookies != null && cookies.length>0){
for(Cookie c : cookies){
if("userName".equals(c.getName())){
userName = c.getValue();
}
}
}
%>
</head>
<body>
<form action="/day_0906_web5/loginServlet" method="post">
姓名:<input type="text" name="userName" value="<%=userName %>" /><br />
密码:<input type="password" name="userPassword" /><br />
<input type="submit" value="subMe!" />
</form>
</body>
</html>
welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>欢迎</title>
</head>
<body>
<h1>欢迎您!<%=session.getAttribute("userName") %></h1>
</body>
</html>
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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>day_0906_web5</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- servlet是写好了,但是你要告诉同名tomcat这里有个servlet要进行处理 -->
<servlet>
<servlet-name>loginServlet</servlet-name> <!-- 起个名字 -->
<servlet-class>servlet.LoginServlet</servlet-class> <!-- 指定你要声明的servlet -->
</servlet>
<!-- 定义跳转,绑定servlet -->
<servlet-mapping>
<servlet-name>loginServlet</servlet-name> <!-- 找到你指定的servlet -->
<url-pattern>/loginServlet</url-pattern> <!-- 是你的请求地址 -->
</servlet-mapping>
</web-app>
LoginServlet.java
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 在jsp页面上存在多种代码:
* html:必须有的,少不掉
* css:link标签链接出去
* javascript:src属性也链接出去(js)
* java:1、用来显示的,读取cookie的:必须有的
* 2、用来处理业务逻辑和数据库交互等 login.jsp:用servlet分离出去
*/
/**
* 如果要让一个普通的类变成servlet
* 就要让继承javax.servlet.http.HttpServlet
* @author Sowhite
*
*/
public class LoginServlet extends HttpServlet {
/**
* 这个方法就是专门用来处理get方式的请求,所有的get请求都会被传递到这个方法内
* 你所需要的request和response作为参数传递进来了,你只要用就可以了
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 无论是get还是post都能到达这行代码
// System.out.println("我是servlet,我被访问了! ");
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
// 从表单获取数据
String userName = req.getParameter("userName");
String userPassword = req.getParameter("userPassword");
if("jack".equals(userName) && "333".equals(userPassword)) {
// cookie
Cookie cookie = new Cookie("userName", userName);
cookie.setMaxAge(60*5);
resp.addCookie(cookie);
// session 在servlet中是问req拿的
HttpSession session = req.getSession();
session.setAttribute("userName", userName);
// 将数据传递给下一个页面
resp.sendRedirect("/day_0906_web5/welcome.jsp");
}else {
resp.sendRedirect("/day_0906_web5");
}
}
/**
* 专门处理post请求
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
效果:
index.jsp
welcome.jsp
推荐一篇更详细的博客:https://blog.csdn.net/qq_19782019/article/details/80292110