2.5SpringMVC小例子

今天在网上看到有很多SpringMVC的例子,写的都不是很详细,于是找到官方的文档看了又看,鼓捣了一下午终于完成了一个小例子,由于本人也是刚开始接触SpringMVC,也有很多不懂的地方,如果写的不好,请大家不要骂。

1.首先把需要的类库导入,整个的结构大概是这样的:

 SpringMVC用户登录实例详解 - lovely1450408 - Seasons

在网上看了好多文章,都说把JSP放在WEB-INF下面是个不错的办法,防止有些淘气的人捣乱。

2.建立applicationContext.xml文件,代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    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">

    <!-- 属性配置 -->

    <bean id="propertyConfigurer"

      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"

       p:location="/WEB-INF/config/jdbc.properties" />

    <!--数据源-->

    <bean id="dataSource"

       class="org.springframework.jdbc.datasource.DriverManagerDataSource"

       p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}"

       p:username="${jdbc.username}" p:password="${jdbc.password}" />

</beans>


当然这里没有用到数据源,可以不去管它。

3.接下来修改web.xml文件,代码如下

<?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"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

    id="WebApp_ID" version="2.5">

    <display-name>CMS</display-name>

 

    <welcome-file-list>

       <welcome-file>default.jsp</welcome-file>

    </welcome-file-list>

 

    <context-param>

       <param-name>contextConfigLocation</param-name>

       <param-value>/WEB-INF/applicationContext.xml</param-value>

    </context-param>

    <listener>

       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

<!-

Servlet定义
这里我们定义了请求分发Servlet,即:
org.springframework.web.servlet.DispatcherServlet
DispatcherServlet 
Spring MVC 中负责请求调度的核心引擎,所有的请求将
由此Servlet 根据配置分发至各个逻辑处理单元。其内部同时也维护了一个
ApplicationContext
实例。

-à

    <servlet>

       <servlet-name>dispatcher</servlet-name>

       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

       <load-on-startup>2</load-on-startup>

    </servlet>

<!-

请求映射
我们将所有以.htm结尾的请求交给Spring MVC进行处理。当然,也可以设为其他值,
.action.action等。当然用.htm的后缀是不推荐的。在tomcat上会出问题。

-à

    <servlet-mapping>

       <servlet-name>dispatcher</servlet-name>

       <url-pattern>*.htm</url-pattern>

    </servlet-mapping>

    <session-config>

       <session-timeout>30</session-timeout>

    </session-config>

    <context-param>

       <param-name>log4jConfigLocation</param-name>

       <param-value>/WEB-INF/log4j.properties</param-value>

    </context-param>

</web-app>

4.然后创建dispatcher-servlet.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    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">

 

    <bean

      class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />

 

    <!-- 分发器 -->

    <bean id="urlMapping"

       class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

       <property name="mappings">

           <props>

              <prop key="index.htm">indexController</prop>

              <prop key="test.htm">testController</prop>

           </props>

       </property>

    </bean>

    <!-- 指定了表现层资源的前缀和后缀 -->

    <bean id="viewResolver"

       class="org.springframework.web.servlet.view.InternalResourceViewResolver"

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

 

    <!--请求/处理单元关系映射-->

    <bean name="indexController"

       class="org.springframework.web.servlet.mvc.ParameterizableViewController"

       p:viewName="index" />

    <bean name="testController" class="com.zhkj.cms.controller.TestController"

       p:commandClass="com.zhkj.cms.controller.TestFrom"

       p:fail_view="fail"

       p:success_view="success" />

 

 

</beans>

 

通过以上设定,Web 服务器将把登录界面提交的请求转交给Dispatcher 处理,
Dispatcher
将提取请求(HttpServletRequest)中的输入数据,分发给对应的处理单元,
各单元处理完毕后,将输出页面返回给Web服务器,再由Web服务器返回给用户浏览器。
Dispatcher 
根据什么分发这些请求?显然,我们还需要一个配置文件加以设定。这也就
是上面提及的dispatcher-servlet.xml,此文件包含了所有的请求/处理单元关系映射设定,以及返回
时表现层的一些属性设置。

