一,导入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视图,最后就可以做数据显示了