Servlet基础
来源:互联网 发布:淘宝店铺复古港风推荐 编辑:程序博客网 时间:2024/06/15 20:19
一、什么是Servlet
Servlet是在服务器上运行的小程序。
一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问这个驻留在服务器内存里的Servlet程序。
二、Tomcat容器等级
三、手写第一个Servlet
注意:页面中的/代表服务器根目录,web.xml中/代表项目根目录,请求重定向的/代表服务器根目录,请求转发的/代表项目根目录。
index.jsp :
超链接地址不能用/servlet/HelloServlet,因为第一个/表示服务器的根目录,而不是上下文地址(项目根目录)。
表单中action=”servlet/HelloServlet”与超链接地址写法相同。
<%@ page contentType="text/html;charset=UTF-8" language="java" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>首页</title> </head> <body> <h1>第一个Servlet</h1> <hr> <a href="servlet/HelloServlet" target="_blank">Get请求</a> <hr> <form action="servlet/HelloServlet" name="loginForm" method="post"> <table> <tr> <td>用户名:</td> <td><input type="text" name="username"/></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password"/></td> </tr> <tr> <td colspan="2"><input type="submit" value="登录"></td> </tr> </table> </form> </body></html>
web.xml : url-pattern格式:/servlet/HelloServlet,必须以/开头,表示的是项目根目录
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/servlet/HelloServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>servlet.HelloServlet</servlet-class> </servlet></web-app>
servlet.HelloServlet :
请求重定向的地址: resp.sendRedirect(req.getContextPath() + “/index.jsp”);
服务器内部跳转:request.getRequestDispatcher(“/index.jsp”).forward(request, response); 或者使用 “../index.jsp”
编写Servlet的doPost方法时,需要抛出ServletExcpetion和IOException异常。
package servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("GET请求"); resp.setContentType("text/html;charset=UTF-8"); //以html格式响应 PrintWriter out = resp.getWriter(); out.println("<strong>Hello</strong>"); //重定向的地址 resp.sendRedirect(req.getContextPath() + "/index.jsp"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("POST请求"); resp.setContentType("text/html;charset=UTF-8"); //以html格式响应 PrintWriter out = resp.getWriter(); out.println("username: " + req.getParameter("username") + "<br>"); out.println("password: " + req.getParameter("password") + "<br>"); }}
Servlet3.0新特性(得Tomcat7.0版本及以上)
不会自动在web.xml中生成该Servlet对应的mapping信息,而是在Servlet代码中加入注解@WebServlet
/** * 注解WebServlet用来描述一个Servlet * 属性name描述Servlet的名字,可选 * 属性urlPatterns定义访问的URL,或者使用属性value定义访问的URL.(定义访问的URL是必选属性) */@WebServlet(name="",urlPatterns="/xxx")
四、Servlet执行流程与生命周期
Servlet容器装载Servlet:
Tomcat是通过反射来创建servlet实例的
初始化后的Servlet实例长期驻留在服务器内存
Servlet工作流程分为三个阶段。init(初始化),service(运行),destroy(销毁)
Servlet没有main方法,所有行为由Container控制。Container就是一个java程序。
在加载Servlet的.class后,Servlet会由构造函数生成一个实例,然后Container调用init()方法完成参数的初始化,接着调用service()方法,service会根据网页的请求,调用doGet或者doPost方法,最后调用销毁方法。整个流程如下图:
五、Servlet与JSP九大内置对象
六、Servlet与JSP比较
1> JSP也是Servlet,它其实就是为了能够更方便的输出数据到客户端,JSP能做的事,只要不怕费事,Servlet一样可以完成。
2> Servlet是被Context的类加载器加载的,所以重写Servlet需要重新部署Context,JSP有自己的加载器,所以在你修改了JSP文件之后,没感觉服务器有什么动作,修改内容就显示出来了。
3> JSP封装了大量Servlet中的对象,例如Request,ServletContext,Session等,使用起来极其方便。
4> JSP是 可视化文件,Servlet会被编译成class文件,前者可以拿任何一个编辑器修改,后者不行
理解以下三点即可:
1、不同之处在哪?
Servlet在Java代码中通过HttpServletResponse对象动态输出HTML内容
JSP在静态HTML内容中嵌入Java代码,Java代码被动态执行后生成HTML内容
2、各自的特点
Servlet能够很好地组织业务逻辑代码,但是在Java源文件中通过字符串拼接的方式生成动态HTML内容会导致代码维护困难、可读性差
JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑同样也是不可取的
3、通过MVC双剑合璧
既然JSP和Servlet都有自身的适用环境,那么能否扬长避短,让它们发挥各自的优势呢?答案是肯定的——MVC(Model-View-Controller)模式非常适合解决这一问题。
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller):
Controller——负责转发请求,对请求进行处理(Servlet)
View——负责界面显示(JSP)
Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现(JavaBeans)
在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示:
web浏览器发送HTTP请求到服务端,被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)
Controller(Servlet)调用核心业务逻辑——Model部分,获得结果
Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容
动态生成的HTML内容返回到浏览器显示
MVC模式在Web开发中的好处是非常明显,它规避了JSP与Servlet各自的短板,Servlet只负责业务逻辑而不会通过out.append()动态生成HTML代码;JSP中也不会充斥着大量的业务代码。这大大提高了代码的可读性和可维护性。
七、获取初始化参数
在web.xml中可以配置servlet初始化参数。在servlet中可以通过ServletConfig接口来获取这些参数。
web.xml :
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet-mapping> <servlet-name>TestServlet1</servlet-name> <url-pattern>/servlet/TestServlet1</url-pattern> </servlet-mapping> <servlet> <servlet-name>TestServlet1</servlet-name> <servlet-class>servlet.TestServlet1</servlet-class> <init-param> <param-name>username</param-name> <param-value>mook</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>123456</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet></web-app>
TestServlet1.java :
/** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { // Put your code here System.out.println("TestServlet1的init()方法..."); System.out.println(this.getInitParameter("username")); System.out.println(this.getInitParameter("password")); System.out.println(this.getServletConfig().getInitParameter("username")); }
启动服务器,部署项目:
TestServlet1构造方法....TestServlet1的init()方法...mook123456mook
- Servlet基础----Hello Servlet!!!
- Servlet基础
- Servlet基础
- Servlet基础
- servlet基础
- Servlet 基础
- Servlet基础
- servlet基础
- Servlet 基础
- Servlet基础
- Servlet基础
- servlet基础
- Servlet基础
- Servlet ---- 基础
- servlet基础
- Servlet基础
- servlet基础
- Servlet基础
- JS配置文件动态加载CSS,js和定义请求路径
- javaweb学习总结——获得MySQL数据库自动生成的主键
- XMLHTTPRequest如何访问需要安全验证的网站
- Exception:"xxxx.txt":1: premature EOF errors in crontab file, can't install.
- H.264抗误码策略及FMO
- Servlet基础
- 导出excel
- 形参与实参&值传递和地址传递
- 关于jwt的思考
- vue
- onblur和onlick
- Spring MVC源码深入剖析执行流程
- libsvm支持向量机参数的意义
- PHP —— Eclipse for php 环境搭建