四个域

--------------------------------------------------------------------------------------

1.ServletRequest 和属性相关的方法

 

  1)void setAttribute(java.lang.String name, java.lang.Object o)        Stores an attribute in this request. Attributes are reset between requests. This method is most often used in conjunction with RequestDispatcher 设置属性

  2)java.lang.Object getAttribute(java.lang.String name)                   Returns the value of the named attribute as an Object, or null if no attribute of the given name exists  获取指定的属性

  3)java.util.Enumeration<java.lang.String> getAttributeNames()     Returns an Enumeration containing the names of the attributes available to this request  获取所有 属性名字组成的Enumeration 对象

  3)void removeAttribute(java.lang.String name)                             Removes an attribute from this request. This method is not generally needed as attributes only persist as long as the request is being handled. 移除指定的属性

 

2.pageContext,request,session,application 对象都有这样的方法。 这四个对象称之为域对象

 

3.属性作用范围(作用范围从小到大)

域对象                 属性的作用范围
pageContext   仅限于当前的JSP页面
request仅限于同一个请求  
session限于一个会话(浏览器打直到关闭称一次会话,在此期间会话不失效)
appllication限于当前的WEB应用。范围最大的属性作用范围,只要在一处设置属性,在其他各处JSP 或 Servlet 中都可以获取到

 

  

 

 

 

 

 

 

 

 

 4. 请求的重定向和请求转发(重点)

1)请求的转发

①RequestDispatcher接口

  I. RequestDispatcher实例对象是由Servlet引擎创建的,它用于包装一个要被其他资源调用的资源(例如,Servlet、HTML文件、JSP文件等),并可以通过其中的方法将客户端的请求转发给所包装的资源;

  II. RequestDispatcher接口中定义了两个方法:forward方法和include方法;forward和include方法接收的两个参数必须是传递给当前Servlet的service方法的那两个ServletRequest和ServletResponse对象,或者是对它们进行了包装的 ServletRequestWrapper 或ServletResponseWrapper对象

  III. 

②用forward方法实现请求转发 (代码 ForwardServlet.java )

 

③请求转发的运行流程

 

2)请求的重定向

①用sendRedirect方法实现请求重定向(代码 RedirectServelt.java )

 

②请求重定向的运行流程

 

3)请求重定向与请求转发的比较(重要)

  ① 本质区别:请求的转发是只发出了一次请求而重定向则发出了两次请求

  ② 具体区别:

      请求的转发:地址栏是初次请求发出的请求地址

      请求的重定向:地址栏不再是初次发出的请求地址,地址栏为最后响应的那个地址

  ③ 请求转发:最终的Servlet中,request 对象和中转的requset 同一个对象。

     请求重定向:最终的Servlet中,request 对象和中转的requset  不是同一个对象。

 

  ④请求转发:只能转发到当前WEB 应用的资源。

   请求重定向:可以重定向到任何资源

 

  ⑤ HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求。

    RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。

 

  ⑥如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录

     如果创建RequestDispatcher 对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录

 代码:

  注意:

  1. 创建的工程的servlet的版本2.5以上,不自动配置web.xml是因为servlet的配置直接在Java代码中进行注解配置了。

  2. 设置的服务器应该是tomcat7以上,默认是生成注解而不是web.xml的。所以如果在2.5以下的话,那么在新建servlet的时候就会有web.xml了

 

  test.html

复制代码
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 5 <title>this is a test </title>
 6 </head>
 7 <body>
 8         <a href="tsetServlet">Test</a>
 9     
10         <br><br>
11         
12         <a href="forwardServlet">Fowoard</a>
13         
14         <br><br>
15         
16         <a href="redirectServelt">RedirectServelt</a>
17             
18 </body>
19 </html>
复制代码

 

 

  ForwardServlet.java

 

复制代码
 1 package com.jason.testweb;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.RequestDispatcher;
 6 import javax.servlet.ServletException;
 7 import javax.servlet.annotation.WebServlet;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 
