SerlvetContext

目录

作用

1、获取上下文路径

2、请求转发--(本质属于"服务器行为")

3、获取全局参数

4、域对象


作用

1、获取上下文路径

       jsp/html :href/src(写路径:最好使用全局路径):绝对不会出现404
               html:
                    http://localhost:8080/URI

代码操作:

方法一:

//1)先获取ServletContext 接口(web容器反射创建)
//public ServletContext getServletContext()
         ServletContext servletContext = this.getServletContext();
//2)获取上下文路径 String getContextPath();
         String contextPath = servletContext.getContextPath();
*******输出 /Servlet_jsp_war_exploded  (是URI的一部分)

方法二:

//简化格式
//HttpServletRequest
//获取上下文         输出 /Servlet_jsp_war_exploded  (是URI的一部分)
// 路径 String getContextPath();
        String contextPath = request.getContextPath();
        System.out.println(contextPath);

获取其他信息:

//获取URL :http://localhost:8080/Servlet_jsp_war_exploded/contextDemo1
        String url = request.getRequestURL().toString();
        System.out.println("url:"+url);
//获取URI :Servlet_jsp_war_exploded/contextDemo1
        String uri = request.getRequestURI();
        System.out.println("uri:"+uri);
//获取上下文:/Servlet_jsp_war_exploded
        String contextPath = request.getContextPath();
        System.out.println(contextPath);
//获取协议版本号:Http/1.1
        String protocol = request.getProtocol();
        System.out.println("protocol:"+protocol);
//获取默认提交方式:GET
        String method = request.getMethod();
        System.out.println("method:"+method);
//获取请求头信息
//String getHeader(请求头名称)---> 获取内容
        String header = request.getHeader("User-Agent");//用户使用的浏览器类型
        if(header.contains("Chrome")){
            System.out.println("你使用的谷歌浏览器");
        }else if(header.contains("firefox")){
            System.out.println("你使用的火狐浏览器");
        }else{
            System.out.println("浏览器未知...");
        }

2、请求转发--(本质属于"服务器行为")

当前请求当前后台/contextDemo3  跳转到前前台  login.html 登录页面中

1)配置

    <servlet>
        <servlet-name>ServletContextDemo3</servlet-name>
        <servlet-class>com.qf.servletcontext_03.ServletContextDemo3</servlet-class>
    </servlet>
  
    <servlet-mapping>
        <servlet-name>ServletContextDemo3</servlet-name>
        <url-pattern>/contextDemo3</url-pattern>
    </servlet-mapping>

2)设置前端代码login.html文件

login.html

3)基本代码

方法一:

        ServletContext servletContext = this.getServletContext();
        //public RequestDispatcher getRequestDispatcher(String path)
        //获取当前项目的请求分发器(接收web客户端的请求之后,将请求通过服务器进行转发到指定的页面上)
        //路径必须"/"
RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/login.html");
        //public void forward(ServletRequest request, ServletResponse response)
        //从当前servlet后台转发到前台资源地址上
        requestDispatcher.forward(request,response);

方法二:

        //请求转发的简写格式
        //public RequestDispatcher getRequestDispatcher(String path)被封装请求对象中
        //请求转发不需要携带上下文路径
        //request.getRequestDispatcher("/login.html").forward(request,response);
  request.getRequestDispatcher("/WEB-INF/hello.html").forward(request,response);

4)请求转发的特点

1、地址栏没有变化,始终访问后台某个地址
2、请求转发只能访问当前项目下的资源文件(html/jsp),以及包含WEB-INF资源文件
        将jsp/html放在WEB-INF:为了数据安全(只能通过请求转发来访问)
3、请求转发的整个过程:是服务器行为,由web容器内部通过RequestDispaticher分发器来完成的事情,请求对象request对象一致
        有业务数据需求,需要在jsp中获取后台接口数据,那么只能请求就转发,HttpServletRequest:域对象
4、请求转发不能跨工程访问别的资源文件,只能在当前项目下访问

3、获取全局参数

