??xml version="1.0" encoding="utf-8" standalone="yes"?> spring-servlet.xml-
从URL接受h及数?>DispacherServlet->Ҏh调用具体的Controller->Controller->调用serviceҎ处理数据->通过DAO讉K
db->增删Ҏ->db->q回操作l果?>service->处理q回l果->Controller->q回具体面和数?>jsp面
2.spring mvc注解
@Controller,@Service,@Repository
@Controllers声明控制层。@Service声明服务层。@Repository声明持久层(数据传输层DAOQ?/span>
@RequestMapping把一个POJO声明为Spring里的Controller.如果不声明要写Controllercd要从Spring的Controllercȝ承,q写handleRequestҎ?/span>
@RequestMapping(value="*.htm",method=RequestMethod.GET);属性value声明Controller处理的请求,method声明处理h的类型。可声明在类头上Q也可声明在Ҏ头上?/span>
@RequestParaml定参数与请求参?例:public String Controller(@RequestParam("id") int topicId,User user)把参?topicld与请求的参数“id”l定Qid的g入topicld?/span>
@AutoWiredҎcd自动装配Q可攑֜属性上QsetҎ上,构造方法上。与@AutoWierd配套使用的是@Qualifier。按名字自动装配?/span>
@Resource与@AutoWiredcM
3.DispatcherServlet-org.springframework.web.servlet.Dispatc-herServlet
负责请求分配给控制对象Q所以用Spring MVC的第一步是在web.xml中定义DispatcherServlet;
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/mvc-config.xml,
/WEB-INF/spring-config.xml
<param-value>
<init-param>
</servlet>
.....
可以加上contextConfigLocation的初始参敎ͼ用来讄Bean定义文g的位|和名称Q默认?ldquo;Servlet?servlet.xml";可以加上多个bean文g的来源;如果一个都没加则找默认的;hello-servlet.xml
<context:component-scan base-package="cn.spring.demo" />
<bean
class="org.springframework.web.servlet.view.InternalResourceView-Resolver"
p:prefix="" p:suffix=".jsp" />
base-package为注入bean时要spring要查扄?
Controller回传ModleAndViewQDispatcherServlet会交l?span style="color: #0000ff;">ViewResolver解析。如Q回传一个字W串“index”Q解析后扑ֈ/WEB-INF/index.jsp
4.Controller-
@Controller//类声明为Spring容器里的BeanQSpring调用时实例化
@RequestMapping("index.htm")//声明q个Controller处理的请求是什?/span>
public class IndexController
{
@RequestMapping(method = RequestMethod.GET)
public String doGet()
{
return "index";
}
}
q回“index”,交由ViewResolver解析Q返回调?ldquo;/WEB-INF/index.jsp”
//处理posth的Controller
@Controller
@RequestMapping(value="index.htm",method = RequestMethod.POST)
public String doPost(String username, String password, ModelMap modelMap) throws Exception
{
modelMap.addAttribute("name",username);
return "index";
}
把username以名值对的Ş式放入ModelMapQ在index.jsp中用request对象接收;ModleMap,Spring提供的集合可以传递数据到q回的jsp面
http://www.ibm.com/developerworks/cn/java/j-lo-spring25-mvc/
以上为基于注解驱动的mvc
5.DispacherServlet-HandlerMapping-ModleAndView-Controller-ViewResolver-View
1.web.xml指定DispacherServelet和servlet的xml
web.xml-
<servlet>
<servlet-name>buzzwords</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/buzzwords-service.xml</param-value>
</context-param>
<load-on-startup>标记容器是否在启动的时候就加蝲q个servletQ数字越,当是一个负数时或者没有指定时Q则指示容器在该servlet被选择时才加蝲Q正数的D,启动该servlet的优先高
2.BuzzwordsController-不用@Controllers则需要实现Controller接口
public class BuzzwordsController implements Controller
{
private BuzzwordService facade;
public void setFacade(BuzzwordService facade)
{
this.facade = facade;
}
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
{
return new ModelAndView("buzzwords", "buzzwordService", facade);
}
}
3.buzzwords-servlet.xml-指定servlet controller和urlmapping的映关p?/span>
<bean id="buzzwordsController“
class="BuzzwordsController">
<property name="facade"><ref bean="buzzwordService"/></property>
</bean>
<bean id="urlMapping" class="SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/buzzwords.htm">
buzzwordsController
</prop>
4.指定viewResolver
<bean id="viewResolver" class="org.springframework...InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework... ...View</value>
</property>
<property name="prefix"><value>/WEB-INF/jsp/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
5.buzzwords.jsp
6.参?nbsp;\spring mvc\Spring MVC 详解.ppt
\spring mvc\Spring MVC 技术交?ppt
1. DispatchServlet在Web容器初始化的时候完成初始化——initStrategy()
2.ViewResolver-从一个String逻辑视图名映到一个视囑֯象;对JSP用户, 通常实现 InternalResourceViewResolver
3.Controller负责接收从DispatchServlet转发的URLh
开发一个Spring MVCE序的基本步骤:
1~写处理h逻辑的处理器-controllerQ?/span>
2在DispatcherServlet上下文对应的Spring配置文g中配|处理器Q?/span>
3配置一个视图解析器Q对处理器返回的ModelAndViewq行解析Q?/span>
4~写一个视囑֯?jsp或ftl{?Q将响应展现l客?/span>
Controller
-AbstractController
-MultiActionController 多个请求行为合q在一个控制器?/span>
-BaseCommandController
-AbstractCommandController 能将h参数l定到命令对?/span>
-AbstractFormController 支持表单提交的抽象控制器c?/span>
-SimpleFormController 单表单处理控制器
-AbstractWizardFormController 向导型表单处理控制器
ViewResolver接口QController传回ModelAndView对象QDispatcherServlet其交由ViewResolver来作View层的相关解析。要在Spring MVC配置文g中定义一个ViewResolver实例
ModelAndView-Mode1AndView cM表了 Spring Web MVC E序中,呈现画面时所使用 Model 数据对象?View 数据对象Q由?Java E序的方法中一ơ只能回传一个对象,所?Modelview 的作用是装q两个对象,方便您同时返?Model ?View SimpleUrlHandlerMapping-最常用的处理器映射Q将h的URLs 影射到handlers;׃pd的分别代表URLs 和bean 的名字的name/value Ҏ定义影射Q在x-servlet.xml中定?/span>
7. 参考\spring mvc\Spring_Web_MVC_架构.ppt
1.web.xml:
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
可以?XML 文g中设?Controller h处理完毕之后Q所要呈现数据的|页路径Q见mvc -config . xml
2.controller:
public class HelloController implements Controller
{
private String viewPage;
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws Exception
{
String user = req.getParameter("user");
//viewPage与mvc-config.xml中的<property name="viewPage">对应,<value>对应q回的jsp面
return new ModelAndView(viewPage, "user", user);
}
public void setViewPage(String viewPage)
{
this.viewPage = viewPage;
}
}
3.mvc-config.xml:
<beans>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean name="/hello.do"
class="onlyfun.caterpillar.HelloController">
<property name="viewPage">
<value>hello</value>
</property>
</bean>
</beans>
DisPatcherServlet 必须Ҏ一?HandlerMaPping 对象Q决定请求由哪一?Controller 来处理, DispatcherServlet 默认使用 org.spring-
framwork .web.servlet.handler . BeanNameUrlHandlerMapping Q也是Ҏ Bean 在定义时?rdquo;name”属性及使用者请求的 URL Q决定 用哪一?controller 实例Q例如在q个例子中,h / FirstSpringMVC / hello.do Ӟ DispatcherServlet Ҏ” hello.do ”名称Q决定要 使用 “name”?rdquo;hello.do”?Bean 实例Q所以就是将h交由 HelloController 的实例来处理?/span>
?controller q回 ModelAndView 后, Dispatcherservlet 会交?ViewResolver 对象来作 View 层的相关解析Q因而您需要设|一?ViewResolver 实例Q在q个范例中将?JSP 作ؓ View 层技?InternalResourceViewResolver如果惌在自己所定义?servlet cM使用 spring 的容器功能,则也可以使用org·springframework·web·context·ContextLoaderListener contextLoaderListener 默认会读?applicationContext.xmlQ您可以指定自己的定义文Ӟ只要?/span>
QcontextQparamQ中指定”contextConfigLocation”参数;
WebApplicationContext 实现?ApplicationContext 接口Q是 Spring 专ؓ Servlet ?Web 应用E序设计的ApplicationContext 实现c,在取?WebApplicationContext 之后Q可以利用它来取?Bean 定义文g中定义的 Bean 实例;
即web.xml?
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/beans-config.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
beans-config.xml-
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC
"-//SPRING/DTD BEAN/EN"
"
<beans>
<bean id="dateBean" class="java.util.Date" singleton="false"/>
</beans>
4.MultiActionController -如果为每一个请求编写一?Controller c,在程序规模增大时Q您?Controller cd会迅速增加,可以l承 或直接用MultiActionControllerc,数个相关的h处理集中于同一个对象,而不用每一个请求编写一个控制对象?/span>
使用MultiActionControllerQ您要配合一?MethodNameResolver 的实例, MultiActioncontroller 默认使用?MethodNameResolver cL
org . springframework . web . servlet . mvc . multiaction . InternalPathMethodNameResolver Q这个类可以Ҏ所l的|址中,最后请求的
文g名称来判断执?Controller中的哪一个方法,例如Qtest . do 的请求会执行 test ( HttpservletRequest , HttpservletResponse Q方?/span>
。但通常不会使用 InternalPathMethodNameResolver Q因失M使用 MultiActionController 的一些优点,像是依用者的h
参数来决定所要执行的Ҏ?/span>
改用->ParameterMethodNameResolver
mvc-config.xml-
<bean id="paraMethodResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName">
<value>action</value>
</property>
<property name="defaultMethodName">
<value>list</value>
</property>
</bean>
<bean id="bookController" class="onlyfun.caterpillar.BookController">
<property name="methodNameResolver"> <ref bean="paraMethodResolver"/> </property>
也可以将所有相对应的方法专门组l在一个委托(delegateQ物件中Q而不是撰写在 Controller cd中,当请求来到时Q将
委托l这个物件来?行指定的ҎQ您只要讑֮ MultiActionController ?delegate"属性参考至委托物g卛_
或?>PropertiesMethodNameResolver
<bean id="propMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/listbook.do">list</prop>
<prop key="/addbook.do">add</prop>
<prop key="/deletebook.do">delete</prop>
</props>
</property>
</bean>
用户名、密码验?/span>
1?/span>
jquery验证表单很简单的Ҏ
现在|上有很?span style="font-family: Tahoma">jquery验证表单的插Ӟ但都写的比较复杂。一般都有两三个文g?/span>
我今天写一个最单但是很实用的验证登录表单的Ҏ?/span>
我基本上只是l大家提供一U思\?span style="font-family: Tahoma">jquery插g一般也是按q个思\写的?/span>
大家可以按这个思\L展,不过只要实用简单越?/span>
代码如下
<script type="text/javascript">
//首先要加?/span>jquery库文Ӟ因ؓq里只是l大家演C,所以我׃加蝲了?/span>
//下面?/span>jquery代码
$(function(){
$("#name").blur(function(){//用户名文本框失去焦点触发验证事g
if(!$(this).val || !$(this).val.match(/([w]){2,15}$/))//只处验证不能为空q且只能文或者数字或者下划线l成的2Q1Q个字符
{
$("#nameTip").html("用户名不能ؓIZ只能文或者数?/span>");
}
else
{
$("#nameTip").html("输入正确");
}
});
$("#pas1").blur(function(){//用户名文本框失去焦点触发验证事g
if(!$(this).val || !$(this).val.match(/([w]){2,15}$/))//只处验证和上面一?/span>
{
$("#pas1").html("密码不能为空且只能ؓ英文或者数?/span>");
}
else
{
$("#pas1").html("输入正确");
}
});
$("#pas2").blur(function(){//用户名文本框失去焦点触发验证事g
if(!$(this).val || $(this).val() != $("#pas1").val() )//只处验证和上面一?/span>
{
$("#pas2").html("密码为空或者和上面的密码不?/span>");
}
else
{
$("#pas2").html("输入正确");
}
});
})
</script>
<form action="#">
用户名:<input type="text" id="name" /><span id="nameTip"></span>
密码Q?/span><input type="password" id="pas1" /><span id="pas1Tip"></span>
认密码Q?/span><input type="password" id="pas2" /><span id="pas2Tip"></span>
<input type="submit" value="提交" />
</form>