SpringMVC整合JDBD

(1). 编码问题(过滤器)

为什么会乱码

表单提交时,浏览器会对中文进行编码(会使用打开表单的页面时的字符集来编码,比如使用UTF-8来编码),而服务器默认使用ISO-8859-1来解码,所以会产生乱码

如何解决?

springmvc提供了一个过滤器(CharacterEncodingFilter),只需要配置改过滤网器即可,如下

<!-- 配置字节码过滤器 -->
	<servlet>
		<filter>
			<filter-name>encodingFilter</filter-name>
			<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		</filter>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<filter-mapping>
			<filter-name>encodingFilter</filter-name>
			<url-pattern>/*</url-pattern>
		</filter-mapping>

注意:a.表单提交采用post提交方式
b.客户端的编码要与过滤器的编码一样

(2)拦截器

什么是拦截器

spring提供的一个特殊的组件,当DispatcherServlet收到请求之后,如果有拦截器,会先试用拦截器,然后调用相应的处理器(Controlller)

拦截器与过滤器的区别:过滤器属于Servlet的规范,而拦截器属于spring框架

怎样实现拦截器

  • step1. 写一个java类,实现HandlerInterceptor接口
package com.wjh.netctoss.interceptors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class SessionInterceptor implements HandlerInterceptor {
	/**	
	 * 最后执行的方法
	 * 注意:只有当preHandle方法的返回值为true时,该方法才会执行
	 * ex:是处理器所抛出的异常,可以写一个拦截器,用来处理异常
	 */
	public void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object arg2,Exception ex)throws Exception {
		System.out.println("afterCompletion()");
	}
	/**
	 * 
	 * 处理器(Controller)的方法已经执行完毕,正准备
	 * 将处理结果(ModelAndView对象)返回给DispatcherServlet之前
	 * 执行postHandle方法,可以在该方法里面修改处理结果
	 */
	public void postHandler(HttpServletRequest request,HttpServletResponse response,Object arg2,ModelAndView arg3) throws Exception{
		System.out.println("postHandle()");
	}
	
	/**
	 * 
	 * DispatcherServlets收到请求之后,如果该方法
	 * 的返回值是true,则继续向后调用;如果返回的是false,则不再向后调用
	 *arg2:描述的是处理器方法的一个对象 
	 */
	public boolean preHandler(HttpServletRequest request,HttpServletResponse response, Object arg2) throws Exception {
		System.out.println("preHandle()");
		
		HttpSession session = request.getSession();
		Object obj = session.getAttribute("admin");
		if (obj==null) {
			//没有登陆,重定向到登录页面
			response.sendRedirect("toLogin.do");
		}
		//已经登陆过,则允许访问
		return true;
	}
}

  • step2. 实现具体的拦截逻辑,比如session验证登陆(部分代码)

	//注入参数
	@Resource(name="loginService")
	private LoginService service;

	//登陆界面
	@RequestMapping("/toLogin.do")
	public String loingController(HttpSession session,HttpServletRequest req) {
		String username=req.getParameter("username");
		String password=req.getParameter("password");
		System.out.println("name:"+username+";pw:"+password);

		//调用服务层
		try {
			Admin  admin=service.checkLogin(username, password);
			
			//把admin对象绑定到session
			//用于session的验证
			session.setAttribute("admin", admin);
		} catch (Exception e) {
			e.printStackTrace();
			if (e instanceof ApplicationException) {
				//应用异常,应该明确提示用户
				//采取正确操作
				req.setAttribute("login_failed", e.getMessage());
				return "login";
			}
			//系统异常,提示用户稍后重试
			return "redirect:error.do";
		}
		return "redirect:success.do";
	}
	
	//登陆失败界面
	@RequestMapping("/error.do")
	public String errorController() {
		System.out.println("errorController()");
		return "error";
	}
	
	//登陆成功界面
	@RequestMapping("/success.do")
	public String successController() {
		System.out.println("successController()");
		return "success";
	}
  • step3. 在sppringmvc.xml中配置拦截器
`<!-- 配置拦截器 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**" />
			<mvc:exclude-mapping path="/toLogin.do" />
			<mvc:exclude-mapping path="/login.do" />
			<bean class="com.wjh.netctoss.interceptors.SessionInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>`
  • 实现逻辑如下:
    在这里插入图片描述

(3).异常处理

可以将异常抛给spring,由spring来处理这些异常

使用spingMVC提供的一个简单的异常处理器SimpleMappingExceptionTesolver

第一步,添加springmvc配置文件
	<!-- 配置简单异常处理器 -->
	<bean
		class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="execptionMappings">
			<props>
				<prop key="java.lang.Exception">error</prop>
				<prop key="com.wjh.netctoss.exception.TimeoutException">login</prop>
			</props>
		</property>
	</bean>
第二布使用@ExceprionHandle注解
  • step1.在处理器类中,添加一个异常处理的方法,该方法使用@ExceptionHandle修饰

注:在该方法里面,依据异常类型,分别进行不同的处理

在这里插入图片描述
在这里插入图片描述

  • step2.添加一场处理界面
    在这里插入图片描述

SpringJDBC

(1)Springjdbc是什么?

Spring对jdbc的封装,使用springjdbc链接数据库,可以不用再写一些重复的代码,比如获取链接、关闭等(本次使用的是Orcale数据库)

(2).如何使用

  • step1.导包:spring-webmvc,spring-jdbc,ojdbc,dbcp,junit

  • step2.添加spring配置文件

  • step3.配置JdbcTemplate文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • step4 调用JdbcTemplate提供的方法来访问数据库
    数据库
    在这里插入图片描述
    实体
    在这里插入图片描述
    操作
    在这里插入图片描述在这里插入图片描述
    测试
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43050077/article/details/103283562