Web之简单表格控制器实例----SimpleFormController

来源:百度文库 编辑:神马文学网 时间:2024/05/21 01:19:19
之简单表格控制器实例----SimpleFormController
选择表单控制目的是:不用再写复杂的表单数据装配类,而动作参数从request得到,并写相应的接口是非常容易的。因此选择表单控制器操作。
过程:
当用户向指定的web服务器发出请求(网址中输入网址,或网页提交请求)时,所指定的web服务器根据web.xml的设置,找到spring的指定的servrlet服务器,spring的servlet服务器再根据自已的配置文件(文件名在web.xml中规定,或按“服务器名-servlet.xml”这个默认规定),找到用户定义的控制器,然后执行用户的控制器,返回一个视图给用户。
如图:用户----(发出请求)àweb服务器--------(根据web.xml找到)--àspring servlet-------(按spring servlet的配置文件找到 )--àspring 控 制器----(执行控制器中的代码,返回结果)----à用户。
关键:两处配置,web.xml配置,spring servlet的配置。
A    先要在web.xml配置servlet服务器(其它诸如的jsf,struts,servlet都必须要经过的步骤)。

dispatcher
org.springframework.web.servlet.DispatcherServlet

2


dispatcher
*.do

其中:servlet节点指定了自定义的Servlet服务器的实例与类别.
servlet-mapping 规定了:所有请求中含有*.do的,都将提交给“dispatcher ”
servlt服务器处理
B 配置spring servlet。缺省文件名是:servlet名称-servlet.xml.
按A中情况,配置文件名为: dispatcher-servlet.xml.
其中dispatcher是web.xml中servlet\servlet-name节点的内容。



loginCtl



class="action.Login" >

action.Fuser


form


success


p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
其中:
D 名为“lognCtl”的bean
其类型是SimpleUrlHandlerMapping。他指定了网址中相关部份与spring 控制器相关联的情况。由于这里是“/login.do”与“loginCtl”相匹配,因此当网址输入:http://localhost:8084/WebApplication4/login.do时,服务器将执行loginCtl控制器的代码。
ID 名为“lognCtl”的bean
其类型是“SimpleFormController”,他是一个简单表单控制器,这种控制器有三个基本的属性需要指定。这三个属性都是simpleFormController这个父类自带属性,即当一个类继承了SimpleFormController类时,这三个属性就存在,用户不需要再自行定义。
1        commandClass 这个属性规定了存放表单数据的bean。便于spring 容器识别用户定义的数据接口。(是一个简单的bean)
2        formView 这个属性规定了控制器执行失败时返回到的视图。由于其值是“form”,又由于名为viewResolver的bean规定了后缀是.jsp,因此控制器执行成功时,打开名为”form.jsp”的网页.
3        successView这个属性规定了控制器执行成功时返回的视图。在这里,由于其值是“success”,又由于名为viewResolver的bean规定了后缀是.jsp,控制器成功执行时,打开名为“success.jsp”网页。
ID 名为“viewResolver”的Bean
由于其类型是“InternalResourceViewResolver”,这个bean指定了视图命名规则。即指出了视图文件所在文件位置。视图名:前缀+视图名+后缀。前缀指定了视图所在的文件夹,后缀指定了视图类型。

功能:当用户输入http://localhost:8084/WebApplication4/login.do网址时,
展现给用户的是有“用户名”、“密码”的网页。当用户分别输入“admin”、“123”时,显示另一个含有“当前用户:123”及“返回的信息:msg1”的网页。如果用户输入的用户名或密码出错时,继续打开最初网页。
其中:工程名为WebApplication4.
Jsp 文件位于WEB-INF\jsp文件夹下
Web.xml与dispatcher-servlet.xml位于WEB-INF文件夹下。
Java类位于action包中
包含的资源文件有:spring web mvc 2.5 spring framework 2.5两个包。Netbean6.1自带
执行过程:用户输入http://localhost:8084/WebApplication4/login.do,web服务器在web.xml查找与login.do相匹配的servlet服务器,找到发现是dispatcher,而这个服务器用户没有批指该服务器的配置文件文件,故按缺省命名处理,找到dispatcher-servlet.xml配置文件。在dispatcher-servlet.xml发现,与login.do相匹配的spring 控制器是loginCtl,查找loginCtl控制器的bean配置情况。发现是表单控制器,所用到的表单数据接口是fuser类,执行失败时,打开form.jsp网页;
当执行成功时,打开success.jsp网页。
配置内容:
指定了所有含有.do的请求都交给dispatcher servlet服务器处理。



30


dispatcher       org.springframework.web.servlet.DispatcherServlet

2


dispatcher
*.do


index.jsp


配置内容:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">



loginCtl





action.Fuser


form


success


p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />

Login.java表单控制类
package action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import java.util.HashMap;
import java.util.List;
import java.util.LinkedList;
publicclass Login extends SimpleFormController{
protected ModelAndView onSubmit(HttpServletRequest arg0, HttpServletResponse arg1, Object cmd, BindException ex) throws Exception {
Fuser fuser=(Fuser) cmd;
if (loginCheck(fuser)==0 ){
HashMap result_map=new HashMap();
result_map.put("fuser", fuser);
List msgList=new LinkedList();
msgList.add("msg1");
result_map.put("messages", msgList);
return new ModelAndView(this.getSuccessView(),result_map);
}
returnnew ModelAndView(this.getFormView());
}
privateint loginCheck(Fuser fuser){
if ( ("admin".equals(fuser.getUsername()) )
&& ("123".equals(fuser.getPassword()) ) ){
return 0;
}
return 1;
}
}
Fuser.java表单数据接口类
package action;
public class Fuser {
private String username="";
private String password="";
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username=username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password=password;
}
}
form.jsp视图---登陆视图
<%@page contentType="text/html" pageEncoding="UTF-8"%>
"http://www.w3.org/TR/html4/loose.dtd">



JSP Page



登陆



用户名:




密码:










success.jsp 登陆成功视图
<%@page contentType="text/html" pageEncoding="UTF-8"%>
"http://www.w3.org/TR/html4/loose.dtd">



JSP Page


当前用户:${fuser.username}


返回的信息



<% java.util.List mes = ( java.util.List)request.getAttribute("messages");
out.print(mes.get(0).toString());
%>