Servlet基础
来源:互联网 发布:dnf淘宝买金币安全吗 编辑:程序博客网 时间:2024/05/29 07:31
一. 什么是servlet
- servlet是在服务器上运行的小程序。一个servlet就是一个java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的servlet程序。
- jsp的前身就是servlet
二. Tomcat容器等级
Tomcat容器分为四个等级:
1)Container 容器,集装箱
2)Engine 引擎容器
3)Host 主机()
4)Servlet容器(tomcat最低级别的容器)里面包含了一个或多个Context
—— Context (上下文,背景,环境) 一个context对应一个web项目
—— Wrapper 容器里的封装部分。
三. 第一个Servlet
创建一个Servlet需要经过以下步骤:
1)新建一个Java类,继承“javax.servlet.http.HttpServlet”;
2)实现“doGet()”方法或“doPost()”方法处理不同请求
package servlet;import java.io.*;import javax.servlet.ServletException;import javax.servlet.http.*;//继承HttpServletpublic class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("处理get请求"); response.setContentType("text/html;charset=utf-8"); //设置解析类型及编码 PrintWriter out = response.getWriter(); //获取输出流 out.println("<em>收到你的get...</em><br>"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("处理post请求"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); //获取输出流 out.println("<em>收到你的post...</em><br>"); }}
3)在应用配置文件“web.xml”中注册新建的Servlet;
<servlet> <servlet-name>HelloServlet</servlet-name> //servlet名字 <servlet-class>servlet.HelloServlet</servlet-class> //servlet类(详细到包) </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> //servlet名字 <url-pattern>/servlet/HelloServlet</url-pattern> //该类文件的相对路径 </servlet-mapping>
这样,在jsp页面中通过get或post请求该servlet,servlet做出响应
<body> <h1>第一个servlet</h1> <hr> <a href="servlet/HelloServlet">get方式请求servlet</a> <form action="servlet/HelloServlet" method="post"> <input type="submit" value="post方式请求servlet"> </form> </body>
使用myeclipse在src中新建servlet文件,可以自动继承HttpServlet,并在web.xml中完成注册
对于以上代码,存在这样的执行流程:
1、提交超链接请求后,服务器会在web.xml中的<servlet-mapping>
寻找对应的url(url-pattern)地址,然后得到这个servlet的名称。
2、得到名称后,在servlet中寻找名称相同的标签,然后得到处理类(servlet-class文件)
3、进入servlet处理类,根据请求方式(get或者post)执行doGet或者doPost)方法
四. Servlet的生命周期
Servlet装载的三种情况:
1、自动装载:某些Servlet如果需要在Servlet容器启动时就加载,需要在web.xml下它的<Servlet>
标签里中,添加优先级代码: <Servlet>
<load-on-startup>1<load-on-startup>
</Servlet>
数字越小表示该servlet的优先级越高,会先于其他自动装载的优先级较低的先装载
2、Servlet容器启动后,客户首次向某个Servlet发送请求时,Tomcat容器会加载它
3、当Servlet类文件被更新后,也会重新自动加载
Servlet是长期驻留在内存里的。某个Servlet一旦被加载,就会长期存在于服务器的内存里,直到服务器关闭
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。
当服务器关闭时,会调用Servlet的destroy()方法Servlet销毁
五. 获取Jsp内置对象
六. Servlet路径跳转
例如,图中这种目录结构
1、JSP跳转到Servlet
1)相对路径 <a href="servlet/HelloServlet"></a>
*注意:如果写成”/servlet/TestServlet”会报错,因为第一个’/’表示的是【服务器根目录:http://localhost:8080/】
2)绝对路径,通过内置成员变量path实现,<a href="<%=path%>/servlet/TestServlet"></a>
。
*注意:这里的path得到的是项目根目录,如【http://localhost:8080/ServletDemo】
2、Servlet跳转JSP
1)请求重定向:response.sendRedirect(request.getContextPath()+"/index.jsp");
这里通过request.getContextPath()方法获得项目根目录,或者通过”../index.jsp”取得上层路径得到
2)服务器内部转发:request.getRequestDispatcher("../index.jsp").forward(req,resp);
3、web.xml中的<url-pattern>
<url-pattern>/servlet/RegServlet</url-pattern>
这里必须以/
开头,斜线表示项目的根目录
- Servlet基础----Hello Servlet!!!
- Servlet基础
- Servlet基础
- Servlet基础
- servlet基础
- Servlet 基础
- Servlet基础
- servlet基础
- Servlet 基础
- Servlet基础
- Servlet基础
- servlet基础
- Servlet基础
- Servlet ---- 基础
- servlet基础
- Servlet基础
- servlet基础
- Servlet基础
- python使用pip安装第三方库的方法
- logrotate
- python检测网格
- 类的初始化顺序
- JDBC
- Servlet基础
- 二叉树遍历——转载于网易博客summer
- phpdoc
- 2017-09-10 LeetCode_020 Valid Parentheses
- java volatile关键字的用法
- Qt 线程同步之 QWaitCondition
- HDU 6197 array array array(最长不下降子序列)
- 递归汉诺塔
- 利用nat123实现公网访问内网