Spring Web MVC

来源:互联网 发布:网络营销策划的要素 编辑:程序博客网 时间:2024/05/22 10:55

我是初学,了解的不深,若有错误望指出。也是为了以后方便自己的复习和监督自己学习。
Spring Web MVC 需要使用IOC功能
用于开发MVC结构的Web程序

1、MVC思想

将程序组件分为模型,视图,控制器三部分
流程: 发请求给控制器,控制器调用模型并响应,然后控制视图并响应 最后响应给请求的。

这里写图片描述

但是这个是一个控制器。如果比较大的话就不够了。

这里写图片描述

2、Spring如何实现MVC
3、Spring Web MVC处理流程
组件构成及流程

这里写图片描述

案例 hello.jsp
在WEB-INF下创建hello.jsp
不能直接访问到。
要做
/hello.do
DispatcherServlet(配置)
HanlderMapping(配置)
HelloController(要编写+配置)
ViewResolver
/WEB-INF/hello.jsp(编写)

a.搭建Spring Web MVC开发环境

引入 ioc,webmvc开发包。src中添加配置文件

b.编写HelloController

规则实现Contriller接口

package Controller;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 HelloController implements Controller {    public ModelAndView handleRequest(HttpServletRequest arg0,            HttpServletResponse arg1) throws Exception {        ModelAndView mav = new ModelAndView();        mav.setViewName("hello");//设置视图名 hello.jsp就写hello        mav.getModel().put("msg", "模型数据");//设置要传出去的模型数据(传到jsp)        //等价于 request.setAttrobute("msg","模型数据");        //之后jsp就可以用el表达式来获取 ${msg}        return null;    }}

在web.xml设置DispatcherServlet其路径

这里写图片描述

可以选中包名直接Ctrl+C复制,直接粘贴。

在 web.xml 写:

<servlet>  <servlet-name>springmvc</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <!-- 指明配置文件 -->  <init-param>  <param-name>contextConfigLocation</param-name>  <param-value>classpatch:applicationContext.xml</param-value>  </init-param>  </servlet>  <servlet-mapping>  <servlet-name>springmvc</servlet-name>  <url-pattern>*.do</url-pattern>  </servlet-mapping>

c.配置 handlermapping 在Spring配置文件中写。

然后注意也要写路径同样像上面那样获取。

注意是这个下面的 org.springframework.web.servlet.handler.SimpleUrlHandlerMapping.class
不是org.springframework.web.servlet.HandlerMapping.class
!!!

这里写图片描述

<!-- 配置handlermapping -->    <bean id="handlermapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">    <!-- 指定请求和controller对应关系 -->    <property name="mapping">    <props>    <!-- 几个请求就写几个prop -->    <prop key="/hello.do">helloController</prop>    </props>    </property>    </bean>

d.配置 Controller

<!-- 配置controller -->    <bean id="helloController" class="Controller.HelloController">    </bean>

e.配置 viewresolver

org.springframework.web.servlet.view.InternalResourceViewResolver
这里写图片描述

这里写图片描述

遇到了一些错误如下:

1、mappings写成了mapping …

Servlet.init() for servlet springmvc threw exception

<!-- 配置handlermapping -->    <bean id="handlermapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">    <!-- 指定请求和controller对应关系 -->    <property name="mappings">    <props>    <!-- 几个请求就写几个prop -->    <prop key="/hello.do">helloController</prop>    </props>    </property>    </bean>

2.控制器方法我没有将其返还
默认返回的空
就会出现网页一片空白什么也没有的状态

入门事例 登陆:

1、显示登陆页面

/login.do
DispatcherServlet
handlermapping
LoginController
viewResolver
/WEB-INF/login.jsp

因为配置的都配置完了,需要写一个Controller来实现控制进入哪个视图。

public class LoginController implements Controller {    public ModelAndView handleRequest(HttpServletRequest arg0,            HttpServletResponse arg1) throws Exception {        ModelAndView mav = new ModelAndView("login");        //调用login.jsp        // TODO Auto-generated method stub        return mav;    }

因为没有给login.jsp转发数据。所以直接创建 ModelAndView 的直接可以写视图名即 login

然后并在Spring配置文件中写

</bean>    <!-- 写入LoginController -->    <bean id="loginController" class="Controller.LogionController">    </bean>

访问 login.do即进入
这里写图片描述

增加 实现点击登陆后进入登陆后的界面
/logon.do(提交表单)
handlermapping
Login2Controller

public ModelAndView handleRequest(HttpServletRequest arg0,            HttpServletResponse arg1) throws Exception {        // TODO Auto-generated method stub        ModelAndView mav = new ModelAndView();        String username = arg0.getParameter("username");        String password = arg0.getParameter("password");        if(username.equals("root")&&password.equals("1234")){            mav.getModel().put("username", username);            mav.getModel().put("password", password);            mav.setViewName("hello");        }        else{            mav.setViewName("logon");        }        return mav;

我把上面的登陆界面改成tologin.do 然后提交表单改为login.do

<prop key="/hello.do">helloController</prop>    <prop key="/tologin.do">loginController</prop>    <prop key="/login.do" >login2Controller</prop>

(若用户名是root,密码为1234则正确)

这里写图片描述

0 0
原创粉丝点击