【JavaWeb】Servlet学习笔记-3

目录

一、学习前准备

二、项目中创建module后遇到的问题解决

          maven视图module名为灰白色且TomCat没有02_servlelt的war包问题的解决方式

三、ServletContext对象及其应用

        1.ServletContext是什么?

        2.利用ServletContext存取数据的简单使用(共享数据)

        3.获取初始化参数

        4.请求转发

        5.读取资源文件

四、遇到的问题解决方法

        1. 若在java文件夹中新建了properties文件没有在target中生成对应的文件,需要在pom.xml中如下设置:

        2.context.getResourceAsStream("/WEB-INF/classes/db.properties")中的地址是target中的classespath的类地址


一、学习前准备

        1.在之前的项目maven-01-servlet中新建一个module:02_servlet

        

        2.完善目录结构:在main下新建一个java文件夹和resources文件夹并分别标记为Sources Root和Resources Root。

        

        3.将pom.xml变为最干净的样子

        4.新建包并创建一个HelloServlet类继承HttpServlet类,并简单重写doGet()方法以便学习

        5.在web.xml中注册该servlet

        6.配置TomCat

        7.运行测试

二、项目中创建module后遇到的问题解决

          maven视图module名为灰白色且TomCat没有02_servlelt的war包问题的解决方式

                1.遇到问题的截图:

                

                

                2.解决方式:

                file-->settings搜索maven,选择ignored Files,可以看到02_servlet的pom.xml文件是被选中的,点击取消选中即可。

        3.解决后:

        

        

三、ServletContext对象及其应用

        1.ServletContext是什么?

        ServletContext凌驾于所有Servlet之上,它可以用来保存一些数据,该项目中的所有Servlet都可以去获取这些数据

        2.利用ServletContext存取数据的简单使用(共享数据)

        ①.在HelloServlet中获取ServletContext对象并用其来保存一些数据

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //用getServletContext()方法获取ServletContext对象
        ServletContext context = this.getServletContext();
        //自定义一个字符串数据
        String str = "JavaWeb学习";
        //使用context调用setAttribute()方法保存数据
        context.setAttribute("str",str);
    }
}

        ②.新建一个GetServlet程序去获取保存的数据

        GetServlet.java:

public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext context = this.getServletContext();
        //利用getAttribute()方法获取数据
        String str = (String) context.getAttribute("str");
        //设置响应体的内容
        resp.setContentType("text/html");
        //设置响应的字符集为utf-8
        resp.setCharacterEncoding("utf-8");
        //打印数据
        resp.getWriter().println(str);
    }
}

        web.xml:

    <!--注册HelloServlet-->
    <servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/helloServlet</url-pattern>
    </servlet-mapping>
    <!--注册GetServlet-->
    <servlet>
        <servlet-name>GetServlet</servlet-name>
        <servlet-class>com.kuang.servlet.GetServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>GetServlet</servlet-name>
        <url-pattern>/getServlet</url-pattern>
    </servlet-mapping>

        ③.获取数据结果

       

                注意:要获取数据必须要先保存数据,因此要先访问HelloServlet程序保存了数据再访问GetServlet程序才能获取数据

        3.获取初始化参数

                ServletContext的setInitParameter()可以设置一些初始化参数,通过getIninParameter()方法去获取。并且getInitParameter()不仅可以获取通过setInitParameter()设置的参数还可以获取web.xml中设置的初始化参数。

                ①.在web.xml中设置初始化参数

    <context-param>
        <param-name>name</param-name>
        <param-value>kuangstudy.com</param-value>
    </context-param>

                ③.在GetServlet中去获取初始化参数

public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext context = this.getServletContext();    
        //获取web.xml中的初始化参数
        String url = context.getInitParameter("url");
        //设置响应体的内容
        resp.setContentType("text/html");
        //设置响应的字符集为utf-8
        resp.setCharacterEncoding("utf-8");
        //打印数据
        resp.getWriter().println("web.xml中:" + url);
    }
}

                ④.获取结果

                

                注意:上下文初始化后无法设置初始化参数

        4.请求转发

                1.原理:A要去请求C的资源时,B去请求得到C的资源并转发给A,这个过程地址不会改变

                2.简单应用

                ①.新建两个Servlet:ServletDemo1和ServletDemo2,并分别为其注册映射地址。

                

    <servlet>
        <servlet-name>ServletDemo1</servlet-name>
        <servlet-class>com.kuang.servlet.ServletDemo1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletDemo1</servlet-name>
        <url-pattern>/servletDemo1</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>ServletDemo2</servlet-name>
        <servlet-class>com.kuang.servlet.ServletDemo2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletDemo2</servlet-name>
        <url-pattern>/servletDemo2</url-pattern>
    </servlet-mapping>

                ②.分别在ServletDemo1和ServletDemo2中打印不同的话,在ServletDemo1中请求转发到ServletDemo2,观察打印的是什么。

        ServletDemo1.java:

public class ServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String str = "ServletDemo1页面";
        //设置响应体的内容
        resp.setContentType("text/html");
        //设置响应的字符集为utf-8
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().println(str);
        ServletContext context = this.getServletContext();
        //请求转发到ServletDemo2
        context.getRequestDispatcher("/servletDemo2").forward(req,resp);
    }
}

       ServletDemo2.java:

public class ServletDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String str = "ServletDemo2页面";
        //设置响应体的内容
        resp.setContentType("text/html");
        //设置响应的字符集为utf-8
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().println(str);
    }
}

        运行结果:

        

        5.读取资源文件

                ①.新建一个db.properties文件并输入一些内容

                

                ②.新建一个ServletDemo3去读取db.properties文件

                        ServletDemo3.java:

public class ServletDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        //这里的地址是classespath类地址(在target中)
        InputStream is = context.getResourceAsStream("/WEB-INF/classes/db.properties");
        Properties prop = new Properties();
        prop.load(is);
        String username = prop.getProperty("username");
        String password = prop.getProperty("password");
        resp.getWriter().println(username + ":" + password);
    }
}

                        web.xml:

    <servlet>
        <servlet-name>ServletDemo3</servlet-name>
        <servlet-class>com.kuang.servlet.ServletDemo3</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletDemo3</servlet-name>
        <url-pattern>/servletDemo3</url-pattern>
    </servlet-mapping>

                ③.读取结果

                

四、遇到的问题解决方法

        1. 若在java文件夹中新建了properties文件没有在target中生成对应的文件,需要在pom.xml中如下设置:

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

        2.context.getResourceAsStream("/WEB-INF/classes/db.properties")中的地址是target中的classespath的类地址

        ​​​​​​​        ​​​​​​​

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值