javaweb基础——RequestDispatcher接口
Posted 名字真的很急用
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaweb基础——RequestDispatcher接口相关的知识,希望对你有一定的参考价值。
在开发中访问到一个web资源后,需要服务器跳转到另一个资源去处理请求,可以通过sendRedirect重定向方法来实现,也可以通过RequestDispatcher转发对象的forWord方法来实现。
得到转发的对象:RequestDispatcher forWords = request.getRequestDispatcher(“另一个资源的路径”);
常用方法:
实现请求转发:forWords.forword(request,response);
实现请求包含:forWords.include(request,response);
请求转发
@WebServlet("/tom")
public class requestforword extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("name","tom");
RequestDispatcher dispatcher = req.getRequestDispatcher("receive");
dispatcher.forward(req,resp);
}
}
@WebServlet("/receive")
public class requestReceive extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object name = req.getAttribute("name");
/*String names = (String)name;
resp.getWriter().write(names);*/
resp.getWriter().write(name.toString());
}
}
重定向
<body>
<form action="/login">
<h2>密码或者用户名错误!请重新输入......</h2>
用户名:<input type="text" name="name">
<br>
密码:<input type="password" name="pass">
<br>
<input type="submit" value="提交">
</form>
</body>
@WebServlet("/login")
public class logins extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String pass = req.getParameter("pass");
if("admin".equals(name) && "12345".equals(pass)){
resp.sendRedirect("/success.html");
}
else {
resp.sendRedirect("/login.html");
}
}
}
请求转发:
特点:发送了一次请求,响应了一次,和request域对象配合使用,可以实现值的传递,
转发路径:转发动作是在服务器内部实现的,所以转发路径不要携带项目名称。
请求重定向:
特点:发送了二次请求,响应了二次,不能和request域对象配合使用,
重定向路径:重定向动作是在浏览器执行的,所以路径需要携带项目名称
请求包含:
特点:发送一次请求,请求包含是由服务器完成的
请求包含的路径:是在服务器内部完成的,不需要携带项目名称。
@WebServlet("/including")
public class including extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
//获取转发对象
RequestDispatcher inclued = req.getRequestDispatcher("inclued?p=abc");
//请求包含动作
PrintWriter writer = resp.getWriter();
writer.write("including before"+"<br/>");
//区包含被包含对象
inclued.include(req,resp);
writer.write("including after");
}
}
@WebServlet("/inclued")
public class inclued extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取输出字符流
PrintWriter writer = resp.getWriter();
//输出一段中文
writer.write("文华东方"+"<br/>");
writer.write("request uri:"+req.getRequestURI()+"<br/>");
writer.write("request :"+req.getServletPath()+"<br/>");
writer.write("getparameter:"+req.getParameter("p")+"<br/>");
}
}
以上是关于javaweb基础——RequestDispatcher接口的主要内容,如果未能解决你的问题,请参考以下文章
JavaWeb1.3.3基础加强:注解案例(注解+反射重构"JavaWeb-1.2.3基础加强:案例(反射+配置文件))