Java Servlet教程—Servlet中的URL重写
Servlet中的URL重写
在URL重写中,我们将一个令牌或标识符附加到下一个Servlet或下一个资源的URL上。我们可以使用以下格式发送参数名称/值对:
url?name1=value1&name2=value2&??
名称和值之间使用等号=分隔,一个参数名称/值对与另一个参数之间使用和号(&)分隔。当用户点击超链接时,参数名称/值对将被传递到服务器。在Servlet中,我们可以使用getParameter()方法来获取参数值。
URL重写的优点
- 无论Cookie是否禁用,它都会工作(浏览器独立)。
- 每个页面上不需要额外的表单提交。
URL重写的缺点
- 它只适用于链接。
- 只能发送文本信息。
使用URL重写的示例
在这个示例中,我们使用链接来维护用户的状态。为此,我们在查询字符串中附加用户的名称,并在另一个页面从查询字符串中获取值。
index.html
<form action="servlet1">
Name:<input type="text" name="userName"/><br/>
<input type="submit" value="go"/>
</form>
FirstServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class FirstServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response){
try{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String n=request.getParameter("userName");
out.print("Welcome "+n);
//appending the username in the query string
out.print("<a href='servlet2?uname="+n+"'>visit</a>");
out.close();
}catch(Exception e){System.out.println(e);}
}
}
SecondServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SecondServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
try{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//getting value from the query string
String n=request.getParameter("uname");
out.print("Hello "+n);
out.close();
}catch(Exception e){System.out.println(e);}
}
}
web.xml
<web-app>
<servlet>
<servlet-name>s1</servlet-name>
<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>s1</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>s2</servlet-name>
<servlet-class>SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>s2</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
</web-app>