Spring MVC使用方法

来源:互联网 发布:java电影院售票系统 编辑:程序博客网 时间:2024/05/28 14:56

一,导入spring的核心包与MVC包

    spring.jar,commons-logging.jar,spring-webmvc.jar


二,在web.xml中,配置Servlet

    <servlet>

     <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>这个属性是DispatcherServlet的父类FrameworkServlet中的,String类型
            <param-value>classpath:spring-schema.xml</param-value> 指定spring的配置文件所在路径
        </init-param>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>


三,创建spring的配置文件,我给他取名叫:spring-schema.xml


四,编写ACTION,这个ACTION要继承springmvc中的一个叫做AbstractController抽象类,或者实现Controller接口,选择一个你所需要的方法,重写即可。

    这里,我方便测试,我写了三个JSP页面,

    1,一个index.jsp,只有一个连接,通过toLogin.do,跳转到login.jsp(对应ACTION是ToLoginAction implements Comtroller)

    2,login.jsp用的是submit提交(对应LoginAction extends SimpleFormController),SimpleFormController 继承于AbstractFormController ,AbstractFormController继承于BaseCommandController,BaseCommandController继承于AbstractController。

    3,welcome.jsp登录成功的时候,返回到这个页面,提示登录成功,并显示用户名。

五,写完两个ACTION

1,跳转到登录页面的处理

package action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class ToLoginAction implements Controller {
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        return new ModelAndView("login");
    }
}


2,处理登录的验证

package action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.ui.ModelMap;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

import entity.User;

public class LoginAction extends SimpleFormController{
    @Override
    protected ModelAndView onSubmit(
            HttpServletRequest request,
            HttpServletResponse response,
            Object command,   //这个参数很关键,自动封装来自表单提交的数据,变成实体对象,下面有介绍
            BindException errors)
            throws Exception {
        User user=(User)command;
        ModelMap modelmap=new ModelMap(); //ModelMap extends LinkedHashMap  是一个能记录插入顺序的HashMap
        if(user.getName().equals("zhangsan")&&user.getPassword().equals("1234")){
            modelmap.put("user", user); //modelmap是用来绑定要在JSP显示的数据
            return new ModelAndView("welcome",modelmap); //welcome是一个响应视图名字,返回到spring配置文件的时候,根据这个跳转到相应的JSP页面
        }
        modelmap.put("error", "用户名或密码错误"); //如果不符合zhangsan 1234 那么则绑定一个错误提示信息,
        return new ModelAndView("login",modelmap); //如果不符合zhangsan 1234 返回到login.jsp(通过spring容器)
    }
}

3,USER实体类

package entity;

public class User {
    private String name;//这里的名字必须与表单中的name 一样 <input type="text" name="name">
    private String password; //这里的也是 <input type="password" name="password">
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

六,配置好spring-schema.xml

1  ,将ACTION注入spring容器

   <bean id="toLogin" class="action.ToLoginAction" scope="prototype">
   </bean>


   <bean id="login" class="action.LoginAction" scope="prototype">
        <property name="commandClass" value="entity.User"> 

//commandClass是BaseCommandController的一个属性,他将表单提交的数据自动封装成实体对象,这也是为什么上面表单名字和实体的属性名字要一样了
        </property>
   </bean>


2  ,将请求注入到spring容器

<bean id="urlMapping"
   class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">//只要是一个HandlerMapping组建即可,我选择简单的
    <property name="mappings"> //mappings是该类或者他父类的一个Properties属性,key=请求名,value=对应的action在容器中的ID值
      <props>
         <prop key="toLogin.do">toLogin</prop>
         <prop key="login.do">login</prop>
      </props>
    </property>
   </bean>

3  ,<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> //这个类是处理返回结果的
         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>//viewClass是上面那个类的一个属性,JstlView是他的子类
         <property name="prefix" value="WEB-INF/"/> //前缀
         <property name="suffix" value=".jsp"/>   //后缀
   </bean>

完毕,下面介绍运作流程


浏览器发送.do请求时,通过web.xml,调用springmvc框架底层的servlet,将请求交给spring容器来处理。spring容器在创建的时候,即服务器启动时就已经将action注入了,这个时候,控制器调用spring容器的HandlerMapping组建处理,实现请求和ACTION之间的映射。

控制器处理完毕,返回的是一个ModelAndView组建,这个东西封装了模型数据和响应视图的名字,这里相当于struts中的result一样,在spring容器中,控制器调用视图解析器ViewResolver,寻找对应的JSP视图,最后就可以做数据显示了

原创粉丝点击