Servlet学习笔记《三》

又是半夜总结,困!!!!!!!!!

                 主要总结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("
   
   
"); pw.println("
"); pw.println("
"); pw.println("
用户名
"); pw.println("
"); pw.println(" "); pw.println("
"); pw.println("
密码
"); pw.println("
"); pw.println(" "); pw.println("
"); pw.println("
"); pw.println("
"); pw.println(" "); pw.println(" "); 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应用,那么表示成功了










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值