servler filter 学习记录

本文详细介绍了Java Web开发中两种页面跳转方法的特点及应用场景,对比了它们对请求参数的影响,并深入探讨了过滤器的工作原理及其配置方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


String str = request.getParameter("message");//参数
System.out.println(str);
request.setAttribute("username", "over");//属性

//跳转方法1,浏览器地址栏变成了目标页面的url
//到了目标页面之后,request内的参数值,属性值丢失了
//response.sendRedirect("/PrjFu8/result.jsp");

//跳转方法2,浏览器地址栏没有变成目标页面的url
//相当于在服务器内部将目标页面的输出送给客户端,request内的参数值,属性值没有丢失
//ServletContext application = this.getServletContext();
//RequestDispatcher rd = application.getRequestDispatcher("/result.jsp");
//rd.forward(request, response);//<jsp:forward>标签

/*
* 如果在A页面有一些内容要在B页面显示,但是如果内容数量较大,并且是暂态数据
* 可以将内容不要放在session内,放在request内,用跳转方法2跳转到B页面显示,节省内存
* 跳转方法1相当于重新在客户端输入目标页面地址,重新请求
* 方法2相当于服务器内部的跳转
* 如果要跳转到服务器以外的url,必须使用方法1
* */
//表示将目标页面的代码插入到这里运行
response.setCharacterEncoding("gb2312");
ServletContext application = this.getServletContext();
RequestDispatcher rd = application.getRequestDispatcher("/result.jsp");
rd.include(request, response);


//读取全局参数
ServletContext application = this.getServletContext();
String value1 = application.getInitParameter("GlobalParam");
System.out.println(value1);
//读取局部参数
String value2 = this.getInitParameter("LocalParam");
System.out.println(value2);



filter

package filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {

public EncodingFilter(){
System.out.println("过滤器构造函数");
}
private String encodingName;
public void init(FilterConfig fc) throws ServletException {
//初始化函数,服务器运行能自动运行一次
System.out.println("过滤器init函数");
//fc.getServletContext().getInitParameter(arg0)得到全局参数
encodingName = fc.getInitParameter("encodingName");//得到局部参数
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//每次提交都会运行
System.out.println("过滤器doFilter函数");

request.setCharacterEncoding(encodingName);//解决中文问题
//过滤器是在提交到达处理模块之前运行,所以这里要将请求向后传递
chain.doFilter(request, response);

}

public void destroy() {
//消亡时运行
System.out.println("过滤器destroy函数");

}

}



xml 设置

<!-- 注册过滤器
-->
- <filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>filter.EncodingFilter</filter-class>
- <init-param>
<param-name>encodingName</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
- <!-- 配置过滤器要过滤的对象
-->
- <filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
- <!-- 可以写一个url路径
-->
</filter-mapping>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值