又是半夜总结,困!!!!!!!!!
主要总结servlet处理请求的方式,forward,include,redirect
任意目录部署web应用
总结一: forward include redirect
forward:直接就是将请求转发到别的servlet
include: servlet1将请求转发到其他servlet2,等到servlet2执行完,还要回来执行servlet1的代码的,
和forward的主要区别是,这玩意还会回来。
redirect:叫做重定向,顾名思义嘛,就是将请求的方向重新设置了,先发还给客户端,而不是在容器里面找
适合的servlet或者jsp,客户端得到重新设置好的资源文件,再重新向容器发出请求
客户端->servlet容器->客户端->servlet容器
首先比较forward include
思路:判断用户有没有登录,有就给他个欢迎界面,没有就给个登录界面,所以一开始肯定是登录界面,登录后
才是欢迎界面
代码一 :残缺的web.xml哈哈,有重点就够了!
Login
hjr.Login
Welcome
hjr.Welcome
Login
/login
Welcome
/Welcome
代码二:登录界面
package hjr;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author hjr
*/
public class Login extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter pw = response.getWriter();
pw.println("
");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}
代码三:处理请求的servlet类
package hjr;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Forward_IncludeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
PrintWriter pw = response.getWriter();
pw.println("
");
pw.println("登录界面");
pw.println("");
String name = request.getParameter("username");
String password = request.getParameter("password");
if ("huangjinrong".equals(name) && "12345678".equals(password)) {
ServletContext context = this.getServletContext();
RequestDispatcher rd = request.getRequestDispatcher("Welcome");
rd.forward(request, response);
} else {
RequestDispatcher rd = request.getRequestDispatcher("login");
rd.include(request, response);
}
pw.println("");
pw.close();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}
这个时候重点来了
我们仔细观察登录界面,是不是很奇怪????,它是残缺的!!!!!!!!,对,它的前面的代码已经又servlet类输出了,这个时候请求转到了登录界面,登录界面输出剩余代码,然后又回到servlet类,继续执行剩
下的代码,像</body></html>之类的代码,所以登录java类不需要写这个代码,这个就是include
forward呢,直接转发,不管原来servlet类死活,servlet代码统统滚蛋,接下来是我forward的主场,我
来重新操刀。
redirect呢,大家可以试试sendRedirect方法,比如引用WEB-INF里面的资源时,因为它的资源对客户端不可见,所以我们可以外部sendRedirect它,或者登陆时候,用户提交错的信息,我们在servlet处理时就可以重定向会登陆界面,让用户重新登陆。
好了,最后总结下任意目录部署web应用
我用tomcat容器为例子
比如我们在桌面新建一个Web应用文件夹,当然,里面的web文件结构要有
我们打开tomcat的安装目录,比如D:\apache-tomcat-9.0.0.M17\conf\Catalina\localhost
在这个路径下,你会发现和web应用程序同名的xml文件
我们新建一个和刚才新建的web应用文件夹同名的xml文件
写上比如:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" docBase="C:\Users\Administrator.LS--20170308ZNP\Desktop\mysql\WebApplication2\build\web" path="/WebApplication2"/>
docBase 后面加web应用文件夹的绝对路径,path呢 加上上下文路径。
一切准备好后,在浏览器打开tomcat主页比如localhost:8080
进去里面的管理web应用,看到刚才部署的web应用,那么表示成功了