线上实训day02(二)——springMVC

一、初识SpringMVC

1.传统的MVC模式:

  1. M-Model(模型):模型(Model)的职责是负责业务逻辑。包含两层:业务数据和业务处理逻辑。比如实体类、DAO、Service都属于模型层。
  2. V-View(视图):视图(View)的职责是负责显示界面和用户交互(收集用户信息)。属于视图的组件是不包含业务逻辑和控制逻辑JSP
  3. C-Controller(控制器):控制器是模型层M和视图层V之间的桥梁,用于控制流程。比如:在Servlet项目中的单一控制器Servlet。

2.Spring MVC模式

  • Spring Web MVC是Spring框架一个非常重要的能能模块。实现了MVC结构,便于简单、快速开发MVC结构的Web程序。Spring Web MVC提供的API封装了Web开发中常用的功能,简化了Web过程。Spring Web MVC提供了M、V和C相关的主要实现组件,具体如下:  
  1.  DispatcherServlet(控制器,请求入口)
  2. HandlerMapping(控制器,请求派发)
  3. Controller(控制器,请求处理流程)
  4. ModelAndView(模型,封装业务处理结果和视图)
  5. ViewResolver(视图,视图显示处理器)
  • Spring web  MVC 主要处理流程:
  1. 浏览器向Spring发出请求,请求交给前端控制器DispatcherServlet处理;
  2. 控制器通过HandlerMapping找到相应的Controller组件处理请求;
  3. 执行Controller组件约定方法处理请求,在约定方法调用模型组件完成业务处理。约定方法可以返回一个ModelAndView对象,封装了处理结果数据和视图名称信息。
  4. 控制器接收ModelAndView之后,调用ViewResolver组件,定位View(JSP)并传递数据信息,生成响应界面。

项目一SpringMVC:

项目框架:

(1)配置web.xml文件:

(2)创建HelloController类:

@Component
public class HelloController implements Controller {

	public ModelAndView handleRequest(HttpServletRequest arg0,
			HttpServletResponse arg1) throws Exception {
		// 测试输出
		System.out.println("HelloController.handleRequest()");
		// 准备返回值
		ModelAndView result = new ModelAndView();
		// 设置响应的view的名称
		result.setViewName("index");
		// 返回
		return result;
	}

}

(3)创建applicationContext.xml

	<!-- 组件扫描 指定的包 -->
	<context:component-scan base-package="tedu.spring.controller"></context:component-scan>
	<!--配置handlerMapping ,不需要指定id属性 -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<!-- key表示请求路径 ;文本节点配置Controller的id -->
				<prop key="/hello.do">helloController</prop>
			</props>
		</property>
	</bean>
	
	<!-- 配置viewResolver,不需要指定id属性 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!--前缀,即view文件在项目中相对于webapp的路径 -->
		<property name="prefix" value="/WEB-INF/"></property>
		<!-- 后缀,即文件的扩展名 -->
		<property name="suffix" value=".jsp"></property>
	</bean>

(4) 完善web.xml文件,使启动时加载applicationContext.xml

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

		<!-- 配置加载spring的配置文件 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:applicationContext.xml</param-value>
		</init-param>
		<!-- 启动时加载 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>SpringMVC</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

(5)创建index.jsp:改“UTF-8”,随便在body里面写什么;

(6)访问项目:http://localhost:8080/SpringMVC/hello.do

总结:

  1. 导入相关的包
  2. 在web.xml中配置DispatcherServlet前端组件
  3. 创建Controller的实现类:controller组件负责执行具体的业务处理,可以调用DAO等组件,需要Controller接口及约定方法。Controller组件约定的handleRequest方法执行后返回一个ModelAndView对象,该对象封装模型数据和视图信息。
  4. applicationContext.xml文件中配置Controller的实现类,便于实例化
  5. 在applicationContext.xml文件中配置SimpleUrlHandlerMapping组件:通过HandlerMapping组件,DispatcherServlet控制器可以将客户HTTP请求映射到Controller组件上
  6. 在applicationContext.xml文件中配置InternalResourceViewResolver视图解析器,负责处理返回客户响应视图。

项目二:基于注解的SpringMVC1

1.项目框架:

2.创建RegisterController类(用于注册控制)

@Controller
@RequestMapping("/user")
public class RegisterController {

	// http://localhost:8080/SpringMVC1/user/register.do
	@RequestMapping("register.do")
	public ModelAndView handleRequest() {
		System.out.println("RegisterController.handleRequest()");
		ModelAndView mav = new ModelAndView();
		mav.setViewName("index");
		return mav;
	}

