SERVLET 学习笔记
SERVLET 学习笔记
一、Servlet基本定义
Servlet是服务器端上面运行的一段小的java程序,一个servlet就是一个简答的java类。通常servlet都是通过请求和返回的模式来被访问的,客户端通过resuest请求,servlet则通过response来返回需要的内容。
二、Tomcat容器等级
Tomcat容器等级分为四个等级,由内向外分别是:context容器àSERVLET容器àHOST(主机)容器àENGINE(引擎)容器。其中,CONTEXT容器,一个CONTEXT容器对应着一个WEB工程,而CONTEXT容器又是被SERVLET容器管理的。
三、手动编写第一个SERVLET
手动编写自己servlet需要以下三个步骤:
1、 继承自HTTPServlet
2、 重写doGET()方法,或者是doPost()方法,具体要根据客户端的请求的action的方式来确定实现。
3、 不要忘记在web.xml文件中注册自己编写的servlet类。
Servlet的继承关系如下:
编写自己的第一个servlet如下:MyServlet.Java
package servlet; 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; import org.apache.log4j.Logger; /** * Servlet implementation class MyServlet */ public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final Logger LOGGER = Logger.getLogger(MyServlet.class); /** * @see HttpServlet#HttpServlet() */ public MyServlet() { System.out.println("装载当前的 servlet"); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { LOGGER.info("测试我的第一个servlet"); PrintWriter out = response.getWriter(); response.setContentType("text/html;charset=utf-8;"); out.println("<strong>get方式访问我的servlet成功!!</strong>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { LOGGER.info("测试我的第一个servlet"); PrintWriter out = response.getWriter(); response.setContentType("text/html;charset=utf-8;"); out.println("<strong>post方式访问我的servlet成功!!</strong>"); } @Override public void init() throws ServletException { // TODO Auto-generated method stub LOGGER.info("当前的 servlet init"); System.out.println("当前的 servlet init"); } }
Web.xml中的配置如下:
<servlet> <description>第一个测试的servlet</description> <display-name>MyServlet</display-name> <servlet-name>MyServlet</servlet-name> <servlet-class>servlet.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> </servlet-mapping>
JSP中的访问方式:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>servlet测试</title>
</head>
<body>
<h1>我的第一个SERVLET程序</h1>
<hr>
<a href="MyServlet">get 方式请求servlet</a>
<form action="MyServlet" method="post">
<input type="submit" value="post方式请求 servlet">
</form>
</body>
</html>
四、TOMCAT中装载SERVLET方式:
A、 Servlet容器自动装载servlet,这个需要在web.xml中配置注册servlet的时候,加上load-on-startup的配置,配置如下:
<servlet> <description>第一个测试的servlet</description> <display-name>MyServlet</display-name> <servlet-name>MyServlet</servlet-name> <load-on-startup>1</load-on-startup> <servlet-class>servlet.MyServlet</servlet-class> </servlet> 其中的数字越小,加载的优先级就会越高
B、 Client首次向servlet请求,tomcat容器会加载servlet
C、 Servlet的类文件被修改更新之后,tomcat容器会重新加载servlet
五、Servlet于JSP的九大内置对象
先有的servlet,之后才有的JSP,jsp的前身就是servlet
六、SERVLET的跳转路径
Servlet的跳转路径分为:绝对路径和相对路径两种方式
6.1 访问servlet的路径区分
绝对路径: <a href="<%=request.getContextPath()%>/aaa/MyServlet">get 方式请求servlet</a> 必须要加上项目的根目录 相对路径: <a href="aaa/MyServlet">get 方式请求servlet</a> 最前面不要“/”,此时加上斜线,表示是服务器的根目录,反而找不到对应的servlet。 切记:在 <url-pattern>/MyServlet</url-pattern>中配置路径一定是以“/”开头的,表示的是项目的根目录。
6.2 servlet 内部跳转的路径区分
1.请求重定向:redirect url会改变 相当于客户端重新请求 response.sendRedirect(request.getContextPath() + "/test.jsp"); 2.服务器内部跳转:forward url不会改变 request.getRequestDispatcher("/test.jsp").forward(request, response);
本文参考慕课网servlet的课程整理而成。
本文为原创作品,欢迎吐槽,转载请注明:http://www.cnblogs.com/lilin0719/