request的一些笔记

一、获得请求数据。
String getParameter(String name)方法得到指定名称数据,Enumeration getParameterNames()得到所有数据的名称,可以在通过迭代得到所有数据,String[] getParameterValues(String name)得到同一名称的所有数据,它返回一个String数组。此外还有很多方法,其中我觉得比较有用的是一个Map getParameterMap()方法。当我们从浏览器获得表单提交数据后,比如注册表单,我们通常会先把它封装为一个formbean,此时用这个方法就变得很方便,通过BeanUtils架包提供的populate方法把formbean对象和方法返回的map对象传进去,就可以实现map到bean的复制。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(request.getParameter("username"));
Enumeration e=request.getParameterNames();
while(e.hasMoreElements()){
String name=(String)e.nextElement();
System.out.println(request.getParameter(name));
}

Map map=request.getParameterMap();
User user=new User();
try {
BeanUtils.populate(user, map);//用map的数据填充bean
//BeanUtils.copyProperties(bean1,bean2);//bean的拷贝
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (InvocationTargetException e1) {
e1.printStackTrace();
}

}


二、request乱码问题。
浏览器再向服务器传送数据时,会查询当前页面使用的编码表,按照此编码表编码数据传给服务器,而服务器通过request得到数据,request默认查询ISO-8559编码表,两边使用不同的编码表,就出现了乱码。在获取数据之前,可以通过request.setCharacterEncoding("UTF-8")设置request采用的编码表。不过此处需要注意的是,此方法只对post方法提交的数据有用,而对get方法提交的数据无用,也就是即使你在获取数据前设置了编码方式,而数据提交方式是get,那么依然存在乱码。当然对于form表单提交方式基本都会更改为post,而超链接提交方式是get,如果超链接后带有数据,就可能出现乱码,对此解决方法有可以通过改变服务器配置解决,不过此方法基本不采用,毕竟更改服务器配置就会对其他web应用产生影响。而解决方法就只有手工解决。
//request.setCharacterEncoding("UTF-8");//此方法只对post有用,对get无用  
String username=request.getParameter("username");
String name=new String(username.getBytes("ISO8859-1"),"UTF-8");
System.out.println(username);
System.out.println(name);

三、请求转发。
此方法在web开发中MVC设计模式经常用到,此时由servlet只处理数据,而jsp只显示数据,所以servlet处理完数据后,调用request的setAttribute方法,将数据存入request域中,在调用RequestDispatcher getRequestDispatcher(String path)方法,此方法返回一个RequestDispatcher对象,在调用forward方法,就可以将请求转发到jsp,在jsp里取出数据显示。
重定向地址栏有变化,客户机总共发送了两次请求,而请求转发地址栏不会有变化,客户机也只发送了一次请求。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String data="xxx";

//request数据传递,请求转发
request.setAttribute("data", data);
request.getRequestDispatcher("/index.jsp").forward(request, response);

}

另外还有一些细节需要注意:(1)如果在调用forward方法之前,servlet写入部分已经被真正的传给客户端,那么将抛出IllegelStateException异常。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String data="xxx";
request.setAttribute("data", data);

PrintWriter writer=response.getWriter();
writer.write(data);
writer.close();
//以下跳转会抛出无效异常
request.getRequestDispatcher("/3.jsp").forward(request, response);
}
(2)如果在调用forward方法之前向servlet的response中写入数据,那么只要数据没有真正的传给客户端,那么forward方法可以被正常执行,而response写入的数据会被清空,但response中的响应头字段信息保持有效。

四、refere防盗链。
如果网站辛苦找到的资源,轻松就被他人通过地址访问,那网站的辛苦不是仅仅就是别人网站的一个超链接。所以可以通过refere得到来访地址,如果不是通过本站跳过来的,就返回本站首页。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String refere=request.getHeader("refere");
if(refere==null||refere.startsWith("/http:localhost")){
response.sendRedirect("/Test/index.jsp");
return;
}
String data="xxx";
response.getWriter().print(data);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值