SpringMvc总结

总结:
※1.参数绑定:(从请求中接收参数)
	1)默认支持的类型:Request,Response,Session,Model
	2)基本数据类型(包含String)
	3)Pojo类型
	4)Vo类型
	5)Converter自定义转换器
	6)数组
	7)List

<!-- 注解驱动: 替我们显示的配置了最新版的注解的处理器映射器和处理器适配器 -->
	<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<!-- 配置自定义转换器 注意: 一定要将自定义的转换器配置到注解驱动上 -->
	<bean id="conversionService"
		class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		<property name="converters">
			<set>
				<!-- 指定自定义转换器的全路径名称 -->
				<bean
					class="com.lingnet.controller.converter.CustomGlobalStrToDateConverter" />
			</set>
		</property>
	</bean>
转换器:
public class CustomGlobalStrToDateConverter implements Converter<String, Date> {

    @Override
    public Date convert(String source) {
        try {
            Date date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
                    .parse(source);
            return date;
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

}
-----------------------------------------------------------------------------------------
※2.controller方法返回值(指定返回到哪个页面, 指定返回到页面的数据)
	1)ModelAndView 
		modelAndView.addObject("itemList", list); 指定返回页面的数据
		modelAndView.setViewName("itemList");	  指定返回的页面
	2)String(推荐使用)
		返回普通字符串,就是页面去掉扩展名的名称, 返回给页面数据通过Model来完成
		返回的字符串以forward:开头为请求转发
		返回的字符串以redirect:开头为重定向
	3)返回void(使用它破坏了springMvc的结构,所以不建议使用)
		可以使用request.setAttribut 来给页面返回数据
		可以使用request.getRquestDispatcher().forward()来指定返回的页面
		如果controller返回值为void则不走springMvc的组件,所以要写页面的完整路径名称

	相对路径:相对于当前目录,也就是在当前类的目录下,这时候可以使用相对路径跳转
	绝对路径:从项目名后开始.
	在springMvc中不管是forward还是redirect后面凡是以/开头的为绝对路径,不以/开头的为相对路径
	例如:forward:/items/itemEdit.action 为绝对路径
		forward:itemEdit.action为相对路径
-----------------------------------------------------------------------------------------

3.架构级别异常处理:
	主要为了防止项目上线后给用户抛500等异常信息,所以需要在架构级别上整体处理.hold住异常
	首先自定义全局异常处理器实现HandlerExceptionResolver接口
	在spirngMvc.xml中配置生效

<!-- 配置全局异常处理器 -->
	<bean class="com.lingnet.exception.CustomGlobalExceptionResolver"></bean>

//自定义异常类,用来处理自定义异常
public class CustomException extends Exception {

    private static final long serialVersionUID = 5791415299766762864L;
    // 保存异常信息
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}
//自定义全局异常处理
public class CustomGlobalExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object arg2, Exception exc) {
        // 保存异常信息
        String msg = "";

        // 判断异常类型
        if (exc instanceof CustomException) {
            // 处理业务级别异常
            msg = ((CustomException) exc).getMessage();
        } else {
            // 处理运行时异常
            msg = "系统异常, 亲,对不起, 请及时联系管理员哦!";
        }

        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg", msg);
        modelAndView.setViewName("error");
        return modelAndView;
    }

}
-----------------------------------------------------------------------------------------
4.上传图片:
	1)在tomcat中配置虚拟图片服务器
	2)导入fileupload的jar包
	3)在springMvc.xml中配置上传组件
	4)在页面上编写上传域,更改form标签的类型
	5)在controller方法中可以使用MultiPartFile接口接收上传的图片
	6)将文件名保存到数据库,将图片保存到磁盘中

	<!-- 文件上传 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 设置上传文件的最大尺寸为5MB -->
		<property name="maxUploadSize">
			<value>5242880</value>
		</property>
	</bean>

-----------------------------------------------------------------------------------------
5.Json数据交互:
	需要加入jackson的jar包
	@Requestbody:将页面传到controller中的json格式字符串自动转换成java的pojo对象
	@ResponseBody:将java中pojo对象自动转换成json格式字符串返回给页面

-----------------------------------------------------------------------------------------
6.RestFul支持:
	就是对url的命名标准,要求url中只有能名词,没有动词(不严格要求),但是要求url中不能用问号?传参
	传参数:
		页面:${pageContext.request.contextPath }/items/itemEdit/${item.id}
		方法: @RquestMapping("/itemEdit/{id}")
		方法: @PathVariable("id") Integer id

-----------------------------------------------------------------------------------------
7.拦截器:
	作用:拦截请求,一般做登录权限验证时用的比较多
	1)需要编写自定义拦截器类,实现HandlerInterceptor接口
	2)在spirngMvc.xml中配置拦截器生效

	<!-- 配置拦截器 ,多个拦截器顺序执行 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**" />
			<bean class="com.lingnet.interceptor.LoginInterceptor" />
		</mvc:interceptor>
	</mvc:interceptors>

-----------------------------------------------------------------------------------------

8.登录权限验证:
	1)编写登录的controller, 编写跳转到登录页面的方法,  编写登录验证方法
	2)编写登录页面
	3)编写拦截器
运行过程:
	1)访问随意一个页面,拦截器会拦截请求,会验证session中是否有登录信息
		如果已登录,放行
		如果未登录,跳转到登录页面
	2)在登录页面中输入用户名,密码,点击登录按钮,拦截器会拦截请求,如果是登录路径放行
		在controller方法中判断用户名密码是否正确,如果正确则将登录信息放入session

  @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object arg2) throws Exception {
        if (request.getRequestURL().indexOf("/login") > 0) {
            return true;
        }
        HttpSession session = request.getSession();
        if (session.getAttribute("username") != null) {
            return true;
        }
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,
                response);
        return false;
    }

@Controller
@RequestMapping("/login")
public class LoginController {
    // 跳转到登录界面
    public String login() throws Exception {
        return "login";
    }

    @RequestMapping("/submit")
    public String submit(String username, String password,
            HttpServletRequest request) {
        HttpSession session = request.getSession();
        if (username != null) {
            session.setAttribute("username", username);
        }
        return "redirect:/items/list";
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值