Servlet---即将下线作废

servlet的请求转发和重定向
1.请求转发
将该请求交给服务器的另一个服务进行处理,该请求的生命周期没有停止,由request进行控制。
调用方法:
request.getRequestDispacther(“/test.jsp”).forword(request,response);
2.重定向
将该请求重定向到另一个页面(或者另一个客服端),该请求的生命周期停止,由reponse进行控制。
调用方法:
response.sendRedirect(“test.jsp”);

GET VS POST

1、多数浏览器对于POST采用两阶段发送数据的,先发送请求头,再发送请求体,即使参数再少再短,也会被分成两个步骤来发送(相对于GET),也就是第一步发送header数据,第二步再发送body部分。HTTP是应用层的协议,而在传输层有些情况TCP会出现两次连结的过程,HTTP协议本身不保存状态信息,一次请求一次响应。对于TCP而言,通信次数越多反而靠性越低,能在一次连结中传输完需要的消息是最可靠的,尽量使用GET请求来减少网络耗时。如果通信时间增加,这段时间客户端与服务器端一直保持连接状态,在服务器侧负载可能会增加,可靠性会下降。

Tips:关于这点你可以参考:Yahoo网站性能优化指南之服务器篇

http://segmentfault.com/a/1190000000353790



http://developer.yahoo.com/performance/rules.html

http://blogread.cn/it/article/6100?f=wb    YSLOW法则中,为什么yahoo推荐用GET代替POST?

上面这篇文章介绍了 wireshark 抓包验证 post 两次发包,get 一次发包的全过程,推荐阅读。




2、GET请求能够被cache,GET请求能够被保存在浏览器的浏览历史里面(密码等重要数据GET提交,别人查看历史记录,就可以直接看到这些私密数据)POST不进行缓存。


3、GET参数是带在URL后面,传统IE中URL的最大可用长度为2048字符,其他浏览器对URL长度限制实现上有所不同。POST请求无长度限制(目前理论上是这样的)。


4、GET提交的数据大小,不同浏览器的限制不同,一般在2k-8K之间,POST提交数据比较大,大小靠服务器的设定值限制,而且某些数据只能用 POST 方法「携带」,比如 file。


5、全部用POST不是十分合理,最好先把请求按功能和场景分下类,对数据请求频繁,数据不敏感且数据量在普通浏览器最小限定的2k范围内,这样的情况使用GET。其他地方使用POST。

6、GET 的本质是「得」,而 POST 的本质是「给」。而且,GET 是「幂等」的,在这一点上,GET 被认为是「安全的」。但实际上 server 端也可以用作资源更新,但是这种用法违反了约定,容易造成 CSRF(跨站请求伪造)。


post方式相比get安全,携带数据更大。GET请求只进行一次提交,速度更快,适合于安全性要求不严的查询请求

JSP中九大内置对象为:

request 请求对象  类型 javax.servlet.ServletRequest 作用域 Request

response 响应对象 类型 javax.servlet.SrvletResponse 作用域 Page

pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page

session 会话对象 类型 javax.servlet.http.HttpSession 作用域 Session

application 应用程序对象 类型 javax.servlet.ServletContext 作用域 Application

out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page

config 配置对象 类型 javax.servlet.ServletConfig 作用域 Page

page 页面对象 类型 javax.lang.Object 作用域 Page

exception 例外对象 类型 javax.lang.Throwable 作用域 page

JSP内置对象——application对象
一、application介绍
1、实现了用户间数据的共享,可存放全局变量。(类似静态对象)
2、开始于服务器启动,终止于服务器的关闭(生命周期)
3、在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作
4、在任何地方对application对象属性进行操作,都将影响到其他用户对此的访问
5、application对象是ServletContext类的实例

二 通过接口注入内置对象

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;
//所有Action动作的父类,并注入内置对象
public class SuperAction implements ServletRequestAware,
ServletResponseAware,ServletContextAware{
	/**
	 * 
	 */
		//请求对象
	protected HttpServletRequest request;
	//响应对象
	protected HttpServletResponse response;
	//会话对象
	protected HttpSession session;
	//全局对象
	protected ServletContext application;
	public void setServletContext(ServletContext application) {
		// TODO Auto-generated method stub
		this.application=application;
	}

	public void setServletResponse(HttpServletResponse response) {
		// TODO Auto-generated method stub
		this.response=response;
	}

	public void setServletRequest(HttpServletRequest request) {
		// TODO Auto-generated method stub
		this.request=request;
		this.session=request.getSession();
	}

}

子类这样也可以直接引用父类的属性
三 在MVC框架中获取内置对象

  1. struts2中获取内置对象

Struts2获取request对象

1.通过ActionContext获取返回的是map集合
Map request = (Map)ActionContext.getContext().get(“request”);
request.put(“tasks”, tasks);

2.通过ServletActionContext类来获取
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute(“username”, “zhangsan”);
req.getSession().setAttribute(“b”, “bb”);//获取session对象
request.getSession().getServletContext().getApplication(); //得到Application
3.通过接口注入的方式(推荐使用)

Struts2获取session对象

Map session=ActionContext.getContext().getSession();
//在session中设值
session.put(“username”, username);

2.springMVC中获取内置对象

//获取request对象
1.(推荐使用)
public String reg2(HttpServletRequest req){
req.setAttribute(“a”, “aa”);
}
2.
public String reg(ModelMap map){
map.put(“a”, “aaa”);
return “index”;
}

//获取session对象
1.(推荐使用)
public String reg2(HttpServletRequest req){
req.getSession().setAttribute(“b”, “bb”);
}
2.使用注解
@SessionAttributes({“u”,“a”}) //将ModelMap中属性名字为u、a的再放入session中。这样,request和session中都有了。

参考资料:
1.关于 HTTP GET/POST 请求参数长度最大值的一个理解误区https://blog.csdn.net/a460550542/article/details/72511343

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值