JavaWeb——springMVC入门程序

31 篇文章 0 订阅
30 篇文章 1 订阅

一、引言


从.NET阵地专向Java阵营,没学SSH,直接面向SpringMVC。





首先了解下基本概念:

核心架构的具体流程步骤如下:


1、  首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2、  DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

3、  DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

4、  HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);

5、  ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;

6、  View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束



二、上代码(注解handlermapping与handleradapter,主流方法)


文件工程目录如下:



1、首先配置eclipse环境和tomcat结合,前几篇博客已经介绍了,添加jar包

将用到的jar包,添加spring依赖的jar包到lib文件里面,下载地址为点击打开链接中的distribution zip file;


2、创建目录结构,新建index.jsp,UserController2和spring-config.xml文件


3、web.xml配置


配置servletdispatcher前端控制器。其中param-value中的spring-config.xml就是文件结构中创建的文件,通过web.xml文件找到配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	id="WebApp_ID" version="3.1">
	<display-name>Yellowbike</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring-config.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>


4、配置文件


通过配置文件加载注解handler mapping,handleradapter和view resolver;

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.0.xsd
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.0.xsd">

	<!-- <bean name="/getName" class="com.xcy.controller.UserController"></bean> 
		<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> 
		<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> 
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean> -->
	<!--配置handler -->
	<context:component-scan base-package="com.xcy.controller"></context:component-scan>
	<!--加载handlermapping和handleradapter -->
	<mvc:annotation-driven></mvc:annotation-driven>
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>


5、创建handler(controller)


通过controller的注解配置,设置请求映射并将数据返回视图

package com.xcy.controller;

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.xcy.po.Bike;
import com.xcy.po.User;

@Controller
public class UserController2 {
	@RequestMapping("/getName")
	public ModelAndView getName() {
		// TODO Auto-generated method stub
		User user = new User();
		user.setId(1);
		user.setName("宣传语");
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("user", user);
		modelAndView.setViewName("user");
		return modelAndView;
	}

	@RequestMapping(value="/getBike",method= RequestMethod.POST)
	public ModelAndView getBike(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		Bike bike=new Bike();
		try {		
			InputStream inputStream;
			inputStream = Resources.getResourceAsStream("mapConfig.xml");

			SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
			SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
			SqlSession sqlSession = sqlSessionFactory.openSession();
			
			String code= request.getParameter("code");
		    bike= sqlSession.selectOne("map.bike.findBike", code);
			System.out.println(bike);
			sqlSession.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("bike", bike);
		modelAndView.setViewName("bikeselect");
		return modelAndView;
	}

	@RequestMapping(value="/addBike",method=RequestMethod.POST)
	public ModelAndView addBike(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		//获取参数
		String code=request.getParameter("code");
		String password=request.getParameter("password");
		Bike bike=new Bike();
		bike.setF_CODE(code);
		bike.setF_PW(password);
		//添加到数据库
		try {		
			InputStream inputStream;
			inputStream = Resources.getResourceAsStream("mapConfig.xml");
			SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
			SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
			SqlSession sqlSession = sqlSessionFactory.openSession();
			sqlSession.insert("map.bike.addBike", bike);
			sqlSession.commit();
			sqlSession.close();
			
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
		}
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("bike", bike);
		modelAndView.setViewName("bikeadd");
		return modelAndView;
	}

}

6、视图解析接受数据


<%@page import="com.xcy.po.Bike"%>
<%@page import="com.xcy.po.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>asfd title here</title>
</head>
<style>
div{

    width:500px;/*定宽*/
    margin:20px auto;/* margin-left 与 margin-right 设置为 auto */
}

</style>
<body>
	<div id="mid">
		<a href="/Yellowbike">返回</a><br>
		<%
			Bike bike = (Bike) request.getAttribute("bike");
		%>
		<%="密码为" + bike.getF_PW()%>
	</div>
</body>
</html>



三、历史发展


3.1 注解

上节代码中的代码使用的是注解型handlermapping与handleradapter,

  在spring3.1之前使用:

注解映射器:org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping 
注解适配器:org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

  在spring3.1之后使用:

注解映射器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 
注解适配器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

但是上节中没有配置因为它们是默认加载方式,

注解 


  只要这一个注解即可,适配器和映射器就可以省略不配了,默认加载最新的handlermapping与handleradapter,同时加载了一些其他东西,如json解析器等
。另外,如果Controller很多的话springmvc中也提供了扫描包的方式来配置:


扫描包 
  所以到最后,使用注解的方法,适配器、映射器、Controller等的配置加在一起就两行代码!搞定!当然,视图解析器还是和上一节一样,自己配一下即可。


3.2 非注解


但是最早之前使用的是非注解型的方式,下面介绍下:

先说流程区别,只有在spring-config.xml和handler类不一样,所以只对这两个地方说明。

     1. handlermapping

     (1)

处理器映射器 


  这个映射器根据名字也可以看得出,是根据bean的name作为url进行查找,所以配置Handler的bean的时候,要配置一下name属性,设置为要请求的url即可正确映射。 


  (2)还有一种处理器映射器叫简单映射器:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping。它的映射方式是直接根据url来的,如下: 


处理器映射器2 


  这种可以直接配url,然后对应的url指定一个Handler,使用的是该Handler对应bean的id,所以只要在bean中配好id,然后将url和这个id对应上即可。 
  经测试,这两个映射器也可以一起使用,互不冲突,匹配到哪个就用哪个。


     2.  handleradapter

     (1)

处理器适配器 
  SimpleControllerHandlerAdapter适配器能执行实现了Controller接口的Handler,所以我们所写的Handler需要实现Controller接口。 

public class UserController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
		// TODO Auto-generated method stub
		User user = new User();
		user.setId(1);
		user.setName("宣传语");
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("user", user);
		modelAndView.setViewName("/WEB-INF/jsp/user.jsp");
		return modelAndView;
	}

}


  (2)除了这个适配器外,还有另一个适配器,叫org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter。即可以配置: 

处理器适配器2 

public class ItemsController2 implements HttpRequestHandler {

    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //实际中是调用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);

        //设置模型数据
        request.setAttribute("itemsList", itemsList);

        //设置转发的视图
        request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);

        //使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据
        /*
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write("json串");*/
    }
}



四、总结


  • springMVC基本介绍

  • springMVC环境配置,jar包需求

  • springMVC入门程序

  • springMVC发展:非注解映射器适配器到注解映射器适配器


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值