	// http://localhost:8080/SpringMVC1/user/login.do
	@RequestMapping("/login.do")
	public String login() {
		return "login";
	}
}

3.创建applicationContext.xml文件

4.创建index.jsp和login.jsp:

5.配置web.xml文件:

6.访问:http://lcoalhost:8080/SpringMVC1/user/register.do和http://lcoalhost:8080/SpringMVC1/user/login.do

小结:

  1. 在Spring MVC设计的WEB应用中,可以使用 @Controller 对控制器类(原本实现Controller的类)进行注解!
  2. 一旦使用了 @Controller 注解,控制器类可以不必实现Controller接口!
  3. 注意:@Controller注解不可以单独使用,必须匹配@RequestMapping一起使用!
  4. @RequestMapping用于对处理器类中的方法进行注解,并且需要指定所处理的请求的路径
  5. 使用了@Controller和@RequestMapping的组合之后,原本Spring的XML配置文件中不要再配置HandlerMapping!如果仍然存在HandlerMapping的配置,并且没有当前请求与处理器的映射关系的配置,反而会报错!总之,不要配置HandlerMapping!!!
  6. @RequestMapping不仅仅可以对方法进行注解,也可以用于对处理器类进行注解! 但是,对处理器类进行注解不可以取代对方法的注解,两者应该同时使用!用于处理请求路径有多个层级的需求。
  7. 当使用@RequestMapping同时注解处理器类和方法时,两处所写的路径对于组合时的路径分隔符是没有要求的!例如以下组合都是正确的;

/user   /register.do  【推荐】       /user   register.do               /user/  /register.do              user    /register.do      user   register.do

  1. @RequestMapping用于配置处理器类和请求路径的映射,必须对处理器类中的方法进行注解,如果请求路径有多层级,可以添加对处理器类的注解,则在对方法的注解中可以少写一些路径。
  2. 当使用了以上注解后,同一个Controller中可以处理多种不同的请求,并且,类中处理请求的方法是可以自定义的!方法的自定义表现为:
  1. - 方法名称没有要求
  2. - 方法的参数没有要求
  3. - 方法不要声明抛出异常
  4. - 方法必须是public的
  5. - **方法的返回值必须是ModelAndView或者String的**

三(一)、基于注解的SpringMVC的项目搭建

1.练习要求:

  1. 项目名称:DAY04-03-SpringMVC-Sample
  2. 请求路径:http://SERVER:PORT/PROJECT/user/register.do
  3. 处理器类:cn.tedu.spring.controller.UserController
  4. 处理方法:public String showRegisterForm() { }
  5. JSP页面:user_register_form.jsp

 

目录结构:

创建UserController类:

@Component
@RequestMapping("/user")
public class UserController {
	@RequestMapping("/register.do")
	public String showRegisterForm() {
		return "user_register_form";
	}

}

创建applicationContext类:

配置web.xml文件:

创建user_register_form.jsp:

访问:http://localhost:8080/SpringMVC2/user/register.do

三(二)、基于注解的Spring MVC 续—获取请求参数

创建User类:

(此处省略set/get方法)

创建UserController类:

@Component
@RequestMapping("/user")
public class UserController {
	@RequestMapping("/register.do")
	public String showRegisterForm() {
		return "user_register_form";
	}

	@RequestMapping("/handlerRegister")
	public String handlerRegister(HttpServletRequest request) {
		System.out.println("UserController.handlerRegister()");
		String username = request.getParameter("username");
		System.out.println("username" + username);
		return null;

	}
}

完善jsp页面:

<body>
	<center>
		<div id="content">
			<h2>用户注册</h2>
			<form
				action="${pageContext.request.contextPath}/user/handlerRegister.do"
				method="post">
				<div id="register-form">
					<div class="item">
						<b>用户名</b>
						<p>
							<input type="text" class="inp" name="username">
						</p>
					</div>
					<div class="item">
						<b>密码</b>
						<p>
							<input type="password" class="inp" name="password">
						</p>
					</div>
					<div class="item">
						<b>月薪</b>
						<p>
							<input type="text" class="inp" name="salary">
						</p>
					</div>
					<div class="item">
						<input type="submit" class="button" name="提交">
					</div>
				</div>
			</form>
		</div>
	</center>
</body>

访问:http://localhost:8080/SpringMVC2/user/register.do

小结——通过HttpRequestServlet获取请求参数

  1. 添加HttpServletRequest参数时,不一定需要添加HttpServletResponse参数。
  2. 当添加参数后,在方法中,调用参数的getParameter(String)方法即可获取请求参数的值,做法同 使用Servlet编程。

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值