1)配置

    <!--全局参数-->
      <context-param>
          <!--参数名称-->
          <param-name>characterEncoding</param-name>
          <!--参数值-->
          <param-value>utf-8</param-value>
    </context-param>
        
            <servlet>
        <servlet-name>ServletContextDemo2</servlet-name>
        <servlet-class>com.qf.servletcontext_03.ServletContextDemo2</servlet-class>
    </servlet>
   
    <servlet-mapping>
        <servlet-name>ServletContextDemo2</servlet-name>
        <url-pattern>/contextDemo2</url-pattern>
    </servlet-mapping>

2)基本代码

        //获取ServletContext对象
        ServletContext servletContext = this.getServletContext();
        //获取全局参数
        //String getInitParameter(String var1);
        String value = servletContext.getInitParameter("characterEncoding");
        System.out.println("value:"+value);
        //解决post提交的中文乱码
        request.setCharacterEncoding(value);
        //解决响应的乱码
        response.setContentType("text/html;charset="+value+"");
        response.getWriter().write("Servletcontext的作用2,获取全局参数配置");

4、域对象

1)什么是域对象

就是可以在不同servlet之间及进行“数据共享\数据传输”   ---- web(容器)

2)域对象

servletContext:作为域对象去使用,范围:整个web应用程序
        public void setAttribute(String name, Object object)
        将指定的Object对象绑定在属性名称上,name必须唯一
public Object getAttribute(String name):获取在域对象中绑定的指定内容,通过属性名称
public void removeAttribute(String name) 从域对象中删除绑定的内容

3)域对象的数据类型

数据类型:PageContext        对象名称:page域          范围:在某一个jsp页面中有效
        HttpServletRequest         request              在一次请求中有效
        HttpSession                session          在一次会话中有效(存储在服务器端)
        ServletContext             context/application      全局对象,在整个web工程下有效(web容器一直处于运行状态)

4)基本代码

配置xml文件

    <servlet>
        <servlet-name>ServletDemo1</servlet-name>
        <servlet-class>com.qf.servletcontext_04.ServletDemo1</servlet-class>
    </servlet>
   
    <servlet-mapping>
        <servlet-name>ServletDemo1</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>
​
​
    <servlet>
        <servlet-name>ServletDemo2</servlet-name>
        <servlet-class>com.qf.servletcontext_04.ServletDemo2</servlet-class>
    </servlet>
   
    <servlet-mapping>
        <servlet-name>ServletDemo2</servlet-name>
        <url-pattern>/demo2</url-pattern>
    </servlet-mapping>

user类

public class User{
    private String username ;
    private String password ;
​
    public String getUsername() {
        return username;
    }
​
    public void setUsername(String username) {
        this.username = username;
    }
​
    public String getPassword() {
        return password;
    }
​
    public void setPassword(String password) {
        this.password = password;
    }
​
    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

方式一:

//ServletDemo1
public class ServletDemo1 extends HttpServlet {
​
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
​
        //1)获取全局对象
        ServletContext servletContext = this.getServletContext();
        //2)public void setAttribute(String name, Object object)
        List<String> list = new ArrayList<>() ;
        list.add("eric") ;
        list.add("jakcy") ;
        list.add("Lee") ;
        servletContext.setAttribute("list",list);
​
    protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        doGet(request,response);
    }
}
​
//ServletDemo2
public class ServletDemo2 extends HttpServlet {
​
​
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
​
        //1)获取全局对象
        ServletContext servletContext = this.getServletContext();
        //2)当前域对象中获取数据
        //public Object getAttribute(String name):获取在域对象中绑定的内容,通过属性名称
        List<String> list = (List<String>) servletContext.getAttribute("list");
        for (String s : list) {
            System.out.println(s);
            }
}
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);
​
    }
}

方法二:

 //ServletDemo1
        User user = new User() ;
        user.setUsername("张三");
        user.setPassword("123456");
        //将属性名称对应的值进行绑定
        servletContext.setAttribute("user",user);
        System.out.println("保存数据成功...");
        
//ServletDemo2
        User user = (User) servletContext.getAttribute("user");
        System.out.println("用户名是:"+user.getUsername());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彦登的登

动力来源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值