Servlet(Server Applet),全称
Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
一、访问servlet
1、创建一个Dynamic Web Project项目,记得后面要选上web.xml
2、新建一个SevletHelloWord 类,继承 HttpServlet
代码:
package servletTest1;
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 SevletHelloWord extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
// super.doGet(req, resp);
System.out.print("get");
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
// super.doPost(req, resp);
resp.setCharacterEncoding("gbk");//防止编码乱码
PrintWriter out=resp.getWriter();//PrintWriter文本输出
out.println("");
out.println("helloword");
out.println("Servlet hello word!");
out.println("");
out.close();//关闭
}
}
3、修改web.xml(在webconten目录里面),用Text 格式打开,不要用默认的xml格式
新增servlet访问的选项xml代码
servletHelloWord
servletTest1.SevletHelloWord
servletHelloWord
/helloWorld
4、启动tomcat 的Servers服务器,记得要添加该项目
5、开启成功后,在浏览器输入:http://localhost:8080/servletTest1/helloWorld,出现打印 说明成功了
说明:servlet启动顺序,输入网址:
http://localhost:8080/servletTest1/helloWorld,如图
二、servlet的生命周期
简单四步:servlet类加载-》实例化-》服务-》销毁
下面只简单说明,
public class LifeServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("service");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("service");
}
@Override
public void destroy() {
System.out.println("servlet销毁");
}
@Override
public void init() throws ServletException {
System.out.println("servlet初始化");
}
}
执行后输出:
其中初始化只会出现第一次,
destroy方法在容器移除servlet 时执行,同样只执行一次。这个方法会在所有的线程的service()方法执行完成或者超时后执行,调用这个方法后,容器不会再调用这个servlet的方法,也就是说容器不再把请求发送给这个servlet。这个方法给servlet释放占用的资源的机会,通常用来执行一些清理任务。
三、客户端跳转跟服务器端跳转
1、在Servlet中获取session,application
2、客户端跳转 :ersponse.sendRedirect("目标地址");
3、服务器跳转:RequestDispatcher rd=request.getRequestDispatcher("目标地址");
详细方法,新建一个target.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
目标地址
request值:<%=request.getAttribute("requestKey") %>
session值:<%=session.getAttribute("sessionKey") %>
application值:<%=application.getAttribute("applicationKey") %>
客户端跳转代码:
public class RedirectServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("requestKey", "request值");
HttpSession session=request.getSession(); // 获取session
session.setAttribute("sessionKey", "session值");
ServletContext application=this.getServletContext(); // 获取application
application.setAttribute("applicationKey", "application值");
response.sendRedirect("target.jsp"); // 客户端跳转/重定向
}
输出:
服务端跳转代码:
public class ForwardServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("requestKey", "request值");
HttpSession session=request.getSession(); // 获取session
session.setAttribute("sessionKey", "session值");
ServletContext application=this.getServletContext(); // 获取application
application.setAttribute("applicationKey", "application值");
RequestDispatcher rd=request.getRequestDispatcher("target.jsp");
rd.forward(request, response); // 服务器调转/转发
}
}
输出:
区别:服务端就跳转 能把request、session、application的值都传过来,
但是客户端不能把erquest的值传过来,一般用服务端跳转较多
主要参考java1234的servlet教程
点击打开链接