我是初学,了解的不深,若有错误望指出。也是为了以后方便自己的复习和监督自己学习。
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则正确)