一.servlet简介
1.sun公司在API中提供一个接口叫做:Servlet,能够实现网页动态跳转,
2.是一种动态网页技术,也把实现看servlet的接口的程序叫做Servlet.
3.本质上是一个能接收到网页请求(request),然后做出网页反应和实际回复(response)输出的类.依托于HTTP协议进行工作的类.
二.实现思路
编写servlet,在web容器中注册这个servlet及其链接,通过访问链接来执行编写的servlet的工作.
三.实现原理
servlet是一个sun提供的接口其中包含着一个方法(方法能够处理请求和响应);从浏览器提出响应,存入web容器,web容器构建两个对象分别是请求和响应,两者传入servlet中的方法中,对其进行处理,并返回响应内容,web容器继续获得响应然后将其传到浏览器
在servlet接口中我们可以对其中的service方法进行实现,其中调用了doget,dopost方法等等:我们可以对doget,dopost方法进行重写,达到我们修改servlet的作用
以我的第一个servlet为例:
一.构建一个maven项目,然后给其添加web框架支持
(当然也可以构建一个maven项目,并且删除src(java的配置文件),把此工程当作父亲工程,2.在父工程中添加模块(model),添加webapp模块,并为你的模块命名)
二.导入servlet相关的java包依赖
<dependencies> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> </dependency> </dependencies>
三.做maven环境优化(web.xml中设置改为最新)
刚建立的普通maven的web项目中的web.xml如下:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> </web-app>
将其修改为:
<?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" metadata-complete="true"> </web-app>
四.在你的项目里编写属于你的servlet
(在src/main/java文件夹中建立servlet类,一般情况是重写doGet方法,或doPost方法来实现请求体和回复体的传递)
public class MyServlet extends HttpServlet { //get和post只是请求实现的不同方式但逻辑一样,可以互相调用 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //super.doGet(req, resp); System.out.println("调用了此servlet的doget 方法"); PrintWriter writer = resp.getWriter();//响应流 writer.println("hello servlet");//让页面输出响应流中的内容 } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } }
五.编写servlet映射,在服务器中注册我们写的servlet,和我们写的servlet程序的路径
(在src/main/webapp/WEB_INF/web.xml文件中添加我们的servlet和对应链接)
<?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" metadata-complete="true"> <!-- 注册一个servlet--> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.cs.servlet.MyServlet</servlet-class> </servlet> <!--servlet的请求路径,我们注册了多个路径--> <!--当我们访问这些路径的时候就会执行MyServlet--> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello1</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello2</url-pattern> </servlet-mapping> </web-app>
六.添加tomcat和将项目的war包放入tomcat
tips:maven4代和tomcat10不兼容
操作步骤:
mapping:
1.一个servlet可以指定一个或多个路径
2.万能路径*,指定前后缀
3.指定了固有映射路径的优先级最高,万能路径情况下访问指定路径会进入指定路径
servletContext:
1.web容器在启动时,它会为每一个web程序都创建一个对应的servletContext对象(独立公共对象),它代表当前的web.
2.利用servletContext;实现访问跳转;当浏览器从映射地址A时,A所指对象其中有请求转发的代码块(代码块指向另一样对象的映射地址B),此时访问A如同访问B
servletRespones:
1.web服务器接收到客服端的请求,会创建两个对象分别为HttpServletRequest和HttpServletResponse,作用分别为包含客服端的参数的对象,包含响应给客服端的信息的对象
2.常见应用:
(1).向浏览器输出消息
(2).下载文件
(获取文件路径,下载文件名是什么,让浏览器支持下载我们所需的东西,获取下载文件的输入流,创建缓冲区,获得OutputStream对象,将流写入到buffer,将缓冲区中的数据输出的客户端)
(3).验证码
(4).重定向
servletResquset:
1.代表客服端的请求的对象;HTTP中的请求中的所有信息会被封装到HttpServletRequset对象中.通过此对象的方法,可以获得客服端请求的所有信息.
2.常见应用:
获取前端传过来的参数,给后端处理
req.getParmater(“name”)
req.getParmaterValue(“name”)