5.接下来写一个pojo,也就是form类,名字为TestFrom。代码如下

public class TestFrom {

    private String name;

    private String pwd;

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public String getPwd() {

       return pwd;

    }

    public void setPwd(String pwd) {

       this.pwd = pwd;

    }

   

}

6.然后编写TestController.java代码如下:

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

 

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;

 

public class TestController extends SimpleFormController{

    private String fail_view = null;

    private String success_view = null;

    @Override

    protected ModelAndView onSubmit(HttpServletRequest request,

           HttpServletResponse response, Object command, BindException errors)

           throws Exception {

       TestFrom ts = (TestFrom)command;

       if (ts.getName().equals("ly") && ts.getPwd().equals("123")){

           HashMap<String, Object> map = new HashMap<String, Object>();

           map.put("TestFrom", ts);

           List<String> msgList = new LinkedList<String>();

           msgList.add("这是什么?");

           msgList.add("hello world");

           msgList.add("你好,Spring MVC");

           map.put("msg", msgList);

           return new ModelAndView(this.getSuccess_view(),map);

       }else{

           return new ModelAndView(this.getFail_view());

       }

      

    }

    public String getFail_view() {

       return fail_view;

    }

    public void setFail_view(String fail_view) {

       this.fail_view = fail_view;

    }

    public String getSuccess_view() {

       return success_view;

    }

    public void setSuccess_view(String success_view) {

       this.success_view = success_view;

    }

   

   

}

可以看到,类似ServletdoGet/doPost方法,此版本的onSubmit方法签名中

包含了Servlet规范中的HttpServletRequestHttpServletResponse以提

供与Web服务器的交互功能(如Session的访问)。此参数类型的onSubmit方法

的调用优先级较高。也就是说,如果我们在子类中同时覆盖了这两个不同参数的onSubmit方法,那么只有此版本的方法被执行,另一个将被忽略。

然后将输入的请求数据对象强制转型为预定义的请求对象类型。

返回处理结果

ModelAndView类包含了逻辑单元返回的结果数据集和表现层信息。ModelAndView

本身起到关系保存的作用。它将被传递给Dispatcher,由Dispatcher 根据其中

保存的结果数据集和表现层设定合成最后的界面。

这里我们用到了两种签名版本的ModelAndView构造方法:

Ø public ModelAndView(String viewname)

返回界面无需通过结果数据集进行填充。

Ø public ModelAndView(String viewname, Map model)

返回界面由指定的结果数据集加以填充。可以看到,结果数据集采用了Map接口

实现的数据类型。其中包含了返回结果中的各个数据单元。关于结果数据集在界

面中的填充操作,可参见下面关于返回界面的描述。

上面这两个版本的构造子中,通过viewname指定了表示层资源。

另外,我们也可以通过传递View对象指定表示层资源。

Ø public ModelAndView(View view)

Ø public ModelAndView(View view, Map model)

我们可以结合RedirectView完成转向功能,如:

return new ModelAndView(

new RedirectView(/redirected.jsp

));

当然,我们也可以在带有HttpServletRequest参数的onSubmit方法实现中,通

HttpServletRequest/HttpServletResponse完成forward/redirect

能,这两种途径可以达到同样的效果。

 

7.接下来写index.jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@include file="include.jsp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<%=request.getLocalAddr() %>

<form action="test.htm" method="post">

name:<input type="text" name="name"/><br>

pwd:<input type="text" name="pwd"/><br>

<input type="submit">

</form>

</body>

</html>

 

8.编写fail.jsp这个页面是如果登录失败才会跳转到这里

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

登陆失败<a href="index.htm">点此</a>返回

</body>

</html>

9.编写success.jsp文件,如果登录成功,跳转到这个页面

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@include file="include.jsp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

登陆成功!!!!!!!!!!<br>

<c:out value="${TestFrom.name}"></c:out><br>

<c:forEach items="${msg}var="item">

${item}<br>

</c:forEach>

</body>

</html>

 

如果各位按照上面的代码多试试,就会成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值