Study(5) xml配置开发基于SpringMvc的web应用
1.springmvc是什么?
springmvc:一个mvc框架,用来简化基于mvc架构的web应用开发
2.SpringMVC五大核心组件
(1).组件解析
### DispatcherServlet(前端控制器)
接受请求,依据handlerMapping的配置调用相应的模型来处理
### HandlerMapping
包含了请求路径和模型的对应关系
### Controller(处理器)
负责处理业务逻辑
### ModelAndView
封装了处理结果,处理结果除数据外还可能有视图名
### ViewResolver(视图解析器)
DispatcherServlet依据viewResolver的解析,调用真正的视图对象来生成相应的页面。(2)五大组件关系?

a.DispatcherServlet收到请求后,依据HandlerMapping的配置,调用相应的Controller来处理
b.Controller将处理结果封装成ModelAndView对象,然后返回给DispatcherServlet
c.DispatcherServlet依据viewResolver的解析,调用相应的视图对象,比如jsp生成相应的页面
3.解析DisptcherServelet前端控制器(web.xml)

A:web.xml配置
注解方式与xml配置方式相同
<servlet>
<servlet-name>springtest</servlet-name> // servlet命名
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> // spring框架类
<init-param> //初始化参数
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup> //tomcat启动时,立即实例化dispatcherServlet
</servlet>
<servlet-mapping>
<servlet-name>springtest</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>B:流程分析:
当启动Tomcat时,加载web.xml文件,并实例化DispatcherServlet,
在DispatcherServlet初始化方法里面,会读取该初始化参数的值来获取spring配置文件(springmvc.xml)的位置,然后启动spring容器C:特别说明:
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
等价于:
new ClassPathXmlApplicationContext("springmvc.xml");4.配置HandlerMapping(springmvc.xml)
方式一:xml配置
<!--配置handlermapping-->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/index.do">helloController</prop>
//与处理器的bean的id保持一致
</props>
</property>
</bean>方式二:注解方式
(1).配置组件扫描
<context:component-scan base-package="cn.com.controller"/>
注:仅扫描 @Controller、@Service、@Component、@Repository
(2).springmvc.xml添加mvc注解扫描
<!--配置mvc注解扫描-->
<mvc:annotation-driven/>
注:扫描@RequestMapping
(3).HelloController方法上添加RequestMapping注解
@RequestMapping("index.do")5.配置Controller
方式一:xml配置
<!--配置处理器 (springmvc.xml)-->
<bean id="helloController" class="controller.HelloController"/>
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
System.out.println("handleRequest()");
/*
ModelAndView有两个构造器:
(1).ModelAndView(String viewName) , viewName是视图名
(2).ModelAndView(String viewName, Map<String, ?> model),map用于封装处理的结果数据
*/
return new ModelAndView("index");
}
}方式二:注解方式
1.不用实现controller接口
2.可以在处理器中添加多个方法,每一个方法处理一种类型的请求
3.方法名不作要求,返回类型可以是ModelAndView,也可以是String
4.使用@Controller,将该处理器纳入容器进行管理(在spring配置文件中不用配置该处理器了)
5.使用@RequestMapping,告诉前端控制器(DispatcherServlet),请求路径与处理器方法的对应关系,(spring配置文件不用配置HandlerMapping)
@Controller
public class HelloController {
@RequestMapping("index.do")
public String hello(){
System.out.println("index.do");
return "index";
}
}6.ModelAndView
ModelAndView有两个构造器:
(1).ModelAndView(String viewName) , viewName是视图名
(2).ModelAndView(String viewName, Map<String, ?> model)
viewName是视图名,map用于封装处理的结果数据7.ViewResolver视图处理器(springmvc.xml)
注解方式与xml配置方式相同
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>8.Springmvc项目流程示意图

9.读取请求对象的值
DispatcherServler会分析方法的结构,通过java反射机制,将参数传给方法
(1).通过request对象
将request对象作为方法的入参即可
@RequestMapping("login.do")
public String login(HttpServletRequest request){
String name = request.getParameter("name");
System.out.println(name);
return "index";
}(2).使用@RequestParam对象
将该注解添加到方法的形参前面,值为实际参数值
@RequestMapping("login.do")
public String login(String pwd ){
System.out.println(pwd);
return "index";
}
或者:
@RequestMapping("login.do")
public String login(@RequestParam("pwd") String password ){
System.out.println(password);
return "index";
}(3).使用javabean封装请求参数值
a :写一个Java类,要求属性名称和请求参数名称一致,提供get()、set();
b :将该javabean作为方法的形参;
文章标题:Study(5) xml配置开发基于SpringMvc的web应用
发布时间:2020-04-26, 09:22:11
最后更新:2020-04-26, 09:22:11