springmvc(5)攔截器

1.什麼是攔截器java

 是指經過統一的攔截從瀏覽器發送到服務器的請求來完成相應服務加強web

 

2.攔截器的基本原理spring

能夠經過配置過濾器解決亂碼問題瀏覽器

和過濾器很是類似服務器

 

3.搭建工程mvc

注意jar包app

此時的工程是完成後建立的框架

 

 web.xmljsp

 <servlet>
   
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   	<init-param>
   		<param-name>contextConfigLocation</param-name>
   		<param-value>classpath:springmvc.xml</param-value>
   	</init-param>
   
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>  

springmvc.xmlide

<context:component-scan base-package="com.Mrcheng.controller"></context:component-scan>

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>

<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>

 ControllerTest.java

@Controller
public class ControllerTest {
	
	@RequestMapping("/login")
	public String login(){
		return "view";
	}

	
	
	@RequestMapping("/view")
	public ModelAndView views(String name,String pwd){
		
		ModelAndView mv = new ModelAndView();
		System.out.println("views方法....");
		System.out.println("name:" + name);
		System.out.println("pwd:" + pwd);
		mv.addObject("msg", "views方法中的msg");
		mv.setViewName("success");
		
		return mv;
	}
}

index.jsp

用於向view.jsp作跳轉

  <body>
    This is my JSP page. <br>
    <a href="login">to login</a>
  </body>

view.jsp

主要作測試的頁面

<form action="view" method="post">
	user:<input type="text" name="name" ><br>
	pwd:<input type="password" name="pwd"><br>
	<input type="submit" value="submit">
</form>
</body>

success.jsp

是view.jsp作跳轉成功的頁面測試

<body>
<h1>success</h1>
msg:${msg}
</body>

 

test.jsp

主要作攔截請求的測試

<body>
<h4>攔截請求的轉移測試</h4>

</body>

在Tomcat上運行

 

亂碼測試:

 

提交以後看控制檯的打印結果:

此時輸入中文的狀況下會有亂碼的狀況出現

 

 

 4.對亂碼進行攔截和處理(過濾器)

 在web.xml文件中配置filter

配置代碼:

 <param-name> encoding</param-name>固定值
 <filter>
      <filter-name>filter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     <init-param> <param-name>encoding</param-name> <param-value>utf8</param-value> </init-param>
  </filter>
  <filter-mapping>
      <filter-name>filter</filter-name>
      <url-pattern>*</url-pattern>
  </filter-mapping>

 此時的測試中文是沒有亂碼的@!!!

 

 

5.攔截器的實現

自定義攔截器:

MyInterceptor.java
須要實現接口 HandlerInterceptor
public class MyInterceptor implements HandlerInterceptor{
     @Override
     public boolean preHandle(HttpServletRequest request,  HttpServletResponse response, Object handler)
                throws Exception {

      request.setCharacterEncoding("utf-8"); System.out.println("preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion"); } }

  

在springmvc.xml文件中註冊:

<!-- 攔截器註冊到mvc框架中 -->
<mvc:interceptors>
     <bean  class="com.MrChengs.Interceptor.MyInterceptor"></bean>
</mvc:interceptors> 

 

攔截器的攔截規則:
攔截規則不少
<!-- 攔截器註冊到mvc框架中 -->
<mvc:interceptors>
     <mvc:interceptor>
           <mvc:mapping path="/view.action"/>
           <bean  class="com.MrChengs.Interceptor.MyInterceptor"></bean>
     </mvc:interceptor>
     
</mvc:interceptors>

  

 6.攔截器的三種方法介紹

1.preHeader  在請求以前被調用
    是否須要將當前的當前的請求攔截下來
    爲true表示進行攔截
    爲false表示不進行攔截,後面的兩個方法不會執行
public boolean preHandle(HttpServletRequest request,  HttpServletResponse response,
Object handler)
request:請求
response:響應
handler:攔截請求的目標的對象  此時是ControllerTest的views方法
 
2.postHandler  在請求處理被調用
public void postHandle(HttpServletRequest request,  HttpServletResponse response,
Object handler,ModelAndView modelAndView)
modelAndView:能夠改變顯示的視圖,或者修改方法發往的視圖
測試代碼:

 

 

3.afterCompletion  在請求結束以後才進行調用
主要用於關閉一些資源的操做
 
 
7.多個攔截器的使用

 

springmvc.xml配置文件
假設同時攔截全部的請求
<!-- 攔截器註冊到mvc框架中 -->
<mvc:interceptors>
           <bean  class="com.MrChengs.Interceptor.MyInterceptor"></bean>
           <bean  class="com.MrChengs.Interceptor.MyInterceptor2"></bean>
</mvc:interceptors>

  

執行流程:

preHandle...
preHandle2...
views方法....
name:小明
pwd:xiaoming
postHandle2...
postHandle...
afterCompletion2...
afterCompletion...

 

 

固然攔截器的接口不止一個,可是咱們在操做中使用最多的仍是本次實驗中的這個接口。

其他的HandlerInterceptor,WebRequestInterceptor能夠在晚上找幾篇博文看一下了解便可。

相關文章
相關標籤/搜索