回顾 Servlet

一、Servlet 是什么

servlet其实就是一个接口,
servlet接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destroy(),还有一个处理请求的service(),也就是说,所有实现servlet接口的类,或者说,所有想要处理网络请求的类,都需要回答这三个问题:

  • 你初始化时要做什么
  • 你销毁时要做什么
  • 你接受到请求时要做什么

servlet容器

Servlet容器,顾名思义里面存放着Servlet对象。我们为什么能通过Web服务器映射的URL访问资源?借助知乎大佬的图片了解一下:
在这里插入图片描述

jsp其实就是servlet?

JSP = HTML + Java片段(各种标签本质上还是Java片段)

这个我也是看了别人的文章才知道,听说在很久以前的时候,java开发是没有jsp的,只有servlet,因此我们的动态HTML内容都是程序员通过在servlet的service方法中out.println('html标签'),后来学习了PHP的先进技术,在页面嵌入代码,于是jsp就产生了,但是JSP最终都会被转换成servlet,
jsp就是在html里面写java代码,servlet就是在java里面写html代码…其实jsp经过web容器解释之后就是servlet.只是我们自己写代码的时候尽量能让它们各司其职,jsp更注重前端显示,servlet更注重模型和业务逻辑。

tomcat

tomcat=web服务器+servlet容器
tomcat才是与客户端直接打交道的家伙,他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。

HttpServletRequest与HttpServletResponse

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。获取网页提交过来的数据,只需要找request对象就行了。要向网页输出数据,只需要找response对象。

现在使用了SpringMVC框架,虽然前后台交互的形式不一样了,但底层都是使用的这两个对象,为了防止忘记所以这里回顾一下。
response对象进行文件上传下载时可能需要调用他的几个方法:
setHeader(String name, String value) : 设置HTTP响应头中的一项内容。如果在响应头中已经存在这项内容,那么原先所做的设置将被覆盖。(我们经常返回给客户端文件的时候,需要设置文件描述setHeader(“Content-Disposition”,“文件名”),

我怀着好奇的心又去看了下响应头到底是啥,这里如果你跟我一样好奇还想知道具体有哪些响应头和请求头,请参考我转载的博客:常用请求头与响应头

setContentType()的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。MIME类型可参考:MIME类型表
setCharacterEncoding("utf-8");只是传送响应内容用UTF-8的编码格式来编码。

到这不得不说一下springMVC的前后台交互的问题:
前台–>后台:自然就是靠相同的参数的名字获取,不同名则需要在controller获取的时候使用一下注解,这里不多讲,底层都是靠request.getParement()等等方法去获取的

后台–>前台:
要实现Controller返回数据给页面,Spring MVC 提供了以下几种途径:

扫描二维码关注公众号,回复: 9123207 查看本文章

ModelAndView:将视图和数据封装成ModelAndView对象,作为方法的返回值,数据最终会存到HttpServletRequest对象中!
Model对象:通过给方法添加引用Model对象入参,直接往Model对象添加属性值。那么哪些类型的入参才能够引用Model对象,有三种类型,分别是 org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map。只要是这些类型的入参,都是指向Model对象的,而且不管定义多少个这些类型的入参都是指向同一个Model对象!
@SessionAttributes:通过给Controller类添加@SessionAttributes注解,该注解的name和value属性值都是Model的key值,意思是指Model中这些key对应的数据也会存到HttpSession,不仅仅存到HttpServletRequest对象中!这样页面可以共享HttpSession中存的数据了!
@ModelAttribute:使用@ModelAttribute注解的方法会在此Controller每个方法执行前被执行,指定@ModelAttribute的name或value都是一样的功能,都是作为key,将注解的方法返回的对象作为value存放到Model中,不指定name和value的话,则以注解的方法返回的类型名称首字母小写作为key。

当然,除了上述的途径,也可以使用传统的方式,那就是直接使用HttpServletRequest或HttpSession对象来存数据,页面上再去取,一般我们上传文件需要用到。

注意:Model中存的数据,最终都会存放到HttpServletRequest对象中,页面上可以通过HttpServletRequest对象获取数据。
发布了44 篇原创文章 · 获赞 3 · 访问量 1370

猜你喜欢

转载自blog.csdn.net/weixin_43329639/article/details/103500430
今日推荐