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);
    }
相关推荐
wuxuanok20 分钟前
Web后端开发-请求响应
java·开发语言·笔记·学习
诗句藏于尽头1 小时前
内网使用rustdesk搭建远程桌面详细版
笔记
蜡笔小电芯1 小时前
【C语言】指针与回调机制学习笔记
c语言·笔记·学习
丰锋ff1 小时前
瑞斯拜考研词汇课笔记
笔记
DKPT3 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
KoiHeng6 小时前
操作系统简要知识
linux·笔记
巴伦是只猫7 小时前
【机器学习笔记Ⅰ】11 多项式回归
笔记·机器学习·回归
DKPT10 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
巴伦是只猫12 小时前
【机器学习笔记Ⅰ】13 正则化代价函数
人工智能·笔记·机器学习
X_StarX18 小时前
【Unity笔记02】订阅事件-自动开门
笔记·学习·unity·游戏引擎·游戏开发·大学生