Servlet HttpRequest 中【getAttribute】和【getParameter】的区别

request对象getAttribute与getParameter区别
本文详细解析了在Java Web开发中,request对象的getAttribute与getParameter方法的不同之处,包括它们获取值的区别、数据传递路径的差异,以及在实际场景中的应用示例。

1.获取的值不同

  • getAttribute表示从request范围取得设置的属性,必须要通过setAttribute设置属性,才能通过getAttribute取得。设置和取得的值都是Object类型。
  • getParameter表示接收页面提交的 参数,主要有表单提交的参数、URL重写传递的参数(http://item.jsp?id=1中的id值)等,所以不需要通过setParameter来设置参数,而且参数的返回类型是String类型。

 

2.数据传递路径不同

  • request.getParameter()方法传递的数据是从web客户端到web服务端,代表http的请求数据,用于表单或URL重定向时使用。

举例:

    比如两个web页面之间的转换,准确的说是两个web页面时链接关系时,从login.jsp链接到menu.jsp时,menu.jsp就可以通过getParameter()方法来获得请求参数。

 login.jsp:

1 <%  
2 //获取参数
3 String username=request.getParameter("username");  
4 //设置属性
5 request.setAttribute("username",username);  
6 %>  
7   
8 <!-- 页面跳转 --!>
9 <jsp:forward page="menu.jsp" />
1 <form name="form1" method="post" action="menu.jsp">  
2   请输入用户姓名:<input type="text" name="username">  
3   <input type="submit" name="Submit" value="提交">  
4 </form>  

menu.jsp中则可通过request.getParameter("username")方法来获得请求的参数username:

1 <% String username=request.getParameter("username"); %>  

 

  • request.getAttribute()传递的数据只存在于web容器内部,在request范围内也就是转发时web组件之间的共享。

举例:

login.jsp想要向menu.jsp传递当前的用户名,首先要在login.jsp中调用setAttribute()方法:

1 <%  
2 //获取参数
3 String username=request.getParameter("username");  
4 //设置属性
5 request.setAttribute("username",username);  
6 %>  
7   
8 <!-- 页面跳转 --!>
9 <jsp:forward page="menu.jsp" />

在menu.jsp中通过getAttribute()方法获得用户名:

<% String username=(String)request.getAttribute("username"); %> 

转载于:https://www.cnblogs.com/wangzhijun97/p/9458895.html

ServletJava EE中处理HTTP请求的核心组件,其核心机制围绕**请求(Request)、响应(Response)、监听器(Listener)、过滤器(Filter)**展开。以下是详细解释及代码示例: --- ### **1. Servlet请求(HttpServletRequest)** **作用**:封装客户端(如浏览器)发送的HTTP请求数据,包括参数、头信息、路径等。 **关键方法**: - `getParameter(String name)`:获取请求参数(如表单字段)。 - `getHeader(String name)`:获取请求头(如`User-Agent`)。 - `getRequestURI()`:获取请求的URI路径。 - `getSession()`:获取或创建会话(Session)。 **示例**:处理用户登录请求 ```java @WebServlet("/login") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); if ("admin".equals(username) && "123456".equals(password)) { request.getSession().setAttribute("user", username); // 存储Session response.sendRedirect("welcome.jsp"); } else { response.sendRedirect("error.html"); } } } ``` --- ### **2. Servlet响应(HttpServletResponse)** **作用**:生成并返回HTTP响应,包括状态码、头信息、响应体等。 **关键方法**: - `setContentType(String type)`:设置响应内容类型(如`text/html`)。 - `getWriter()`:获取字符输出流(写入HTML/JSON)。 - `sendRedirect(String url)`:重定向到其他URL。 - `setStatus(int code)`:设置HTTP状态码(如404、500)。 **示例**:返回JSON数据 ```java @WebServlet("/api/data") public class DataServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.print("{\"message\": \"Hello, Servlet!\"}"); } } ``` --- ### **3. Servlet监听器(Listener)** **作用**:监听Web应用生命周期事件(如启动、销毁)或Session/Request属性变化。 **常见监听器类型**: - **ServletContextListener**:监听应用启动/销毁。 - **HttpSessionListener**:监听Session创建/销毁。 - **ServletRequestAttributeListener**:监听Request属性变化。 **示例**:记录应用启动时间 ```java @WebListener public class AppStartupListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("应用启动时间: " + new Date()); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("应用已销毁"); } } ``` --- ### **4. Servlet过滤器(Filter)** **作用**:在请求到达Servlet前或响应返回客户端前,对请求/响应进行预处理或后处理(如权限校验、日志记录)。 **关键方法**: - `doFilter(ServletRequest request, ServletResponse response, FilterChain chain)`:核心过滤逻辑。 - `chain.doFilter(request, response)`:放行请求到下一个过滤器或Servlet。 **示例**:实现登录校验过滤器 ```java @WebFilter("/*") // 过滤所有路径 public class AuthFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; String path = httpRequest.getRequestURI(); HttpSession session = httpRequest.getSession(false); // 允许访问登录页静态资源 if (path.contains("/login") || path.contains(".css") || path.contains(".js")) { chain.doFilter(request, response); return; } // 未登录则重定向到登录页 if (session == null || session.getAttribute("user") == null) { httpResponse.sendRedirect(httpRequest.getContextPath() + "/login.jsp"); } else { chain.doFilter(request, response); } } } ``` --- ### **核心执行流程** 1. **请求到达**:客户端发送HTTP请求(如`/api/data`)。 2. **过滤器处理**:所有注册的`Filter`按`@WebFilter`顺序执行(如日志记录、权限校验)。 3. **Servlet处理**:匹配的`Servlet`(如`DataServlet`)通过`HttpServletRequest``HttpServletResponse`处理业务逻辑。 4. **监听器响应**:若发生Session创建或应用销毁,对应`Listener`被触发。 5. **响应返回**:过滤器可再次处理响应(如压缩数据),最终返回客户端。 --- ### **关键区别与协作** | **组件** | **作用时机** | **典型用途** | |----------------|----------------------------------|---------------------------------------| | **Servlet** | 请求到达后,过滤器之后 | 业务逻辑处理(如查询数据库、生成JSON)| | **Filter** | 请求到达前/响应返回前 | 权限控制、日志、数据加密/解密 | | **Listener** | 应用/Session生命周期事件 | 初始化资源、统计在线用户数 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值