servlet入门&MVC 您所在的位置:网站首页 servlet的入口 servlet入门&MVC

servlet入门&MVC

2023-08-23 20:13| 来源: 网络整理| 查看: 265

一、servlet是什么

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。 使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

实际上就是一个实现了servlet接口的java类,可以实现动态web的开发,有了servlet,就可以处理网页传过来的数据,然后将结果返回。

Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序效果差不多。但比起GCI,servlet的优势体现在它的几个特性上。

二、servlet特性

1.可移植性:依托于Java语言的跨平台 2.可扩展性,高效:单例多线程,不像CGI一次请求一个实例 3.安全的:依托Java特性,更安全,少错误

三、servlet和jsp的区别和联系

联系

JSP是web开发技术,Servlet是服务器端运用的 小程序,我们访问一个JSP页面时,服务器会将这个JSP页面转变成Servlet 运行得到结果后,返给浏览器。

区别

JSP更多的是进行页面显示,Servlet更多的是处理业务

(oldServlet)

四、servlet工作流程

1.浏览器请求request 2.服务器,servlet处理请求 3.响应response浏览器 来源:https://www.cnblogs.com/whgk/p/6399262.html

五、Generic Servlet & HTTP Servlet

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的其中一个 (源码理解这张实现、继承图) 来源:https://www.cnblogs.com/deng-cc/p/7462866.html

(demo)

1. Generic Servlet

有抽象方法service(),继承时必须重写service()方法(不重写就会报错) 在这里插入图片描述

2. HTTP Servlet

有方法service(),但继承时不需要重写service()方法,service()会负责调用请求对应的方法,即下列方法中的一种

但是必须至少重写下列方法中的一个:(为什么不重写service(),查看源码,因为httpservlet继承genericservlet,并且重写了其service,使得service()方法里一一对应下列方法)

doGet() – 处理GET请求,用于向服务器获取数据doPost() – 处理POST请求,用于向服务器发送数据doPut() – 发送文件doDelete() –向服务器请求删除数据init() and destroy() – 用于初始化、销毁servlet生命周期getServletInfo() – 获取servlet基本信息,如版本、作者等

来源:https://beginnersbook.com/2013/05/working-of-servlets/

六、servlet生命周期(demo) 两种情况:

实例不存在:用户请求——>当servlet实例不存在时——>装载servlet并创建servlet实例——>①初始化:调用init()方法——>②响应请求:调service()方法。由service()根据提交方式选择调用doGet() 或 doPost()方法——>③终止:调destroy()方法

实例存在:用户请求——>当servlet实例存在时——>①响应请求:调service()方法——>②终止:调destroy()方法

来源:https://www.cnblogs.com/deng-cc/p/7462866.html 在这里插入图片描述

七、编写servlet 项目 1. IDEA创建servlet项目

在这里插入图片描述 在这里插入图片描述 在WEB-INF下新建classes,lib文件

classes 为项目编译输出位置 (可以直接继承project的编译输出位置out)lib 存放jar包(Tomcat有的jar包可以不放lib,lib可以存放其他jar包,比如c3p0等等) 在这里插入图片描述 修改项目编译位置为classes 在这里插入图片描述 配置依赖 在这里插入图片描述

在这里插入图片描述 选Jar Directory 在这里插入图片描述

没有webapplication选项的情况: 新建普通项目,一直next 然后选中项目 右键,“Add Framework Surpport”增加项目框架 在这里插入图片描述 选“Web Application” 在这里插入图片描述

2. servlet实现登录(demo) doGet() VS doPost()区别 doGet() – 处理GET请求,用于向服务器获取数据doPost() – 处理POST请求,用于向服务器发送数据 3. servlet 转发和重定向区别(demo)

