1.request.getRequestDispacther("/test.jsp").forword(request,response); 转发 浏览器URL是一个地址,request.setAttribute()的值在转发的jsp或servlet中可以获取,是同一个请求,
服务器内部跳转 / 是指 当前路径
转发只能在当前服务器内
2.response.sendRedirect("/test.jsp") 重定向 浏览器URL不是一个地址,request.setAttribute()的值在转发的jsp或servlet中不可以获取,不是同一个请求,是两个请求
通过浏览器发送请求 / 是指主机的根目录 例如:http://localhost:8080/
包括表单提交的/ <form name="biaodan" method="post" action="/index.jsp">
重定向可以跳转到其他服务器内
request.getRequestDispacther("/test.jsp").forword(request,response); 及 配置文件里的/是指web的根路径 http://127.0.0.1/xiangmu/
<a href="/"> 和表单里的action / response.sendRedirect("/test.jsp") 是指站点的路径 http://127.0.0.1/
${param.name} 等价于 request.getParamter("name"),这两种方法一般用于服务器从页面或者客户端获取的内容。 ${requestScope.name} 等价于 request.getAttribute("name"),一般是从服务器传递结果到页面,在页面中取出服务器保
request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组 件之间共享。这两个方法能够设置Object类型的共享数据。
request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据。
request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
getAttribute是返回对象,getParameter返回字符串
总的来说:request.getAttribute()方法返回request范围内存在的对象,而
request.getParameter()方法是获取http提交过来的数据。
request.setAttribute()和getAttribute() 在转发间传递参数
request.getParameter() 在重定向间获取参数 没有setParameter()
/**
* 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址,
* 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
* 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。
*
* 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
*
* 用户真实IP为: 192.168.1.110
*
* @param request
* @return
*/
private String getIpAddress(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
页面包含
1.<jsp:include page="/index.jsp"><jsp:param value="zhangsan" name="userName"/></jsp:include>
动态引入 page
可以时servlet路径,可以传参,<jsp:include page="/index.jsp">
</jsp:include>
没有参数要写到一行
<jsp:include page="/SaveData2"></jsp:include> 会有小红叉
<jsp:include page='${"/SaveData2"}'></jsp:include>
<jsp:include page="${'/SaveData'}"></jsp:include>
<jsp:include page="<%="/SaveData2"%>"></jsp:include>
<jsp:include page='<%="/SaveData"%>'></jsp:include>
在servlet中引入
只是插入被导入页面的body内容。
2.<%@ include file="/index.jsp?userName=zhangsan" %>
静态引入,是引入文件,不可传参数,不可以加?userName=zhangsan,不能写 servlet路径
页面会有重复元素