Servlet是什么
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Servlet的使用
在web.xml中配置文件
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>web.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
创建HelloWorldServlet
package web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorldServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setCharacterEncoding("gbk");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>welcome</title></head>");
out.println("你好啊");
out.println("</html>");
out.close();
}
}
Servlet的生命周期
servlet的生命周期简单的概述为4步:servlet类加载–>实例化–>服务–>销毁
package web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LifeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("service");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("service");
}
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("servlet销毁");
}
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
System.out.println("servlet初始化");
}
}
客户端跳转(重定向)与服务器端跳转(转发)
1.在servlet中获取session、application
package web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ForwardServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setAttribute("requestKey", "request值");
HttpSession session = request.getSession(); // 获取session
session.setAttribute("sessionKey", "session值");
ServletContext application = this.getServletContext();
application.setAttribute("applicationKey", "application值");
}
}
2.客户端跳转(重定向)
response.sendRedirect(“目标地址”);
response.sendRedirect("target.jsp"); // 客户端跳转(重定向)
在跳转页面获取值
<h1>目标地址</h1>
request值:<%=request.getAttribute("requestKey") %><br/>
session值:<%=session.getAttribute("sessionKey") %><br/>
application值:<%=application.getAttribute("applicationKey") %><br/>
运行结果
request值为null,故而客户端跳转无法获取request中的值
服务器端跳转(转发)
RequestDispatcher rd = request.getRequestDispatcher(“目标地址”);
rd.forward(request, response);
RequestDispatcher rd = request.getRequestDispatcher("target.jsp");
rd.forward(request, response); // 服务器端跳转(转发)
在跳转页面获取值
<h1>目标地址</h1>
request值:<%=request.getAttribute("requestKey") %><br/>
session值:<%=session.getAttribute("sessionKey") %><br/>
application值:<%=application.getAttribute("applicationKey") %><br/>
运行结果
request、session、application三个的值都获取得到