servlet定位图以及核心作用
当用户输入url的时候,他的访问步骤依次如下
Servlet标准 API核心包
Servlet API有以下3个Java包:
- javax.servlet(重点):其中包含定义Servlet和Servlet容器之间的类和接口
- javax.servlet.http(重点):其中包含定义HTTP Servlet和Servlet容器之间的类和接口
- javax.servlet.annotation:其中包含标注Servlet,Filter,Listener的注解
servlet客户端HTTP请求
- 客户端Request常见报头
当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP请求的头的一部分进行传输的
- 操作HTTP Request头的方法
下面的方法可用早servlet程序读取HTTP头,这些方法通过 HttpServletRequest 对象使用
代码示例
1.首先在webapp下创建一个静态文件requestTest.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--创建一个form表单,用于给servlet发送请求-->
<!--请求动作可以是get也可以是post,然后我们这里请求到request,那么我们就需要创建一个request路由-->
<form action="Get" action="request">
<input name="uname" placeholder="请输入用户名">
<input type="submit" value=" 提 交 ">
</form>
</body>
</html>
2.写动态的servlet,那么就需要在两个地方进行写入
- 创建一个servlet后端类
- 在web.xml配置一组路由信息
2.1首先写后端类requestServlet
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//必须继承HttpServlet
public class requestServlet extends HttpServlet {
//重写doGet()方法和doPost()方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//拿到参数的值
String uname = req.getParameter("uname");
//拿到request的方法
String methed = req.getMethod();
//得到url
String url = req.getContextPath();
//获取协议的名称
String pocl = req.getProtocol();
//获取编码
String encoding = req.getCharacterEncoding();
//然后把这些内容写回给客户端,首先设置编码格式和类型,然后再是返回的内容
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
writer.println(String.format("<h1>请求参数: %s</h1>",uname));
writer.println(String.format("<h2>method: %s</h2>",methed));
writer.println(String.format("<h3>url: %s</h3>",url));
writer.println(String.format("<h4>协议名称pocl: %s</h4>",pocl));
writer.println(String.format("<h5>编码encoding: %s</h5>",encoding));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//我们让doPost方法直接调用doGet方法
this.doGet(req,resp);
}
}
2.2 在web.xml配置一组路由信息
<servlet>
<servlet-name>reqServlet</servlet-name>
<servlet-class>requestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>reqServlet</servlet-name>
<url-pattern>/request</url-pattern>
</servlet-mapping>
验证结果
Servlet服务器HTTP响应
服务器端Response常见报头
操作HTTP Response头的方法
代码案例:
如拿到当前的时间,然后每隔一秒进行一次刷新操作
步骤:
1.创建一个servlet后端类
2.在web.xml配置一组路由信息
后端类代码
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
public class MyResponseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//刷新操作,设置成1s刷新一次
resp.setIntHeader("Refresh",1);
//设置响应类型
resp.setContentType("text/html");
//设置编码格式,如果不设置会出现乱码
resp.setCharacterEncoding("utf-8");
//写入body信息
PrintWriter writer = resp.getWriter();
writer.println(String.format("<h1>当前时间: %s</h1>",new Date()));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
配置web.xml
<servlet>
<servlet-name>myResponseServlet</servlet-name>
<servlet-class>MyResponseServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myResponseServlet</servlet-name>
<url-pattern>/response</url-pattern>
</servlet-mapping>
然后进行打包部署到Tomcat上,进行访问
简单实现一个404页面
在当我们访问一个页面的时候,输入的url是无效的就会出现404错误,比如最简单的就是出现一个
比如上图中右边的404页面如何显示在我们的servlet中呢?
步骤:
- 因为这张图面是一个静态页面,而所有静态的资源都放在webapp下,那么我们就在webapp下创建一个包(imgs)来存放你的这张静态页面
- 然后创建一个servlet后端类
- 配置web.xml文件
- 打包部署到Tomcat上
1.首先将这张静态页面保存在webapp下
2.创建一个servlet后端类
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class NotFountServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(404);
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.println("<img src = 'http://localhost:8080/responseTest/imgs/404.png' />");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
}
3.配置web.xml文件
<servlet>
<servlet-name>notFountServlet</servlet-name>
<servlet-class>NotFountServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>notFountServlet</servlet-name>
<url-pattern>/404</url-pattern>
</servlet-mapping>
4.打包部署,然后验证结果
感兴趣的话可以通过抓包工具进行抓包查看
转载:https://blog.csdn.net/wkh18891843165/article/details/116637050
查看评论