12 import com.oracle.jrockit.jfr.RequestDelegate;
13 
14 /**
15  * Servlet implementation class ForwardServlet    
16  */
17 @WebServlet("/forwardServlet")
18 public class ForwardServlet extends HttpServlet {
19     private static final long serialVersionUID = 1L;
20 
21     
22     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
23         System.out.println("连接成功");
24         request.setAttribute("forwardRequestName", "forwardRequestValue");
25         System.out.println("ForwardServlet : " + request.getAttribute("forwardRequestName"));
26         //请求的转发
27         //1.调用 HttpServletRequest 的getRequestDispatcher() 方法获取 RequestDispatcher 对象
28         //调用getRequsetDispacher() 需要传入转发地址
29         String path = "testServlet";
30         RequestDispatcher requestDispatcher = request.getRequestDispatcher("/" + path);
31         
32         //2.调用 RequestDispatcher 的forward(request, response)进行请求转发
33         requestDispatcher.forward(request, response); 
34         
35         
36         
37     }
38 
39 }
复制代码

 

 

RedirectServelt.java

复制代码
 1 package com.jason.testweb;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 /**
12  * Servlet implementation class RedirectServelt
13  */
14 @WebServlet("/redirectServelt")
15 public class RedirectServelt extends HttpServlet {
16     private static final long serialVersionUID = 1L;
17     
18     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
19         System.out.println("RedirectServelt's doGet ");
20         
21         request.setAttribute("redirectRequestName", "redirectRequestValue");
22         System.out.println(" RedirectServelt:" + request.getAttribute("redirectRequestName"));
23         //执行重定向,直接调用response的 sendRedirecet(path)方法, path 为重定向的地址
24         String  path ="testServlet";
25         response.sendRedirect(path);
26         }
  }
复制代码

 

 

TestServlet.java

 

复制代码
 1 package com.jason.testweb;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 /**
12  * Servlet implementation class TsetServlet
13  */
14 @WebServlet("/testServlet")
15 public class TestServlet extends HttpServlet {
16     private static final long serialVersionUID = 1L;
17 
18     
19     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
20         System.out.println("this testServlet' doGet function");
21         System.out.println("TestServlet :" + request.getAttribute("forwardRequestName"));
22     }
23 
24 }
复制代码

转载于:https://www.cnblogs.com/1506wch/p/9143876.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来为你编写一个 C 语言程序,实现读入一个字符串,统计该字符串中出现的字符类型及其次数,然后输出结果,使用一个二叉排序树保存处理结果。 程序实现如下: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TreeNode { char ch; // 字符 int count; // 该字符出现的次数 struct TreeNode *left; // 指向ASCII码小于该字符的左子树的指针 struct TreeNode *right; // 指向ASCII码大于该字符的右子树的指针 } TreeNode, *Tree; void insert(Tree *root, char ch) { if (*root == NULL) { *root = (Tree)malloc(sizeof(TreeNode)); (*root)->ch = ch; (*root)->count = 1; (*root)->left = NULL; (*root)->right = NULL; return; } if (ch < (*root)->ch) { insert(&((*root)->left), ch); } else if (ch > (*root)->ch) { insert(&((*root)->right), ch); } else { (*root)->count++; } } void inorder(Tree root) { if (root == NULL) { return; } inorder(root->left); printf("%c: %d\n", root->ch, root->count); inorder(root->right); } int main() { char str[100]; printf("请输入一个字符串:"); scanf("%s", str); Tree root = NULL; int len = strlen(str); for (int i = 0; i < len; i++) { insert(&root, str[i]); } printf("字符类型及其次数如下:\n"); inorder(root); return 0; } ``` 程序中首先定义了一个结构体 `TreeNode`,表示二叉排序树的节点,包含字符、出现次数、左子树和右子树四个。 然后定义了一个 `insert` 函数,用于将一个新节点插入到二叉排序树中。如果该节点已经存在,则增加其出现次数。 接着定义了一个 `inorder` 函数,用于中序遍历二叉排序树,输出每个节点的字符和出现次数。 在主函数中,首先读入一个字符串,然后遍历字符串中的每个字符,将其插入到二叉排序树中。最后输出二叉排序树中各个节点的字符类型及其次数。 希望这个程序可以帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值