这篇博客写的太生动形象了,通俗易懂: 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(数据不保存)没有数据传递 4. servlet配置(两种方法) 1). web.xml配置 可以有多个,映射多个url,*是通配符 OldServlet com.bluemsun.servlet.OldServlet OldServlet /oldServlet (附代码演示理解)标记容器何时加载servlet(实例化并调用init()方法)如果为 负值或者没有配置 ,则容器会当Servlet被请求时再加载如果为正整数或者0,则容器在应用启动时就加载并初始化值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。 LifeCycleServlet com.bluemsun.servlet.ServletLifeCycle 0 TestServlet com.bluemsun.servlet.TestServlet first 这是第1个初始化参数 second 这是第2个初始化参数 2). 注解配置@WebServlet

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个初始化参数")} ) 3)登录demo——相对路径问题 form表单action提交路径: 不加 “ / ” —> 匹配当前文件所在目录加 “ / ” —> 匹配项目根目录如果当前文件直接在根目录下,即可加可不加“/”加“ ./ ” —> 匹配当前文件所在 目录或子目录加“ . . / ” —> 匹配当前文件所在 父目录

参考: 关于路径前加于不加(/)反斜杠 实践:form表单的action路径加不加斜线

项目结构:注意所有jsp文件都是放在jsp目录下的!!!

在这里插入图片描述

servlet配置如下: LoginServlet com.bluemsun.servlet.LoginServlet LoginServlet /login form表单如下: 登录页面 登录 用户名: 密码: action路径四种写法,分别对应不同路径: //不加“/”,此时相对路径为 /jsp/login //加“/”,此时相对路径为 /login //加“./”,此时相对路径为 /jsp/login //加“../”,此时相对路径为 /login 5. servlet对象

(testServlet+官方文档) 在这里插入图片描述 对应关系:Servlet与JSP九大内置对象的对应关系

getParameter() VS getAttribute()区别:

getParameter()获取的是客户端请求的数据 getAttribute()获取的是服务器设置的参数getParameter()返回字符串 getAttribute()返回任意类型

setAttribute,getAttribute方法 request,session,application都可以调用,根据他们的生命周期而定

servlet三个作用域 request,session,application(作用域demo)

Request是一个请求内Session是一次会话中Application是多次会话(直到Tomcat关闭)

getRealPath()、getContextPath()区别:

获取绝对路径 getServletContext().getRealPath("/WEB-INF/web.html");返回响应的上下文路径 getServletContext().getContextPath());

servlet高级:filter、会话跟踪…

八、MVC 1. 发展 Model1:主要分为两层,视图层和模型层,其中JSP同时作为View、Controller,将页面展示和业务逻辑混在一起,耦合度高、代码的复用性低。Model2:MVC , 模型Model、视图View、控制器Controller 2. MVC是什么

MVC 全称 Model View Controller,包含模型Model、视图View、控制器Controller。

MVC是一种框架模式,用于分层开发,可以将页面显示(如:html,jsp)、逻辑(如:servlet)、数据分开,可以让前端专注于页面展示,后端专注于业务逻辑。

Model(模型) :模型主要负责业务逻辑的处理,包括如何将数据存入数据库、或者从数据库取出。View(视图) :视图也就是我们看的见的界面部分,将传来的数据进行了渲染、可视化。Controller(控制器) : 控制器作用于模型和视图上,也就是将视图传过来的数据交给模型处理,处理完后用把响应数据传给视图层渲染。 2. 特点

低耦合 降低了视图与业务逻辑间的双向偶合,比如jsp,如果更改控制层,不用重新一起编译视图层,哪一部分需要修改,只用改对应的部分,不会牵连到其他层。

重用性高 多个视图可以请求访问一个服务器端,由一个服务器端处理逻辑,比如手机端和电脑端的访问,视图可能有差别,但用的服务器里的代码都是一样的

可维护性高 因为视图层和逻辑层分开了,所以项目的维护和修改更加容易。

3. 三层架构和mvc关系

三层架构:表示层UI(web层)、业务逻辑层BLL(service层)、数据访问层DAL(dao层) 来源:https://blog.csdn.net/weixin_41896463/article/details/89892612 图片来源:https://blog.csdn.net/weixin_41896463/article/details/89892612

4. 常见的服务器mvc框架:

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,分离页面和逻辑代码,记录修改过程



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有