Servlet
1:servlet定义
servlet是开发动态web的一门技术,通过servlet实现与用户的动态交互。
2:使用方式
(1)javaWeb中只需要继承HttpServlet接口,重写其中的doGet和doPost方法即可编写一个servlet;写好servlet程序后需要在web.xml文件中编写映射,相当于将我们缩写的servlet注册到web服务器中,这样当用户来访问时就能从web服务器中访问到对应的servlet;servlet映射需要先编写一个servlet,注册当前servlet对应我们所编写的哪个类,还需要编写一个servlet-mapping来匹配我们所注册的这个servlet的请求路径(请求路径可匹配多个,也可指定通用请求路径---明确指定的固有映射路径优先级高于通用请求路径)
<servlet>
<servlet-name>自定义servlet的名字</servlet-name>
<servlet-class>对应servlet的类路径</servlet-class>
</servlet>
<!-- 一个servlet对应一个Mapping:映射-->
<servlet-mapping>
<servlet-name>自定义servlet的名字</servlet-name>
<!-- 请求路径-->
<url-pattern>/自定义请求路径</url-pattern>
</servlet-mapping>
(2)在javaWeb中,每编写一个servlet都需要去web.xml中进行注册,到springMVC阶段,DispatcherServlet简化了一一注册的操作。该阶段只需要在web.xml中注册一个通配的DispatcherServlet,并为其绑定一个spingMVC配置文件,将mapping路径设置为通配路径,之后每次有请求到web服务器都会经过DispatcherServlet。
此时,对于请求具体映射到哪个类进行处理的操作就转移到了DispatcherServlet绑定的spingMVC配置文件中。在配置文件中需要配置三个基础bean,如下所示,分别是,处理器映射器、处理器适配器、视图解析器。这三个bean完成了用户请求过来以后的请求路径匹配、映射、以及对后台返回数据进行解析。
大致流程是,处理器映射器首先需要先寻找是否有对应能处理用户请求的servlet,大家此时可能会好奇,那它怎么寻找呢?我们到目前位置并没有在任何位置声明每个servlet对应的请求路径!其实很简单,springMVC确实简化了一次又一次的servlet注册和mapping流程,但在配置文件中,需要以bean的形式配置每个controller类对应的请求路径,bean中只需指定id=“对应的请求路径”,class=“对应请求路径的controller类的路径”。对javaWeb熟悉的读者可能发现,之前javaWeb中每次匹配的都是一个继承了HttpServlet的servlet处理类,但此时确直接匹配的是controller类。没错!这就是javaWeb干的事情之一:将url直接映射到java类,而不需要继承HttpServlet类,在其中对请求进行处理。
当处理器映射器找到有处理该请求的java类时,通知DispatcherServlet,然后DispatcherServlet调用处理器适配器去处理调用对应的controller类去请求;
请求处理完成后会返回一个ModelAndView对象,该对象将请求处理后的数据进行了封装。此时又会发现,怎么多了一个之前没见过的请求返回模型???这就是JavaMVC干的第二件事!封装数据,将处理数据和操作页面进行了封装!既然多了一个封装对象,那返回后,要反馈给用户自然需要先对对象进行解析,再把结果展示给用户,此时该任务就交给了视图解析器负责。
以上就是springMVC阶段大致的请求处理流程,作者也是初学,记录一下~
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--视图解析器:DispatcherServlet给他的ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
请求响应
1:javaWeb阶段
web容器在启动的时候,它会为每个web程序都创建一个对应的servletContext对象,它代表了当前的web应用。在该web中的各类servlet接口都可以通过servletContext来传递和共享数据。也可以通过session进行数据存储及交互。
简单补充一个session和cookie的点:session是存在服务端的,有效期是一次会话,cookie是存在客户端的,每次请求有效;目前的主流方式是将session和cookie一起使用,session中存储核心数据,cookie存储不是那么重要的数据。
前端动态web技术jsp,jsp中可以嵌入java代码,来进行动态的数据处理及反馈。jsp本质上也是一个servlet,将页面代码非java代码部分直接流输出,java代码不变,返回给服务器,展示给用户。
jsp中有几个常用对象,用来数据交互,如下所示。
pageContext.setAttribute("name1","zyy01");//保存的数据只在一个页面中有效
request.setAttribute("name2","zyy02");//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","zyy03");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","zyy04");//(相当于servletContext)保存的数据只在服务器中有效,从打开服务器到关闭服务器
2:javaMVC阶段
通过Model对象封装数据及页面实现数据交互及页面跳转;
使用注解实现请求处理开发:@controller将该接口注册为bean由spring托管,在配置文件中配置扫描对应包的controller接口;在每个处理请求的方法上设置请求路径,如@RequestMapping等,在配置文件中配置<mvc:annotation-driven />注解驱动和mvc:default-servlet-handler/静态资源默认servlet配置;最后配置视图解析器