Servlet详解
Servlet简介
动态资源和静态资源
静态资源,无需在程序运行时通过代码产生的资源,在程序运行之前就写好的资源,例如html、css、js、img的文件
动态资源,需要在程序运行时通过代码生成的资源,在程序运行之前无法确定的数据,运行时动态产生,
在动态资源,请求报文给服务端传送不同的参数,后端的Java代码根据不同的的参数响应给前端不同数据,数据通过tomcat转换成响应报文发送给前端
举个栗子,买蛋糕,需要定做的就是动态资源,直接购买现成的就是静态资源
Servlet运行流程
Servlet开发流程
需求:这里我们的需求是如果用户在用户名那一栏输入张三,就返回No,输入其他就返回Yes
1.首先创建一个JavaWeb工程,前面的文章讲过如何创建JavaWeb工程,不会的友友们可以看前面的那篇
2.在Web目录下建一个html文件,写出简单的前端代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="" method="get">
用户名:<input type="text" name="username">
<input type="submit" value="校验">
</form>>
</body>
</html>
3.在src里写一段Java代码,来满足需求,下面是后端代码:
package com.atguigu.servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//这里是要实现Servlet的接口,但是Servlet接口里面的方法太多了,这里通过继承HttpServlet来重写service方法
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");//获取username的内容
String info="Yes";
if("zhangsan".equals(username)) {
info = "No";
}
info="Yes";
PrintWriter writer = resp.getWriter();//输入流
writer.write(info);//将返回的info写入
}
}
这些做完就需要进行配置文件
xml文件配置方式
WEB-INF-web.xml文件中,在的标签下写
<!--设置xml文档
<servlet>下的<servlet-name>里面包含的是包含service方法的类名(tomcat会自动为UserServlet类创建一个对象调用service方法)
<servlet>下的<servlet-class>里面包含的是UserServlet类的文件路径
<servlet-mapping>下的<servlet-name>包含的也是UserServlet的类名
<servlet-mappig>下的<url-pattern>包含的是url里面要输入的东西,这里可以自己随便起名,(我这里见闻之意),但是要有一个"/"
-->
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.atguigu.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/userservlet</url-pattern>
</servlet-mapping>
这里我说一下这个配置文件的逻辑顺序,标签下的UserServlet中Userservlet是一个别名,下的UserServlet中的UserServlet也是一个别名,但这两个别名要一致,这个是通过标签下的 /userservlet的内容找到下的UserServlet然后根据这个别名再找到,标签下的UserServlet,再根据这个找到com.atguigu.servlet.UserServlet,tomcat再利用反射创建对象完成下面的操作。
这里 /userservlet里面写的是映射路径,可以写多个
servlet-maping标签下url-pattern中的命名格式
/xxx
这是精确匹配的格式,xxx是什么再网址上面搜即可
/
这是匹配全部,但是不包含jsp文件
/*
这是匹配全部,包含jsp文件
/a/*
这是匹配前缀,后缀随便,前面必须以/a开头,后面可以随便
*.action
这是匹配后缀,前缀随便,前面随便,后面必须以.action结尾
注解方式配置
直接在重写service()方法的类前面加上 @WebServlet(“/(映射路径)”),和上面的映射路径一样,这里可以以数组的形式写多个,但是一般在开发的时候,只写一个。
缀随便,前面随便,后面必须以.action结尾
注解方式配置
直接在重写service()方法的类前面加上 @WebServlet(“/(映射路径)”),和上面的映射路径一样,这里可以以数组的形式写多个,但是一般在开发的时候,只写一个。