一. Servlet是什么?
Servlet是Server Applet的简称,也就是服务程序。当然,杨哥习惯称它为"服务连接器"。
像上面这么说,大家可能会有所疑惑:什么是服务程序?可能有些人对这个还是不太懂,那么接下来杨哥就带大家认识下这个服务器程序。Servlet是运行在服务器上的一个小程序,用来处理服务器请求,主要就是通过在浏览器中输入网络地址进行访问来实现的。在这整个访问过程中,我们通过浏览器发送访问请求,服务器接收请求,服务器完成后端的一些处理操作,最后服务器将信息反馈(响应)给浏览器。这种处理模式,也就是我们常说的B/S软件结构,即浏览器和服务器端的交互模式。
杨哥给大家总结一下:Servlet是对请求作出处理的一种组件。它运行在服务器之上,当然这个服务器能够支持Java。
我们来张图片看,会更容易理解一些。
二. Servlet开发后端服务程序
接下来,杨哥会带领大家进入Servlet的开发流程。
2.1 创建Maven项目
我们先创建一个Maven项目,杨哥在idea中给大家进行创建。
这里文末要选择一个servlet的jar包。
2.2 配置自己的maven本地仓库
此处,杨哥以自己的本地地址仓库为例,在File--->Settings 里面设置。
三. 编码实现
有些同学在编码时会觉得很懵圈,我明明和杨哥的代码一样,为啥我的servlet就不能运行呢?其实这还是不细心导致的!我们在写代码时应该全神贯注、仔细认真!杨哥给大家总结出一个开发Servlet的流程,"一类,二配,三编,四运行"!
3.1 一类
所谓的”一类“,就是要自定义一个Java类,继承自HttpServlet,并重写doGet和doPost方法。
package com.qf.servletdemo;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author 高圆圆
* @date 2022/10/17 19:37
*/
public class MyFirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
杨哥提醒:doGet方法会接收前端的get请求,doPost方法会接收前端的post请求。这两个方法在接收前端传递过来的参数时,处理方式是一样的,所以doGet或者doPost方法中都可以去调用对方。
3.2 二配
所谓的”二配“,就是在项目下的web.xml 文件中配置Servlet。
我们需要配置servlet-name,建议和当前类名相同即可。还有servlet-mapping进行映射配置,里面的servlet名称和上面一致;url-pattern以"/"开头,一般要做到见名知意,就是服务器的后端地址。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>MyFirstServlet</servlet-name>
<servlet-class>com.qf.servletdemo.MyFirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
</web-app>
3.3 三编
所谓的”三编“,就是要在代码中处理前端发来的请求,编写相关代码。此处杨哥仅仅是做一个简单的测试案例,实际开发时,代码可能会比较复杂。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决服务器响应的中文乱码
resp.setContentType("text/html;charset=utf-8");
//处理前端的相关操作
//...
System.out.println("hello,Servlet") ;
//响应给浏览器信息
resp.getWriter().write("hello,这是我第一个Servlet");
}
3.4 四运行
所谓的”四运行“,就是在创建项目时,生成我们项目的上下文路径。杨哥以这个项目为例:
http://localhost:8080/servlet_demo_war_exploded/
启动服务器之后,在这个url地址后面,跟上我们的后端地址,通过浏览器直接请求服务器,服务器会给我们返回响应:"hello,这是我第一个Servlet"
控制台会打印信息如下:
四. Servlet应用
刚才是使用xml实现的Servlet配置,但在实际应用中,我们还可以使用@WebServlet注解进行配置开发。
4.1 登录页面
这里的action就是我们请求后端的地址。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="/servlet_demo_war_exploded/login" method="get">
<input type="text" name="username" placeholder="请输入用户名" /><br/>
<input type="password" name="password" placeholder="请输入密码" /><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
4.2 编写后端程序Servlet
杨哥提醒:此时我们使用@WebServlet注解的方式,代码量会更少,但xml配置是能够体现最原理性的东西,注解方式只是进行了优化。
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接收前端的参数
String username = req.getParameter("username");
String password = req.getParameter("password");
//测试
System.out.println(username+"---"+password);
}
}
4.3 启动运行,访问前端登录页面
用户输入用户名和密码,请求后端地址后,会在控制台输出用户名和密码。我们就可以通过用户名和密码去连接访问数据库,来获取用户的信息。此处,具体的业务操作杨哥就不举例了。
好吧,大家可能又有疑惑了,杨哥代码中的用户名为啥写的是高圆圆?这个......大家自己去猜吧!