使用JavaServlet重写URL

Url重写是在加载页面时附加或修改任何Url结构的过程。

null

客户端发出的请求总是一个新请求,服务器无法识别当前请求是由新客户端发送的,还是由前一个相同的客户端发送的。由于HTTP协议和Web服务器的这一特性,它们被称为无状态。但很多时候,我们应该知道谁是处理请求的客户。 例如: 在任何社交网站中,从登录到注销,服务器都应该知道谁是客户端,这样服务器就可以根据用户需要管理所有请求。 这个问题通过Servlet中的会话解决。

会议: 会话是客户端和服务器之间的一种状态,它包含客户端和服务器之间的多个请求和响应。正如我们所知,HTTP和Web服务器都是无状态的,维护会话的唯一方法是在每个请求和响应中,在服务器和客户端之间传递有关会话的某些唯一信息(会话id)。

以下是我们可以在请求和响应中提供唯一id的一些方法:

  • Servlet中的会话接口
  • 饼干管理
  • 网址重写

    网址重写

    如果您的浏览器不支持cookie,URL重写将为您提供另一种会话跟踪选项。URL重写是一种将请求的URL修改为包含会话ID的方法。有几种方法可以执行URL重写。 这里我们讨论的是会话管理技术,在这种技术中,我们将控制从一个servlet传递到另一个servlet。将控制从一个servlet传递到另一个servlet的语法如下

    // SecondServlet is the name of the servlet where you want to pass control
    out.print( "<a href='SecondServlet?uname=" + n + "'>visit</a>" );

    
    

    注: 通常我们写网络。请求调度器的xml文件,但在本例中,我们使用注释,因此它们不需要创建web。xml文件。

    注释的语法是:

    @WebServlet ( "/ServletName" ) // at the place of ServletName
    we have to write the name of our servlet file and this annotation
    should be written at the starting of class in servlet.

    
    

    使用注释重写URL进行会话跟踪的示例

    <!-- Save this file as Index.html -->
    <!DOCTYPE html>
    < html >
    < head >
    < meta charset = "UTF-8" >
    < title >Insert title here</ title >
    </ head >
    < body >
    < form action = "FirstServlet" method = "get" >
    Name:< input type = "text" name = "userName" />< br />
    < input type = "submit" value = "submit" />
    </ form >
    </ body >
    </ html >

    
    

    图片[1]-使用JavaServlet重写URL-yiteyi-C++库

    // Name this file as FirstServlet.java
    package GeeksforGeeks;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.*;
    @WebServlet ( "/FirstServlet" ) // annotation
    // this annotation is used for replacing xml file
    public class FirstServlet extends HttpServlet {
    // class name is FirstServlet which extends HttpServlet
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    {
    try {
    response.setContentType( "text/html" );
    /* The response's character encoding is only set
    from the given content type if this method
    is called before getWriter is called.
    This method may be called repeatedly to
    change content type and character encoding.*/
    PrintWriter out = response.getWriter();
    /*T he Java PrintWriter class ( java.io.PrintWriter ) enables you to
    write formatted data to an underlying Writer .
    For instance, writing int, long and other primitive data
    formatted as text, rather than as their byte values*/
    String n = request.getParameter( "userName" );
    //request.getParameter takes the value from index.html file
    // where name is username
    out.print( "Welcome " + n);
    // out.println is used to print on the client web browser
    //url rewriting is used for creating session
    //       it will redirect  you to SecondServlet page
    out.print( "<a href='SecondServlet?uname=" + n + "'>visit</a>" );
    out.close();
    }
    catch (Exception e) {
    System.out.println(e);
    }
    }
    }

    
    

    图片[2]-使用JavaServlet重写URL-yiteyi-C++库

    // Name this file as SecondServlet.java
    package GeeksforGeeks;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.*;
    @WebServlet ( "/SecondServlet" ) // annotation
    public class SecondServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    {
    try {
    response.setContentType( "text/html" );
    /*
    * The response's character encoding is only set from the given
    * content type if this method is called before getWriter is called.
    * This method may be called repeatedly to change content type and
    * character encoding.
    */
    PrintWriter out = response.getWriter();
    /*
    * The Java PrintWriter class ( java.io.PrintWriter ) enables you to
    * write formatted data to an underlying Writer . For instance,
    * writing int, long and other primitive data formatted as text,
    * rather than as their byte values
    */
    // getting value from the query string
    String n = request.getParameter( "uname" );
    out.print( "Hello " + n);
    /* out.println is used to print on the client web browser */
    out.close();
    }
    catch (Exception e) {
    System.out.println(e);
    }
    }
    }

    
    

    图片[3]-使用JavaServlet重写URL-yiteyi-C++库 程序流程 图片[4]-使用JavaServlet重写URL-yiteyi-C++库

    说明(按照图表) 当您在eclipse中部署项目时,第一个页面将加载到HTML表单中,其表单操作是first servlet,因此控件将转到servlet1。在本例中,我们将servlet1命名为FirstServlet,其中会打印用户名。在FirstServlet中,我们提供url,通过url重写将控件转移到servlet2。在本例中,我们将servlet2命名为SecondServlet。 URL重写的优点:

    • 它不依赖于cookies,无论cookies是启用还是禁用,它都会起作用
    • 并非所有页面都需要额外提交表格

    URL重写的缺点 它只适用于链接广告只能发送文本

  • © 版权声明
    THE END
    喜欢就支持一下吧
    点赞8 分享