JavaWeb笔记_Servlet补充

一.Servlet相关注解

html 复制代码
 ```text
  1.注解名称
     @WebServlet
  2.该注解使用前提
    Tomcat服务器需要支持servlet 3.0以上的规范才能使用该注解
  3.@WebServlet使用
    简化Servlet在web.xml中的配置
      <servlet>
          <servlet-name>ServletDemo01</servlet-name>
          <servlet-class>servlet01.ServletDemo01</servlet-class>
      </servlet>

      <servlet-mapping>
          <servlet-name>ServletDemo01</servlet-name>
          <url-pattern>/demo01</url-pattern>
      </servlet-mapping>
  4.@WebServlet属性
      name:指的是Servlet的名称,对应web.xml中<servlet-name>
      urlPatterns:指定Servlet映射,对应web.xml中 <url-pattern>
                  可以指定多个映射
      value:value属性和urlPatterns属性含义相同,都是指定url映射,但是如果我们在注解中只指定一个属性值,可以省略value属性名
java 复制代码
```java
/**
 * @WebServlet中的属性
 *     name:指的是Servlet的名称,对应web.xml中<servlet-name>
 *     urlPatterns:指定Servlet映射,对应web.xml中 <url-pattern>
 *     value:value属性和urlPatterns属性含义相同,都是指定url映射,但是如果我们在注解中只指定一个属性值,可以省略value属性名
 */
//@WebServlet(name = "ServletDemo01",urlPatterns = {"/ServletDemo01","/demo01"}) 正常
//@WebServlet(urlPatterns = "/ServletDemo01")   简化
@WebServlet("/ServletDemo01")     //利用value属性可以省略的特性,更为简化
public class ServletDemo01 extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         response.getWriter().write("<b>ServletDemo01</b>");
	}
}

二.修改注解创建Servlet模板

通过修改模板来简化我们的操作,不需要每次新建Servlet文件时都对@WebServlet注解进行修改

三.在IDEA中模拟HTTP请求

java 复制代码
   可以避免IDEA开发工具和浏览器之间反复切换
   新建一个http格式的文件,在里面书写GET/POST请求
   ### 模拟浏览器向指定的服务器地址发出 GET请求
   //@no-cookie-jar
   GET http://localhost:8080/day10_Response/ServletDemo01

   ###

四.ServletConfig对象

1>在web.xml中添加配置信息

html 复制代码
 1.ServletConfig对象可以用来封装一些关于Servlet配置信息
   2.两种方法
     a.在web.xml中配置初始化参数
         <servlet>
                <servlet-name>ServletConfigDemo01</servlet-name>
                <servlet-class>servletconfig01.ServletConfigDemo01</servlet-class>
                <!--在这个Servlet中配置一些初始化参数-->
                <init-param>
                    <param-name>charset</param-name>
                    <param-value>UTF-8</param-value>
                </init-param>
            </servlet>
            <servlet-mapping>
                <servlet-name>ServletConfigDemo01</servlet-name>
                <url-pattern>/config01</url-pattern>
            </servlet-mapping>
     b.通过注解方式配置Servlet初始化参数
       @WebServlet(value = "/config02",initParams = @WebInitParam(name="charset",value = "UTF-8"))
   3.获取初始化参数
      System.out.println(getServletConfig().getInitParameter("charset"));

2>在@WebServlet注解中添加配置信息

java 复制代码
/*
*  initParams = @WebInitParam(name="charset",value = "UTF-8")
*  相当于:
*     <init-param>
            <param-name>charset</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
*/
@WebServlet( value = "/ServletConfigDemo02" ,initParams = @WebInitParam(name="charest",value="GBK"))
public class ServletConfigDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //利用getServletConfig()方法获取ServletConfig对象,调用getInitParameter()方法来获取参数
        System.out.println(getServletConfig().getInitParameter("charest"));
    }
}

五.ServletContext对象

1.ServletContext代表当前web应用,每个web应用都只有唯一一个ServletContext对象

2.使用ServletContext来获取资源在硬盘上真实路径

/**

* 利用ServletContext的方法获取资源在硬盘上的真实路径

* public String getRealPath(String path):传入一个虚拟路径,返回一个资源真实路径

* InputStream getResourceAsStream(String path):传入一个虚拟路径,返回资源真实路径的输 入流

*/

注意:书写虚拟路径,以/开头,/代表当前应用

3.作为域对象使用

可以在ServletContext中存放一些key=value键值对,这些键值对可以被当前应用下的所有Servlet 共享

/**

* ServletContext对象中的方法:

* void setAttribute(String name, Object object):向ServletContext对象存入key=value键值对

* public Object getAttribute(String name):根据name(key)取出对应的value

*/

1>利用getRealPath()方法获取绝对路径,读取db.properties文件

java 复制代码
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取db.properties在硬盘的绝对路径
        String realPath = getServletContext().getRealPath("/WEB-INF/classes/db.properties");

        //通过Properties类获取db.properties里面的键值对信息
        Properties properties = new Properties();

        //利用输入流读取到db.properties文件
        FileInputStream fileInputStream = new FileInputStream(realPath);

        //将db.properties里的键值对写入到properties对象中
        properties.load(fileInputStream);
        System.out.println(properties);
    }

2>getResourceAsStream()方法读取db.properties文件

java 复制代码
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        InputStream resourceAsStream = getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        Properties properties = new Properties();
        properties.load(resourceAsStream);
        System.out.println(properties);
    }

3>利用setAttribute()方法向ServletContext对象存入key=value键值对

java 复制代码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext = getServletContext();
        String[] users = {"Jack","John","GGbond"};
        servletContext.setAttribute("username",users);
        //每个web应用都只有唯一一个ServletContext对象,所以上下两个对象实际上是同一个对象
        String[] username =(String[]) getServletContext().getAttribute("username");
        Arrays.stream(username).forEach(System.out::println);
    }
相关推荐
Yawesh_best15 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
Ccjf酷儿17 小时前
操作系统 蒋炎岩 3.硬件视角的操作系统
笔记
习习.y18 小时前
python笔记梳理以及一些题目整理
开发语言·笔记·python
在逃热干面18 小时前
(笔记)自定义 systemd 服务
笔记
DKPT20 小时前
ZGC和G1收集器相比哪个更好?
java·jvm·笔记·学习·spring
QT 小鲜肉21 小时前
【孙子兵法之上篇】001. 孙子兵法·计篇
笔记·读书·孙子兵法
星轨初途1 天前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法
QT 小鲜肉1 天前
【孙子兵法之上篇】001. 孙子兵法·计篇深度解析与现代应用
笔记·读书·孙子兵法
love530love1 天前
【笔记】ComfUI RIFEInterpolation 节点缺失问题(cupy CUDA 安装)解决方案
人工智能·windows·笔记·python·插件·comfyui
愚戏师1 天前
MySQL 数据导出
数据库·笔记·mysql