servlet转发重定向

时间:2024-01-03 08:21:44

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中引入

request.getRequestDispatcher("/hyperLinkList.jsp").include(request, response);

只是插入被导入页面的body内容。

2.<%@ include file="/index.jsp?userName=zhangsan" %>

静态引入,是引入文件,不可传参数,不可以加?userName=zhangsan,不能写 servlet路径

页面会有重复元素