springMVC学习日志一
阅读原文时间:2023年07月08日阅读:3

一、springMVC流程图省略

二、写一个简单的springmvc的demo来说明

2.1引入springMVC相关的jar包

2.2配置DispatcherServlet 在web.xml

springMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springMVC-annotation.xml
springMVC *.do

2.3配置springmvc的配置文件


http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- 注册自己的controller类  -->  

<!-- 配置视图解析器 -->  
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
     <property name="prefix" value="/WEB-INF/view/"/>  
     <property name="suffix" value=".jsp"/>  
</bean>  

2.4创建Controller类

public class MyController1 extends AbstractController{

@Override  
protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {  
    ModelAndView mv=new ModelAndView();  
    mv.setViewName("login");// /WEB-INF/view/login.jsp  
    mv.addObject("username", "Hello World!");//功能类似于setAttribute 在request中  
    System.out.println("====mycontroller1====");  
    return mv;  
}

}

三、springmvc的流程

  1. 客户发出请求。http://localhost:8080/springmvc-01/my.do
  2. 到达web.xml文件中 DispatcherServlet.查看是否符合url的要求
  3. DispatcherServlet就会查询springmvc的配置文件。找HandlerMapping.  根据bean的名称查找相对应的controller
  4. 找到我的MyController类。执行该类中的handleRequestInternal方法
  5. 根据返回的modelAndView在找springmvc配置文件中视图解析器
  6. 把viewName和prefix以及suffix做了一个拼接。把拼接的页面展示给客户

四、常见的HandlerMapping

4.1 BeanNameUrlHandlerMapping 根据bean标签的名称找到对应的Controller类


http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- 注册自己的controller类  -->  

<!-- 配置视图解析器 -->  
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
     <property name="prefix" value="/WEB-INF/view/"/>  
     <property name="suffix" value=".jsp"/>  
</bean>  

4.2 ControllerClassNameHandlerMapping 根据controller类的名字找到对应的Controller。

<!-- 注册自己的controller类  -->  

 

4.3 SimpleUrlHandlerMapping 根据bean的id查找对应的Controller类。

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping ">  
        <property name="mappings">  
            <props>  
                 <prop key="/a.do">my1</prop>  
                 <prop key="/b.do">my2</prop>  
            </props>  
        </property>  
</bean>

<!-- 注册自己的controller类  -->  
<bean id="my1" class="com.zhiyou100.xz.controller.MyController1"></bean>  
<bean id="my2" class="com.zhiyou100.xz.controller.MyController2"></bean>

五、使用注解来替代配置信息

5.1 添加aop的jar包

5.2 创建Controller类

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller //等价于
public class MyController1 {
@RequestMapping("/list.do") //RequestMapping:表示的就是你的访问地址
public String list() {
System.out.println("查询所有");
return "login";
}

}

5.3 在springmvc的配置文件中配置注解(包扫描和开启注解驱动)


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



<!-- 配置视图解析器 -->  
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
     <property name="prefix" value="/WEB-INF/view/"/>  
     <property name="suffix" value=".jsp"/>  
</bean>  

六、通过springmvc来完成接受的参数

import com.zhiyou100.xz.controller.bean.User;

@Controller
@RequestMapping("/user")
public class MyController1 {
@RequestMapping("/list.do") //RequestMapping:表示的就是你的访问地址
public String list(String name,int age) { //参数一定要和请求的参数名相同
System.out.println("name:"+name+";age:"+age);
return "login";
}
@RequestMapping("/list2.do") //RequestMapping:表示的就是你的访问地址
public String list(User user) { //参数一定要和请求的参数名相同
System.out.println(user); //请求的参数名要和实体类中的属性名相同
return "login";
}
}

注意:

接受参数时出现乱码。使用过滤器。(自定义的过滤器 也可以使用springmvc提供的过滤器)

1.使用springmvc提供的过滤器,在spring-web-4.2.2.RELEASE.jar下的org.springframework.web.filter.CharacterEncodingFilter.class中

在web.xml中配置过滤器

CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8
CharacterEncodingFilter /*

2.自定义的过滤器

先创建一个EncodingFilter.java

public class EncodingFilter implements Filter{

@Override  
public void destroy() {//过滤销毁时调用

}

@Override  
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  
        throws IOException, ServletException {//过滤功能  
    request.setCharacterEncoding("utf-8");  
    response.setCharacterEncoding("utf-8");  
    chain.doFilter(request, response);  
}

@Override  
public void init(FilterConfig arg0) throws ServletException {//过滤初始化时调用  
    System.out.println("过滤初始化时调用");  
}

}

在web.xml中配置过滤器

EncodingFilter com.zhiyou100.filter.EncodingFilter
EncodingFilter /*