java Servlet实现及转发、重定向
一、实现Servlet接口
package com.example.demo.servlet;
import javax.servlet.*;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet(name = "myServlet", urlPatterns = "/myServlet",initParams = {
@WebInitParam(name = "p1", value = "param1"),
@WebInitParam(name = "p2", value = "param2")
})
public class MyServlet implements Servlet {
private ServletConfig config;
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.err.println("初始化Servlet。。。");
this.config=servletConfig;
String name=config.getServletName();
System.err.println("Servlet别名:"+name);
System.err.println("初始化参数1:"+config.getInitParameter("p1"));
System.err.println("初始化参数2:"+config.getInitParameter("p2"));
}
@Override
public ServletConfig getServletConfig() {
System.err.println("获取Servlet配置。。。");
return config;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.err.println("处理业务。。。");
//防止中文乱码
servletResponse.setContentType("text/html;charset=utf-8");
//写出到浏览器
servletResponse.getWriter().write("myServlet...厉害了");
}
@Override
public String getServletInfo() {
System.err.println("获取Servlet信息。。。");
return "我是Servlet信息";
}
@Override
public void destroy() {
System.err.println("销毁Servlet。。。");
}
}
运行项目,请求路径http://localhost:81/myServlet。浏览器结果:
控制台打印结果:
初始化Servlet。。。
Servlet别名:myServlet
初始化参数1:param1
初始化参数2:param2
处理业务。。。
二、继承HttpServlet类
package com.example.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "firstServlet", urlPatterns = "/firstServlet")
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//防止中文乱码
response.setContentType("text/html;charset=utf-8");
//写出到浏览器
response.getWriter().write("firstServlet...厉害了");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
运行项目,访问http://localhost:81/firstServlet。浏览器结果:
三、重定向和转发
1、重定向
package com.example.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "firstServlet", urlPatterns = "/firstServlet")
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//重定向到http://localhost:81/myServlet(下面两句话是一个意思)
// response.sendRedirect("myServlet");
response.sendRedirect("http://localhost:81/myServlet");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
请求http://localhost:81/firstServlet。看开发者工具,发现进行了两次请求。先请求firstServlet,然后重新请求myServlet。
控制台:
初始化Servlet。。。
Servlet别名:myServlet
初始化参数1:param1
初始化参数2:param2
处理业务。。。
处理业务。。。
2、转发
package com.example.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "firstServlet", urlPatterns = "/firstServlet")
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//转发到http://localhost:81/myServlet
request.getRequestDispatcher("myServlet").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
请求http://localhost:81/firstServlet。看开发者工具,发现只请求了firstServlet,但请求返回的内容是myServlet的。
响应内容:
重定向可以访问外部资源,转发不可以。下面重定向到百度。
package com.example.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "firstServlet", urlPatterns = "/firstServlet")
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//重定向到百度
response.sendRedirect("https://www.baidu.com/");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
浏览器结果