springMVC简单配置

Spring-mvc

jar: spring-4大核心包,

​ 测试包-2两大包,

spring-webmvc-x.x.x.RELEASE.jar			--	SpringMVC核心包
spring-web-x.x.x.RELEASE.jar 			--	Spring对Web项目项目的支持
核心配置文件

​ spring-mvc.xml(可以自定义名字,一般使用默认提供的)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
	<!--扫描包  -->
	<context:component-scan base-package="cn.itsource" />
	<!--开启注解-->
	<mvc:annotation-driven/>
    <!--静态资源访问权限-->
    <mvc:default-servlet-handler />
    <!--视图解析-->
    <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/jsp/"/>
		<property name="suffix" value=".jsp"/>
	</bean>
</beans>
在tomcat容器中配置
<servlet>
    <!--配置spring-mvc核心访问类-->
    <servlet-name>dispater</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet
 	</servlet-class>
	<!--关联mvc配置文件-->
    <init-param>
        <!--spring固定了 contextConfigLocation 取名-->
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
        <!--tomcat预加载  -->
    <load-on-startup>5</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispater</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
	 

​ 需要一个核心对象进行过滤org.springframework.web.servlet.DispatcherServlet配置在servlet容器中.
​ 过滤使用 / 和/* 或者*.这样表示是在项目访问路径下访问都是经过他.如果以/名字.格式书写,它是寻找以这个结尾的地址进行访问.
​ 使用 *.格式, 拦截以这个结尾的请求, 使用/名字,只拦截这个名字,使用/名字 / *拦截名字和其子 目录 .
​ 这时候需要在spring-mvc配置中添加默认访问静态资源权限. <mvc:default-servlet-handler />

使用 / 的添加了资源访问权限,可以访问静态资源,如果使用 /* 就不能访问

视图解析

​ 在spring-mvc.xml中配置bean对象.InternalResourceViewResolver

<bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>
注解使用

​ 需要在spring-mvc.xml中配置扫描包: <context:component-scan base-package=“cn.itsource”/>

​ @Autowired(@Resource) 自动依赖 自动创建对象

​ 交给spring 管理的类 @Controller (控制层注解) @service(业务层注解) @repository(持久层注解) @Component(通用注解) 功能都是一样的.

​ @RequestParam(“xxx”) 在传参列表中使用:解决传参变量名与前台不一致的情况(xxx写入前台的名字)

​ @PathVariable(“xx”) 在传参列表中使用:接收url后的参数

​ @ResponseBody 跳过视图解析器 可以用于返回json数据

Controller层的类3中实现

​ 1.实现controller类

public class ControllerTest implements Controller{
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		return new ModelAndView();
	}
}

​ 2.实现HttpRequestHandler类(跟servlet 类似)

​ 3.注解

@Controller
public class XxxController{
	@RequestMapping("/xxx") //配置访问路径
	public void method(){
		returnnew ModelAndView();
	}
}
接收form表单参数

​ 1.通过servlet-api.jar包中的HttpServletRequest对象中的getParameter方法获取参数.直接在controller注解类中的方法传参列表中加入此参数.

@RequestMapping("/form")
public void form(HttpServletRequest ht){
    String parameter = ht.getParameter("name");
}

​ 2.直接在方法传参列表中加入前端接收参数的名字,要考虑接收参数的类型.

@RequestMapping("/form")
public void form(String name , String pwd){}

​ 3.直接在方法传参列表中加入一个对象,对象中的属性名和接收参数的名字一一对应.

@RequestMapping("/form3")
public void form(User user){}
传递给前端参数

​ 1.通过servlet-api.jar包中的HttpServletRequest对象中的setAttribute方法传递参数.

@RequestMapping("/form")
public void form(HttpServletRequest ht){
    ht.setAttribute("数据名称", "传值");
}

​ 2.通过传参列表添加Model model形参传入一个封装好的对象,可以进行传参.

@RequestMapping("/form")
public void form(Model model){
    model.addAttribute("数据名称", "传值");
}

​ 3.通过返回值改为ModelAndView,在其中new ModelAndView()类

@RequestMapping("/form")
public ModelAndView form(){
    ModelAndView mv = new ModelAndView();
    mv.addObject("数据名称", "传值");
    return mv;
}
跳转

​ 1.如果没使用ModelAndView返回值,就把返回值改为String,返回地址

@RequestMapping("/form")
public String form(Model model){
    return "项目地址";
}

​ 2.使用了ModelAndView

@RequestMapping("/form")
public ModelAndView form(){
    ModelAndView mv = new ModelAndView();
	mv.setViewName("项目地址");
    return mv;
}
以上如果有视图解析器,就会被拼接.

​ 跳过视图解析器

​ 1.forward 转发

@RequestMapping("/form")
public String form(Model model){
    return "forward:项目地址";
}

​ 2.redirect 重定向

@RequestMapping("/form")
public String form(Model model){
    return "redirect:项目地址";
}
过滤器(编码问题)

​ 在web.xml配置.使用的是org.springframework.web.filter.CharacterEncodingFilter类

<filter>
    <filter-name>filter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
JSON使用

​ 使用的jar包:

​ jackson-databind-2.5.0.jar

​ jackson-core-2.5.0.jar

​ jackson-annotations-2.5.0.jar

springMVC返回json数据

​ 在controller类的方法上使用@ResponseBody注解, 可以返回值为String,list,map,数组等,传入前端为json格式数据

对json数据中的日期格式处理

​ 传入前端,需要在返回值对象所对应的类中的日期getter方法上加上 @JsonFormat(pattern=“yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)

​ 前端传入后端,需要得到传入的数据对应的类中的日期setter方法上加上 @DateTimeFormat(pattern=“yyyy-MM-dd HH:mm:ss”)

解决JSON在IE浏览器出现下载文件框的问题.(乱码问题)

​ 在sping-mvc.xml配置

<mvc:annotation-driven>
	<!-- 避免在IE浏览器中返回JSON时出现下载文件的情况 -->
	<mvc:message-converters>
		<bean id="mappingJackson2HttpMessageConverter"
			class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
			<property name="supportedMediaTypes">
				<list>
					<value>text/html;charset=UTF-8</value>
				</list>
			</property>
		</bean>
	</mvc:message-converters>
</mvc:annotation-driven>
Spring中的文件上传和下载
文件上传:

​ 1.首先,在jsp请求网页表单上添加enctype属性属性值为 multipart/form-data . 必须为post请求

​ 2.导入jar包

​ com.springsource.org.apache.commons.fileupload-1.2.0.jar

​ com.springsource.org.apache.commons.io-1.4.0.jar

​ 3.必须配置视图解析器MultipartResolver

​ 在spring-mvc.xml中配置:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<!-- 设置上传文件的最大尺寸为1MB -->
	<property name="maxUploadSize">
		<!-- spring el写法:1MB -->
		<value>#{1024*1024}</value>
	</property>
     <!-- 效果同上 -->
	<property name="maxUploadSize" value="1048576" />
</bean>

​ 4.在java中实现上传功能

@RequestMapping("/fileload")
@ResponseBody
public String upLoad(String name,MultipartFile filename,HttpServletRequest req){
    //①在传参列表中写入MultipartFile对象,判断是否上传和获取输入流
    if(!filename.isEmpty()){
        try {
    		InputStream in = filename.getInputStream();
            //②解决上传覆盖问题
            String uid=System.currentTimeMillis()+filename.getOriginalFilename();
        	//③获取文件在项目相对地址,解决路径问题
            File file=new File(req.getServletContext().getRealPath("项目下可以写入访问的uri如:/xxx"),uid);
            //④创建输出流并输出
            FileOutputStream out = new FileOutputStream(file);
            IOUtils.copy(in, out);//第三方工具输出,jar在之前2个jar之中
            //⑤关流
           	out.close();
			in.close();
        } catch (Exception e) {}
    }
    return "跳转路径";
}
文件下载:

​ 1.java中实现下载功能(解决中文乱码问题) 配置和上传一致

@RequestMapping("/down")
@ResponseBody
public String down(HttpServletResponse resp,HttpServletRequest req,String filename){
    try {
        //得到文件路径输入流
        InputStream in = new  FileInputStream(new  File(req.getServletContext().getRealPath("/")+filename));
        //解决ie等浏览器中文编码问题
        if(req.getHeader("User-Agent").toUpperCase().indexOf("TRIDENT")!=-1){
            filename = URLEncoder.encode(filename, "utf-8");
        }else if(req.getHeader("User-Agent").toUpperCase().indexOf("EDGE")!=-1){		
            filename = URLEncoder.encode(filename, "utf-8");//电脑自带edge【edʒ】浏览器	
        }else{
            filename = new String(filename.getBytes("UTF-8"),"ISO-8859-1");//其他浏览器
        }//设置相应头 弹出下载文件框
        resp.setHeader("Content-Disposition", "attachment; filename=" + filename);
        //输出流传递
        OutputStream out = resp.getOutputStream();
        IOUtils.copy(in, out);
        //关闭流
        out.close();in.close();
    } catch (Exception e) {}
    return "sss";
}
SpringMVC拦截器

​ 1.需要在spring-mvc.xml中配置

<!-- 配置拦截器组 -->
<mvc:interceptors>
	<!-- 拦截器 -->
	<mvc:interceptor>
		<!-- 要拦截的配置,该配置必须写在不拦截的上面,/*拦截一级请求,/**拦截多级请求 -->
		<mvc:mapping path="/**"  />
		<!-- 设置不拦截的配置 -->
		<mvc:exclude-mapping path="/url路径"/>
		<!-- 配置拦截器 -->
		<bean class="自己拦截器的全限定名" />  
	</mvc:interceptor>
</mvc:interceptors>

​ 2.自己创建类实现HandlerInterceptor接口.

​ 重写preHandle方法(在业务访问之前调用,为true时,通过),afterCompletion方法(一次请求执行一次),postHandle方法(调用一次controller就执行一次).

SpringMVC执行流程

​ 1 客户端将请求统一提交到DispatcherServlet(Spring核心控制类);

​ 2 DispatcherServlet会将请求交给HandlerMapping进行请求映射,匹配该请求的Handler(对应的url路径请求);

​ 3 DispatcherServlet再请求HandlerAdapter调用相应的Handler处理请求(对应的controller类中调用),并向前端控制器返回一个ModelAndView对象(最后都会被封装成ModelAndView对象返回给DispatcherServlet);

​ 4 DispatcherServlet将ModelAndView对象交给ViewResoler视图解析器处理,返回指定的视图View(比如访问地址拼接);

​ 5 DispatcherServlet 对 View 进行渲染(即将模型数据填充至视图中)(解析jsp数据填充网页);

​ 6 DispatcherServlet 将页面响应给用户;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值