springMVC

来源:互联网 发布:牛尔的产品怎么样知乎 编辑:程序博客网 时间:2024/06/05 11:08

视图(View)-对应组件:JSP或者HTML文件
控制器(Controller)-对应组件:Servlet
模型(Model) -对应组件:JavaBean


MVC处理过程:
视图提供用户的交互界面,并且发送用户给控制器-----》控制器接受请求,并且决定用那个模型来处理-----》根据请求进行相应的业务逻辑处理,并且返回结果-----》根据结果调用相应的视图模型返回数据,并且通过视图呈献给用户结果。


springMVC的优点:
1.多视图共享一个模型,大大提高代码的可重用性
2.MVC三个模块相互独立,松耦合架构
3.控制器提高了应用程序的灵活性和可配置性
4.有利于软件工程化管理
完美的系统架构 = 松耦合+高重用性+高扩展性+高可维护性
缺点:
1.原理复杂
2.增加了系统结构和实现的复杂性
3.视图对模型数据的低效率访问


1.加jar文件
<dependency>
    <groupId>aopalliance</groupId>
    <artifactId>aopalliance</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.9</version>
</dependency>

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

<dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>3.2.13.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>3.2.13.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.2.13.RELEASE</version>
</dependency>

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.2.13.RELEASE</version>
    </dependency>
    
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>3.2.13.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>3.2.13.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.2.13.RELEASE</version>
</dependency>
2.在web.xml中配置servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>MVC09-05</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
    <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-servlet.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>
  <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
  </context-param>
  <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>MVC09-05.root</param-value>
  </context-param>
  <listener>
    <listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
  </listener>
</web-app>


配置springmvc-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        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">
<context:component-scan base-package="controller"/>    
    <mvc:annotation-driven/>
<!-- 完成视图的对应 -->
<!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>


配置log4j.properties
log4j.rootLogger=debug,CONSOLE,file


log4j.logger.cn.smbms=debug
log4j.logger.org.apache.ibatis=debug
log4j.logger.org.mybatis.spring=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.java.sql.ResultSet=debug


log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=debug
log4j.appender.CONSOLE.DatePattern=yyyy-MM-dd
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= - (%r ms) - %d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n


log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=${SMBMS_C09HO_02.root}/logs/log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern= - (%r ms) - %d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n


3.IndexController class
@Controller
public class IndexController {


private Logger logger = Logger.getLogger(IndexController.class) ;
@RequestMapping("/test.html")
public String save(String username,String mobile,Model model){
logger.info("hello,SpringMVC! username: " + username);
model.addAttribute("username", username);
model.addAttribute("mobile", mobile);
return "success";
}
}
4.创建View-JSP
5.部署运行


方法一、<bean name="/in.html" class="controller.IndexController"/>


有多个请求时,需要配置多个映射关系,并建立多个Controller来进行请求处理,实现繁琐,可以这样做
方法二、基于注解的处理器
<context:component-scan base-package="controller"/>    
    <mvc:annotation-driven/>


参数传递、三种方法
1.Controller方法中参数前加@RequestParam进行直接入参
部署运行
http://localhost:8090/SMBMS_C09_03/welcome?username=admin
@RequestMapping(value="/in")
public ModelAndView index3(@RequestParam String username) {
System.out.println("controller index3");
ModelAndView mv= new ModelAndView();
mv.addObject("username",username);
mv.setViewName("in");
return mv;
}
2.@RequestMapping
标注在类定义处
标注在方法定义处
注意:@RequestMapping映射的请求信息必须保证全局唯一
a、@RequestMapping(value="/in")
public String index4(@RequestParam String username,Model model) {
System.out.println("controller index4");
model.addAttribute("username", username);
return "in";
}
b、@RequestMapping(value="/in")
public String index4(@RequestParam String username,Model model) {
System.out.println("controller index4");
model.addAttribute("username", username);//username
model.addAttribute(username);
User u= new User();
model.addAttribute("currentUser", username);
model.addAttribute(username);
return "in";
}
3.@RequestParam
value
required
defaultValue
@RequestMapping(value="/in")
public String index6(@RequestParam(value="username",required=false) String username) {
System.out.println("controller index6");
return "in";
}