å½“ä½ åœ¨ Java Servlet ä¸éœ€è¦å®ç°é¡µé¢çš„è·³è½¬æ—¶ï¼Œä½ å¯ä»¥ä½¿ç”¨ response.sendRedirect() 方法。
response.sendRedirect() 方法的作用是将请求é‡å®šå‘到å¦ä¸€ä¸ªä½ç½®ã€‚它会å‘é€ä¸€ä¸ª HTTP å“应ç 302(Moved Temporarily),将æµè§ˆå™¨é‡å®šå‘到指定的页é¢ã€‚
åœ¨æœ¬ç¯‡æ–‡ç« ä¸ï¼Œæˆ‘们将会介ç»å¦‚何使用 response.sendRedirect() 方法æ¥å®ç°é¡µé¢è·³è½¬ã€‚
1. 什么是 response.sendRedirect() 方法?
response.sendRedirect() 方法是 ServletResponse æ¥å£çš„一部分。它å¯ä»¥è®©ä½ é‡å®šå‘请求到一个新ä½ç½®ã€‚
这个新ä½ç½®å¯ä»¥æ˜¯ä¸€ä¸ªå®Œæ•´çš„ URL,也å¯ä»¥æ˜¯ä¸€ä¸ªç›¸å¯¹äºå½“å‰ Servlet 上下文的路径。
2. response.sendRedirect() 方法的è¯æ³•
public void sendRedirect(String location) throws IOException
å‚数说æ˜ï¼š
- location:é‡å®šå‘çš„ç›®æ ‡ä½ç½®ã€‚它å¯ä»¥æ˜¯ä¸€ä¸ªå®Œæ•´çš„ URL 或一个相对äºå½“å‰ Servlet 上下文的路径。
3. response.sendRedirect() 方法的使用
è¦ä½¿ç”¨ response.sendRedirect() 方法,首先需è¦è·å– HttpServletResponse 对象。
在 doGet() 或 doPost() 方法ä¸ï¼Œä½ å¯ä»¥é€šè¿‡è°ƒç”¨æ–¹æ³• req.getRequestDispatcher("ç›®æ ‡é¡µé¢").forward(req,resp); 处ç†å®Œä¸šåŠ¡é€»è¾‘然å用forwardè·³è½¬åˆ°ç›®æ ‡é¡µé¢ã€‚
示例代ç :
```
@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 处ç†ä¸šåŠ¡é€»è¾‘
// 定义é‡å®šå‘ä½ç½®
String redirectURL = "http://www.baidu.com";
// é‡å®šå‘到指定的ä½ç½®
resp.sendRedirect(redirectURL);
}
}
```
在这个例åä¸ï¼Œè°ƒç”¨äº† resp.sendRedirect() 方法,将请求é‡å®šå‘到百度的官网。
4. response.sendRedirect() 方法的注æ„事项
- 如æœä½ 在å“应æ£æ–‡ä¸ä½¿ç”¨äº† response.sendRedirect() æ–¹æ³•ï¼Œå®ƒå°†ä¼šè¢«å¿½ç•¥ã€‚è¿™æ˜¯å› ä¸ºé‡å®šå‘å,å“应æ£æ–‡å·²ç»ä¸¢å¤±äº†ã€‚
- åœ¨æœ‰äº›æƒ…å†µä¸‹ï¼Œä½ å¯èƒ½éœ€è¦åœ¨å¤„ç†è¯·æ±‚之å‰å°±è¿›è¡Œé‡å®šå‘。在这ç§æƒ…å†µä¸‹ï¼Œä½ å¯ä»¥ä½¿ç”¨ HttpServletResponse 类的一个é‡è½½æ–¹æ³• sendRedirect()。它需è¦ä¸€ä¸ª HttpServletResponse å¯¹è±¡ï¼Œå› ä¸ºåœ¨è¯·æ±‚è¿˜æ²¡æœ‰è¢«å¤„ç†æ—¶éœ€è¦å°†è¯·æ±‚é‡å®šå‘。
5. response.sendRedirect() 和 request.getRequestDispatcher().forward() 的区别
request.getRequestDispatcher().forward() 是å‰ç«¯è·³è½¬ï¼Œåªæ˜¯ä¸€ä¸ªè¯·æ±‚转å‘,请求地å€æ 里的 URL ä¸ä¼šæ”¹å˜ã€‚
而 response.sendRedirect() 是å端跳转,是一个请求é‡å®šå‘,å³æµè§ˆå™¨é‡æ–°å‘æœåŠ¡å™¨å‘起请求,请求地å€æ 里的 URL 会改å˜ã€‚这就æ„味ç€æµè§ˆå™¨ä¼šè®°ä½ä¸¤ä¸ªè¯·æ±‚å“åº”ï¼Œé€ æˆä¸€å®šçš„负担。
å› æ¤ï¼Œå½“我们需è¦è¿›è¡Œå…¶ä»– Servlet å’Œ JSP 之间的转æ¢æ—¶ï¼Œå»ºè®®ä½¿ç”¨ request.getRequestDispatcher().forward()。
6. 结论
é€šè¿‡æœ¬ç¯‡æ–‡ç« ï¼Œä½ å·²ç»äº†è§£äº†å¦‚何在 Java Servlet ä¸ä½¿ç”¨ response.sendRedirect() 方法æ¥å®ç°é¡µé¢è·³è½¬ã€‚ä½ è¿˜å¦ä¹ 了一些å“应æ£æ–‡ä¸ä¸éœ€è¦é‡å®šå‘的注æ„事项。
在å®é™…应用ä¸ï¼Œå¦‚æœä½ 需è¦è½¬åˆ°å¦ä¸€ä¸ª Servlet 或 JSP,å¯ä»¥ä½¿ç”¨ request.getRequestDispatcher().forward()。而如æœä½ 需è¦é‡å®šå‘到一个ä¸åŒçš„ URL,或者需è¦åœ¨ä¸šåŠ¡é€»è¾‘处ç†å‰å°±è¿›è¡Œé‡å®šå‘ï¼Œé‚£ä¹ˆä½ å¯ä»¥ä½¿ç”¨ response.sendRedirect()。