2021-04-21 08:34  阅读(118)
文章分类:Servlet 简单教程 文章标签:Servlet
©  原文作者:一点教程 原文地址:http://www.yiidian.com/servlet/

1 什么是URL重写

在URL重写中,我们将标记或标识符添加到下一个Servlet或下一个资源的URL。我们可以使用以下格式发送参数名称/值对:

    
    url?name1=value1&name2=value2&??

名称和值使用等号分隔,参数名称/值对与另一个参数使用&符号分隔。当用户单击超链接时,参数名称/值对将被传递到服务器。在Servlet中,我们可以使用getParameter()方法获取参数值。

2 URL重写的优势

  1. 无论是否禁用Cookie(与浏览器无关),它将始终有效。
  2. 不需要在每个页面上提交额外的表单。

3 URL重写的缺点

  1. 它仅适用于URL链接。
  2. 它只能发送文本(字符串)信息。

4 URL重写的案例

在下面的示例中,我们使用URL链接维护用户的状态。为了实现此目的,我们将用户名附加在查询字符串(queryString)中,并从另一页面的查询字符串(queryString)中获取值。

4.1 编写页面

index.jsp:

    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>一点教程网-URL重写案例</title>
    </head>
    <body>
    <form action="servlet1">
        用户名:<input type="text" name="userName"/><br/>
        <input type="submit" value="提交"/>
    </form>
    </body>
    </html>

4.2 编写FirstServlet

FirstServlet:

    
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    /**
     * 一点教程网 - http://www.yiidian.com
     */
    public class FirstServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            try{
    
                response.setContentType("text/html;charset=utf-8");
                PrintWriter out = response.getWriter();
    
                String n=request.getParameter("userName");
                out.print("欢迎 "+n);
    
                //把用户名追加到查询字符串后面
                out.print("<a href='servlet2?uname="+n+"'>访问</a>");
    
                out.close();
    
            }catch(Exception e){
                System.out.println(e);
            }
        }
    }

4.3 编写SecondServlet

SecondServlet:

    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     * 一点教程网 - http://www.yiidian.com
     */
    public class SecondServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            try{
    
                response.setContentType("text/html;charset=utf-8");
                PrintWriter out = response.getWriter();
    
                //从查询字符串获取用户名
                String n=request.getParameter("uname");
                out.print("你好 "+n);
    
                out.close();
    
            }catch(Exception e){
                System.out.println(e);
            }
        }
    }

4.4 配置web.xml

    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <servlet>
            <servlet-name>FirstServlet</servlet-name>
            <servlet-class>FirstServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>FirstServlet</servlet-name>
            <url-pattern>/servlet1</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>SecondServlet</servlet-name>
            <servlet-class>SecondServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>SecondServlet</servlet-name>
            <url-pattern>/servlet2</url-pattern>
        </servlet-mapping>
    
    </web-app>

4.5 运行测试

20210421083112_1.png

2021042108318_2.png

点击“访问”后,通过URL传递了用户名,效果如下:

2021042108312_3.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Servlet中实现URL重写
上一篇
Servlet中使用表单隐藏域
下一篇
Servlet中HttpSession使用