Servlet

    技术2022-08-11  99

    Servlet

    6.1 Servlet简介

    Servlet是sun公司开发动态web的一门技术SUN公司在API中提供一个接口叫做:Servlet,开发一个Servlet程序 需要两个步骤 编写一个JAVA类,实现Servlet接口把开发好的java类 部署到web服务器中

    我们把实现了Servlet接口的java程序叫做 Servlet

    6.2 实现Hello Servlet

    Servlet接口在SUN公司有两个实现类 :HttpServlet ,GenericServlet

    1.构建一个普通的Maven项目并且导入servlet和jsp依赖

    MAVEN servlet和jsp依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency>

    2.删掉里面的src目录 在项目中建立Moudle子项目 (这个子项目为mavenweb项目)

    父项目中有

    <modules> <module>servlet01</module> </modules>

    子项目中有

    <parent> <artifactId>javaweb01-servlet</artifactId> <groupId>com.lei</groupId> <version>1.0-SNAPSHOT</version> </parent>

    子项目可以使用父项目中导入的jar包。

    3.在子项目中新建 java和resources文件夹

    java文件夹里面写Servlet程序 :resources文件夹中放资源

    4.更换web.xml为最新版本 匹配Tomcat

    注意:如果web.xml与Tomcat不兼容 无法运行Tomcat服务器

    <?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"> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> </web-app>

    5.编写一个Servlet程序

    ​ 1.编写一个普通类

    ​ 2.实现Servlet接口

    package com.lei.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 servlet extends HttpServlet { //由于get和post只是请求实现的不同方式,可以相互调用,业务逻辑相同 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); //响应流 writer.print("Hello,Servlet"); } @Override protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } }

    6.编写Servlet的映射

    原因:我们写的是JAVA程序 ,但是要通过浏览器访问 ,浏览器需要连接到WEB服务器

    所以我们要在WEB服务器中注册我们写的Servlet程序,还需要给他一个浏览器能够访问的路径。

    如图在web.xml文件中映射Servlet程序

    7.配置Tomcat服务器

    上图启动成功

    6.3 Servlet 原理

    6.4 Mapping问题

    1.一个Servlet可以指定一个映射路径 2.一个Servlet可以指定多个映射路径

    通过这些路径访问同一个Servlet 接口

    3.一个Servlet可以指定一个通用映射路径

    6.5 ServletContext

    web容器在启动的时候,它会为每个web程序都创建一个ServletContext对象,它代表了当前的web应用:

    6.5.1 共享数据

    共享数据 首先设置一个放置数据的Servlet设置一个读取数据的Servlet映射到服务器上

    ServletContext是凌驾于所有Servlet对象上的一个对象。

    所有Servlet共享同一个ServletContext对象 因此我们可以通过ServletContext容器实现 Servlet之间的数据互通。

    1.首先创造两个Servlet对象

    2.在HelloServlet这个对象中 获取ServletContext对象 并传递一些信息

    把一个数据存在 ServletContext中 名为 un ,值为username

    public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("Hello"); //this.getInitParameter() 初始化参数 //this.getServletConfig() Servlet 配置 //this.getServletContext() Servlet 上下文对象 ServletContext sc1 = this.getServletContext(); String username="若邪"; sc1.setAttribute("un",username);// 把一个数据存在 ServletContext中 名为 un ,值为username }

    3.在UserServlet中 获取这个值 并输出在服务器上

    测试访问结果

    6.5.2 获取初始化参数

    1.在web.xml中配置初始化参数

    2.通过ServletContext获取初始化参数

    3.输出结果

    6.5.3 请求转发(与 重定向不同)

    上面是请求转发 :A访问B B把C的内容转发给A

    下图是重定向:A访问B B让A去访问C

    把请求转发的路径设置为/s

    public class Servlet004 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); RequestDispatcher requestDispatcher =context.getRequestDispatcher("/s");//请求转发的路径 requestDispatcher.forward(req,resp); // 可以合并成 context.getRequestDispatcher("/s").forward(req,resp); }

    这样你访问该路径 就会转移到/s路径下的内容

    6.5.4 资源导出

    Properties

    在java目录下新建Properties在resourcrs目录下新建Properties

    都放在classes /classpath路径下

    在Servlet中获取资源

    结果导出

    Processed: 0.020, SQL: 9