JavaWeb跳转以及会话跟踪

本文详细介绍了JavaWeb中的请求跳转,包括Servlet的forward和Redirect,并探讨了通过HTML、表单和AJAX访问Servlet的方式。同时,文章深入讨论了会话跟踪的必要性、定义以及四种技术——URL重写、隐藏表单域、Cookie和Session,分析了它们的优缺点。最后,文章提到了HttpSession的常用方法和中文乱码处理策略。
摘要由CSDN通过智能技术生成

Servlet的跳转

     1.forward---RequestDispatcher接口的

          forward(ServletRequest request,ServletResponse response)---该方法用于将请求从一个 Servlet 传递给另一个 Web 资源【Servlet程序/html/JSP】。【请求转发】

          forward属于RequestDispatcher接口的

          HttpServletRequest接口从ServletRequest接口中继承了一个获取 RequestDispatcher 对象的方法RequestDispatcher getRequestDispatcher (String path).

          参数String path---目标路径【必须以“/”开头,用于表示当前 Web 应用的根目录】

          需要注意的是,WEB-INF 目录中的内容对 RequestDispatcher 对象也是可见的。因此,传递给 getRequestDispatcher(String path) 方法的资源可以是 WEB-INF 目录中的文件

          RequestDispatcher接口对象=HttpServletRequest接口对象.getRequestDispatcher (String path);

          RequestDispatcher接口对象.forward(ServletRequest request,ServletResponse response).

          通过HttpServletRequest对象传递数据的。

          HttpServletRequest对象的方法

          void setAttribute(String name,Object o) 用于将一个对象与一个名称关联后存储到 ServletRequest 对象中

          Object getAttribute(String name) 用于从 ServletRequest 对象中返回指定名称的属性对象

          void removeAttribute(String name) 用于从 ServletRequest 对象中删除指定名称的属性

    

例如:

package com.wangxing.servlet;
import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OneServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("------------------");
		//forward(ServletRequest request,ServletResponse response);该方法用于将请求从一个servlet传递给另一个web资源【Servlet程序/html/JSP】
		//forward(ServletRequest req,ServletRresponse resp)方法是RequestDispatcher中的方法
		//HttpServletRequest中有获得RequestDispatcher对象的方法
		//getRequestDispatcher();
		/*
		RequestDispatcher requestDispatcher = req.getRequestDispatcher("/test.html");
		requestDispatcher.forward(req, resp);
		
		req.getRequestDispatcher("/onther").forward(req, resp);
		*/
		//void setAttribute(String name,Object o);用于将一个对象与另一对象关联后存储到ServletRequest对象中
		req.setAttribute("name", "zhangsan");
		
		req.getRequestDispatcher("/other").forward(req, resp);
	}
	
}
package com.wangxing.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OtherServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//Object getAttribute(String name);用于从ServletRequest对象中返回指定名称的属性对象
		String name = (String) req.getAttribute("name");
		System.out.println("OtherServlet----name==" + name);
	}
	
}

      2.Redirect----HttpServletRespone.sendRedirect()[重定向]

            HttpServletResponse 接口定义了一个 sendRedirect(String path) 方法.将请求从一个 Servlet 传递给另一个 Web 资源【Servlet程序/html/JSP】

例如:

package com.wangxing.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OneServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("---------------");
		//sendRedirect(String path);方法请求从一个Servlet传递给另一个Web资源【Servlet程序/html/JSP】
		//resp.sendRedirect("test.html");
		//resp.sendRedirect("/test.html");错误
		
		req.setAttribute("name", "lisi");
		resp.sendRedirect("other");
	}
	
}
package com.wangxing.servlet;


import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OtherServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//Object getAttribute(String name);用于从ServletRequest对象中返回指定名称的属性值
		String name = (String) req.getAttribute("name");
		//sendRedirect不能传递数据因为他是重定位
		System.out.println("OtherServlet--name=="+name);
		
	}
	
}

            上面的测试是由Servlet程序访问Html/其他的Servlet

            我们能不能通过html访问Servlet程序?

            能,有三种方式

            1.通过html的表单元素

            2.通过html的超链接

            3.通过javascript的ajax发送异步请求

      例如:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
&l
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值