Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
实际上就是一个实现了servlet接口的java类,可以实现动态web的开发,有了servlet,就可以处理网页传过来的数据,然后将结果返回。
Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序效果差不多。但比起GCI,servlet的优势体现在它的几个特性上。
1.可移植性:依托于Java语言的跨平台
2.可扩展性,高效:单例多线程,不像CGI一次请求一个实例
3.安全的:依托Java特性,更安全,少错误
联系
区别
(oldServlet)
1.浏览器请求request
2.服务器,servlet处理请求
3.响应response浏览器
servlet官方文档:http://tomcat.apache.org/tomcat-5.5-doc/servletapi/
javax.servlet包——包含servlet或Web容器使用的许多接口和类,协议无关。
javax.servlet.http包——包含的接口和类仅适用于http协议。
*GenericServlet是与协议无关的抽象类,因此可以被扩展成使用其它协议的Servlet,如Ftp,SMTP等,一般web应用用不到除HttpServlet以外的
每个servlet必须继承 javax.servlet.GenericServlet 和 javax.servlet.http.HttpServlet的其中一个
(源码理解这张实现、继承图)
(demo)
有抽象方法service(),继承时必须重写service()方法(不重写就会报错)
有方法service(),但继承时不需要重写service()方法,service()会负责调用请求对应的方法,即下列方法中的一种
但是必须至少重写下列方法中的一个:(为什么不重写service(),查看源码,因为httpservlet继承genericservlet,并且重写了其service,使得service()方法里一一对应下列方法)
doGet()
– 处理GET请求,用于向服务器获取数据doPost()
– 处理POST请求,用于向服务器发送数据实例不存在:用户请求——>当servlet实例不存在时——>装载servlet并创建servlet实例——>①初始化:调用init()方法——>②响应请求:调service()方法。由service()根据提交方式选择调用doGet() 或 doPost()方法——>③终止:调destroy()方法
实例存在:用户请求——>当servlet实例存在时——>①响应请求:调service()方法——>②终止:调destroy()方法
没有webapplication选项的情况:
新建普通项目,一直next
然后选中项目 右键,“Add Framework Surpport”增加项目框架
选“Web Application”
- doGet() – 处理GET请求,用于向服务器获取数据
- doPost() – 处理POST请求,用于向服务器发送数据
这篇博客写的太生动形象了,通俗易懂:
https://blog.csdn.net/fgx_123456/article/details/77808304
request.getRequestDispacther("/test.jsp").forword(request,response);
从字面上也可以理解:带着request,response向test.jsp前进!
response.sendRedirect(“test.jsp”);
从字面上也可以理解:返回客户端一个叫test.jsp的页面。
方法 | 区别 |
---|---|
request.getRequestDispatcher | 服务器内部跳转,地址栏信息不变,只能跳转到web应用内的网页 |
response.sendRedirct | 页面重定向,地址栏信息变,可跳转到任意网页 |
方法 | 怎么选择 |
---|---|
request.getRequestDispatcher(数据保存) | 前后页面间有数据传递时,后面的页面要用前面页面的数据时 |
response.sendRedirct(数据不保存) | 没有数据传递 |
<servlet>
<servlet-name>OldServletservlet-name>
<servlet-class>com.bluemsun.servlet.OldServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>OldServletservlet-name>
<url-pattern>/oldServleturl-pattern>
servlet-mapping>
(附代码演示理解) <servlet>
<servlet-name>LifeCycleServletservlet-name>
<servlet-class>com.bluemsun.servlet.ServletLifeCycleservlet-class>
<load-on-startup>0load-on-startup>
servlet>
<servlet>
<servlet-name>TestServletservlet-name>
<servlet-class>com.bluemsun.servlet.TestServletservlet-class>
<init-param>
<param-name>firstparam-name>
<param-value>这是第1个初始化参数param-value>
init-param>
<init-param>
<param-name>secondparam-name>
<param-value>这是第2个初始化参数param-value>
init-param>
servlet>
https://blog.csdn.net/mytt_10566/article/details/70173007
@WebServlet(name = "TestServlet",
urlPatterns = "/test",
loadOnStartup = 1,
initParams = {
@WebInitParam(name="first", value="这是第1个初始化参数"),
@WebInitParam(name="second", value="这是第2个初始化参数")}
)
(testServlet+官方文档)
对应关系:Servlet与JSP九大内置对象的对应关系
getParameter() VS getAttribute()区别:
setAttribute,getAttribute方法
request,session,application都可以调用,根据他们的生命周期而定
servlet三个作用域
request,session,application(作用域demo)
getRealPath()、getContextPath()区别:
servlet高级:filter、会话跟踪…
MVC 全称 Model View Controller,包含模型Model、视图View、控制器Controller。
MVC是一种框架模式,用于分层开发,可以将页面显示(如:html,jsp)、逻辑(如:servlet)、数据分开,可以让前端专注于页面展示,后端专注于业务逻辑。
低耦合
降低了视图与业务逻辑间的双向偶合,比如jsp,如果更改控制层,不用重新一起编译视图层,哪一部分需要修改,只用改对应的部分,不会牵连到其他层。
重用性高
多个视图可以请求访问一个服务器端,由一个服务器端处理逻辑,比如手机端和电脑端的访问,视图可能有差别,但用的服务器里的代码都是一样的
可维护性高
因为视图层和逻辑层分开了,所以项目的维护和修改更加容易。
三层架构:表示层UI(web层)、业务逻辑层BLL(service层)、数据访问层DAL(dao层)
图片来源:https://blog.csdn.net/weixin_41896463/article/details/89892612
Struts、Spring MVC、ASP.NET MVC、Zend Framework等等
参考:
servlet官方文档:http://tomcat.apache.org/tomcat-5.5-doc/servletapi/
servlet参考博客:https://www.cnblogs.com/whgk/p/6399262.html
https://www.cnblogs.com/xdp-gacl/p/3760336.html
mvc参考博客:https://blog.csdn.net/weixin_41896463/article/details/89892612
课后:
1.预习博客,预习mysql基本语法,创建数据库、修改数据库、基本的增删改查、mysql数据类型等
2.修改上次的jsp为jsp+servlet,分离页面和逻辑代码,记录修改过程