java基础知识——Servlet,SpringMVC(执行流程,非注解配置,注解配置)

B/S:在这里插入图片描述

Servlet

Servlet Container
HttpServletRequest
HttpServletResponse
HttpServlet

加载阶段:调用无参构造函数实例化Servlet,根据web.xml的信息创建ServletConfig对象
init:将ServletConfig作为参数调用init方法
第一次创建 Servlet对象时调用,在后续每次用户请求时不再调用
单例多线程不安全:当存在不同的会话访问相同的servlet时,新建线程而不会实例化这个servlet对象,即多个线程在共享这个servlet实例以单例的形式存在的!并未使用同步机制,在并发编程下servlet是线程不安全的。

service() :接收到一个 Servlet 请求,在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
下面是该方法的特征:

public void service(ServletRequest request, 
                    ServletResponse response) 
      throws ServletException, IOException{
}

doGet() 方法
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
doPost() 方法

public void doPost(HttpServletRequest request,
                   HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}

1、Web Client 向Servlet容器(Tomcat)发出Http请求
2、Servlet容器接收Web Client的请求
3、Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中
4、Servlet容器创建一个HttpResponse对象
5、Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet对象
6、HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息
7、HttpServlet调用HttpResponse对象的有关方法,生成响应数据
8、Servlet容器把HttpServlet的响应结果传给Web Client

destroy() :
时机:
1:Tomcat服务器stop
2:web项目reload(长时间未响应)
3:Tomcat容器所在的服务器shutdown
作用:
1:释放JVM不回收的资源(用户自定义)
2:将Servlet移出Servlet Container,等待JVM回收
说明不会立即销毁Servlet,此时如果再调用Servlet是可以调用的

以上阶段所有方法调用都通过反射执行

需要配置文件:

<web-app>      
    <servlet>
        <servlet-name>HelloWorld</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorld</servlet-name>
        <url-pattern>/HelloWorld</url-pattern>
    </servlet-mapping>
</web-app>  

< servlet-name> Servlet类名
< servlet-class> servlet 的全限定类名
< servlet-mapping> 用来配置我们注册的组件的访问路径
< url-pattern> 配置这个组件的访问路径

方法:
getParameter()和getParameterValues()获取值
getParameterNames():所有参数的完整列表。在通过paramNames.hasMoreElements(),nextElement()

SpringMVC

BS的三层架构:表现层,业务层,持久层
表现层一般是三层架构:MVC
注意这里的MVC是基于WEB的MVC即一种特殊的MVC
1;不像桌面应用的MVC, 这里的Model没法给View 发通知。
2:不像MVP, 这里的Controller 也不会调用View的方法来设置界面。

在这里插入图片描述
执行的过程:在这里插入图片描述
前端控制器(核心控制器)DispatcherServlet:用户请求最先达到的控制器,前端控制器调用其他组件处理请求,是MVC架构中的C,是整个流程控制的核心.其存在降低了组件间的耦合性.
处理器映射器HandlerMapping:负责根据用户请求找到处理器.
处理器Handler:具体的业务方法.
处理器适配器HandlAdapter: 对处理器进行执行.这是一种适配器模式的应用.
视图解析器ViewResolver: 负责将处理结果生成视图. ViewResolver首先根据逻辑视图名解析成物理视图名
即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户.
视图View: 具体的页面

非注解配置

在web.xml中配置前端控制器DispatcherServlet:
就是servlet
在这里插入图片描述
classpath:springmvc.xml下配置:分别配置处理器映射器,处理器适配器,适配解析器。下图所示的都Java给的API
并且需要配置Handler,也就是给编写的handler类一个用于识别调用的name
在这里插入图片描述

编写handler
public class ItemsController1 implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		//调用service查找 数据库,查询商品列表,这里使用静态数据模拟
		List<Items> itemsList = new ArrayList<Items>();
		//向list中填充静态数据
		
		Items items_1 = new Items();
		items_1.setName("联想笔记本");
		items_1.setPrice(6000f);
		items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
		
		Items items_2 = new Items();
		items_2.setName("苹果手机");
		items_2.setPrice(5000f);
		items_2.setDetail("iphone6苹果手机!");
		
		itemsList.add(items_1);
		itemsList.add(items_2);

		//返回ModelAndView
		ModelAndView modelAndView =  new ModelAndView();
		//相当 于request的setAttribut,在jsp页面中通过itemsList取数据
		modelAndView.addObject("itemsList", itemsList);
		//指定视图
		modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
		return modelAndView;
	}
}

注解配置

springmvc.xml:
< mvc:annotation-driven>< /mvc:annotation-driven>
代替处理器映射和处理器适配

handler编写:
@Controller
public class ItemsController3 {
//商品查询列表
//@RequestMapping实现 对queryItems方法和url进行映射,一个方法对应一个url
//一般建议将url和方法写成一样
@RequestMapping("/queryItems")
public ModelAndView queryItems()throws Exception{

处理器适配器
SimpleControllerHandlerAdapter——要求handler实现Contronller接口
HttpRequestHandlerAdapter——要求handler实现HttpRequestHandler接口
@controller
处理器映射器
BeanNameUrlHandlerMapping——根据URL名映射对应的handler
@RequestsMapping,URL映射的方式
视图解析器
InternalResourceViewResolver——JSP解析

DispatcherServlet.properties:默认配置,如果没有配置上述的东西,使用默认的配置

DispatcherServlet的执行方式

doDispatcher——getHandler返回HandlerExecutionChain——调用handler获得ModelAndView——将Model数据填充到request,视图解析得到View——渲染视图
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值