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);
    }
相关推荐
芊寻(嵌入式)16 分钟前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
准橙考典44 分钟前
怎么能更好的通过驾考呢?
人工智能·笔记·自动驾驶·汽车·学习方法
密码小丑2 小时前
11月4日(内网横向移动(一))
笔记
鸭鸭梨吖3 小时前
产品经理笔记
笔记·产品经理
齐 飞3 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
丫头,冲鸭!!!4 小时前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法
听忆.4 小时前
手机屏幕上进行OCR识别方案
笔记
Selina K5 小时前
shell脚本知识点记录
笔记·shell
5 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
霍格沃兹测试开发学社测试人社区6 小时前
软件测试学习笔记丨Flask操作数据库-数据库和表的管理
软件测试·笔记·测试开发·学习·flask