搜索
首页
笔记
案例
关于
课程列表
JavaWeb
Tomcat安装、部署等操作
Servlet
JSP
EL表达式与JSTL标签库
文件上传与下载
cookie与session
Filter过滤器
Listener监听器
ThreadLocal
Gson
课程导航
计算机基础知识
C
Linux
linux常用软件
计算机网络
程序员修养
设计模式
工具
Git
composer
vim
IntelliJ IDEA
wireshark
laravel
Spring
SpringMVC
Maven
数据库
MySQL
Redis
MongoDB
JDBC
Mybatis
MyBatis-Plus
服务端编程
PHP
Java
shell script
JavaWeb
HTML / CSS
HTML
CSS
HTML5
CSS3
BOOTSTRAP
JavaScript
JavaScript
JQuery
layui
Tomcat安装、部署等操作
JSP
Servlet
## 一、Servlet技术 ### 什么是 Servlet 1、Servlet 是 JavaEE 规范之一。规范就是接口 2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。 3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。 b)手动实现 Servlet 程序 ### 手动实现Servlet程序 1、编写一个类去实现 Servlet 接口 2、实现 service 方法,处理请求,并响应数据 3、到 web.xml 中去配置 servlet 程序的访问地址 Servlet 程序的示例代码: ```java package com.javaweb.servlet; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; public class HelloServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("我会在控制台中显示"); HttpServletRequest request = (HttpServletRequest) servletRequest; if ("GET".equals(request.getMethod())) { System.out.println("get"); } else if ("POST".equals(request.getMethod())) { System.out.println("post"); } } @Override public String getServletInfo() { return null; } @Override public void destroy() { } } ``` web.xml配置信息: ```
HelloServlet
com.javaweb.servlet.HelloServlet
HelloServlet
/hello
``` ### url 地址到 Servlet 程序的访问 ![](https://www.1024phper.com/wp-content/uploads/2021/03/QQ截图20210324153757.png) ### Servlet生命周期 1、执行 Servlet 构造器方法 2、执行 init 初始化方法 第一、二步,是在第一次访问的时候创建 Servlet 程序会调用。 3、执行 service 方法 第三步,每次访问都会调用。 4、执行 destroy 销毁方法 第四步,在 web 工程停止的时候调用。 ### GET 和 POST 请求的分发处理 ```java @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("我会在控制台中显示"); HttpServletRequest request = (HttpServletRequest) servletRequest; if ("GET".equals(request.getMethod())) { System.out.println("get"); } else if ("POST".equals(request.getMethod())) { System.out.println("post"); } } ``` ### 通过继承 HttpServlet 实现 Servlet 程序 一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。 1、编写一个类去继承 HttpServlet 类 2、根据业务需要重写 doGet 或 doPost 方法 3、到 web.xml 中的配置 Servlet 程序的访问地址 ### 使用 IDEA 创建 Servlet 程序 略 ### Servlet 类的继承体系 ![](https://www.1024phper.com/wp-content/uploads/2021/03/QQ截图20210324154730.png) ## 二、ServletConfig 类 Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。 Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象。 ### ServletConfig 类的三大作用 1、可以获取 Servlet 程序的别名 servlet-name 的值 2、获取初始化参数 init-param 3、获取 ServletContext 对象 ```
HelloServlet2
com.javaweb.servlet.HelloServlet2
version
1.1
url
hello2
……
``` ```java package com.javaweb.servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HelloServlet2 extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException { super.init(config); // 重写init必须调用父类的init方法 System.out.println(config.getServletName()); System.out.println(config.getInitParameter("version")); System.out.println(config.getInitParameter("url")); System.out.println(config.getServletContext()); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("post"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("get"); // 通过getServletConfig获取servletConfig ServletConfig servletConfig = getServletConfig(); System.out.println(servletConfig.getServletName()); } } ``` ## 三、ServletContext 类 ### 什么是 ServletContext? 1、ServletContext 是一个接口,它表示 Servlet 上下文对象 2、一个 web 工程,只有一个 ServletContext 对象实例。 3、ServletContext 对象是一个域对象。 4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。 什么是域对象? 域对象,是可以像 Map 一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,ServletContext 存取范围是整个 web 工程。 | | 存数据 | 取数据 | 删除数据 | | ------ | ------------ | ------------ | --------------- | | map | put | get | remove | | 域对象 | setAttribute | getAttribute | removeAttribute | ### ServletContext 类的四个作用 1、获取 web.xml 中配置的上下文参数 context-param 2、获取当前的工程路径,格式: /工程路径 3、获取工程部署后在服务器硬盘上的绝对路径 4、像 Map 一样存取数据 ```
session_prefix
javaweb_
devlp_name
kf
devlp_pass
woai6262
…… ``` ```java ServletContext context = getServletContext(); // 获取配置信息中context-param String devlp_name = context.getInitParameter("devlp_name"); String devlp_pass = context.getInitParameter("devlp_pass"); System.out.println("name:"+devlp_name+",pass:"+devlp_pass); // 工程路径 System.out.println( " 当前工程路径:" + context.getContextPath() ); // 绝对路径 System.out.println(" 工程部署的绝对路径是:" + context.getRealPath("/")); System.out.println(" 工程部署图片的绝对路径是:" + context.getRealPath("/img")); ``` ## 四、HttpServletRequest类 每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过HttpServletRequest 对象,获取到所有请求的信息。 ### HttpServletRequest 类的常用方法 - getRequestURI() 获取请求的资源路径 - getRequestURL() 获取请求的统一资源定位符(绝对路径) - getRemoteHost() 获取客户端的 ip 地址 - getHeader() 获取请求头 - getParameter() 获取请求的参数 - getParameterValues() 获取请求的参数(多个值的时候使用) - getMethod() 获取请求的方式 GET 或 POST - setAttribute(key, value); 设置域数据 - getAttribute(key); 获取域数据 - getRequestDispatcher() 获取请求转发对象 ### 获取请求参数 ```
用户名:
密码:
兴趣爱好:
C++
Java
JavaScript
``` ```java // 获取请求参数 String username = req.getParameter("username"); String password = req.getParameter("password"); String[] hobby = req.getParameterValues("hobby"); ``` ### 乱码问题解决 ``` request.setCharacterEncoding("UTF-8"); // 解决请求乱码问题 response.setContentType("UTF-8"); // 解决响应乱码问题 ``` ### 请求转发 请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。注意:请求转发和重定向的区别。重定向浏览器地址栏地址会改变,而请求转发不会改变浏览器地址栏地址。 ```java request.getRequestDispatcher("/client/bookServlet").forward(resquest, response); ``` ### base 标签的作用 base标签可以设置当前页面中所有相对路径工作时,参照哪个路径来进场跳转。 ### Web中的相对路径与绝对路径 相对路径: * ./a/b/c.html * ../a/b/ * a/b/c.html 绝对路径: * http://baidu.com/a/b/c.html ### web中/斜杆的不同意义 在 web 中 / 斜杠 是一种绝对路径 / 斜杠 如果被浏览器解析,得到的地址是:http://ip:port/。如 ```
新闻资讯
得到地址是http://ip:port/news ``` ------ / 斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程路径 ``` 1、
/servlet1
2、servletContext.getRealPath(“/”); 3、request.getRequestDispatcher(“/”); ``` 特殊情况(请求重定向):response.sendRediect(“/”); 把斜杠发送给浏览器解析。得到 http://ip:port/ ## 五、HttpServletResponse 类 HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传递给 Servlet 程序去使用。HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息, 我们如果需要设置返回给客户端的信息,就可以通过 HttpServletResponse 对象来进行设置。 ### 两个输出流的说明 字节流 getOutputStream(); 常用于下载(传递二进制数据) 字符流 getWriter(); 常用于回传字符串(常用) 两个流同时只能使用一个。使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。 ### 如何往客户端回传数据 ``` PrintWriter writer = resp.getWriter(); writer.write("response's content!!!"); ``` ### 请求重定向 有两种办法可以设置重定向。 方案一、 ``` resp.setStatus(302); resp.setHeader("Location:", "http://localhost/"); ``` 方案二、 ``` resp.sendRedirect("http://localhost:8080"); ```
Tomcat安装、部署等操作
JSP
文章目录