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);
    }
相关推荐
码农的小菜园3 小时前
gradle常用指令使用笔记
笔记
鸟电波4 小时前
硬件笔记——示波器篇
笔记
Don.TIk4 小时前
SpringCloud学习笔记
笔记·学习·spring cloud
cd11840515 小时前
AutoCAD Electrical 2020学习笔记
笔记·学习
Sarvartha6 小时前
递归、回溯与动态规划学习笔记
笔记·学习·动态规划
眼镜哥(with glasses)6 小时前
网络技术三级考试综合题笔记整理(第二题、第三题)
网络·笔记·智能路由器
半壶清水7 小时前
[软考网规考点笔记]-数据通信基础之差错控制编码技术
网络·笔记·网络协议·tcp/ip
左左右右左右摇晃7 小时前
Java List集合
笔记
OxyTheCrack7 小时前
【C++】详细拆解std::mutex的底层原理
linux·开发语言·c++·笔记
左左右右左右摇晃7 小时前
红黑树笔记整理
笔记