Spring MVC组件配置,以及ModelAndView参数类型,设计实现流程

总结

springWebMVC流程

http请求URL定位一个地址
备注:HttpClient apche请求的安装包
浏览器借助ajax
请求—>DispatcherServlet—>HandlerMapping—
—>Controller(返回modelAndView)—>ViewResolver–>视图jsp
模板文件数据填充构成静态文件返回给浏览器,
模板技术
javaWeb模板技术
freeMarker技术,模板引擎,改变数据,形成html输出
没有EL表达式使用独特的FTL
模板文件使用别人的Html
将数据放进数据模型,只认模板表达式,
jsp可以用EL jstl ,也可以嵌入java代码
模板技术比较单一,前台页面只要设置模板技术,分工比较明确

视图有不同表现形式
框架是固定的,按照流程进行访问请求

1.DispacterServlet主控制器

主控制器,所有的SpringMVC请求首先进入主控制器
接收所有web请求

配置servlet,进行初始化,实例化Spring容器对象,然后调用HandlerMapping

2.HandlerMapping映射处理器

之前不使用组件扫描使用配置

  <bean id="handlerMapper" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  		<property name="mappings">
				<props>
				<!--请求为hello.do调用id=helloController-->
				       <prop key="/hello.do">helloController</prop>
				       <prop key="/news.do">newsListController</prop>
				</props>
      </property>
  </bean>
<!-- 	配置helloController -->
      <bean id="helloController" class="com.tracy.controller.HelloController"></bean>
    <!--   配置newsListController -->
    <bean id="newsListController" class="com.tracy.controller.NewsListController">

映射处理器
SimpleUrlhandlerMapping,使用者传递RequestMapping ,.do请求对应Controller

RequestMappingHandlerMapping
@requestMapping("/hello.do")
public ModelAndView execute(){

}
映射处理器,负责维护请求URL和Controller之间的映射关系,可以根据请求找到相对应的Controller处理

3.XXXXXController 业务控制器

业务控制器,负责调用模型组件,处理请求。

4ViewResolver视图解析器

解析Controller返回的结果,定位视图jsp组件(默认是转发方式),将模型数据传递到视图jsp

注解配置,不流行Xml配置
#SpringWebMVC注解配置使用
1.RequestMappingHandlerMapping
支持@RequestMapping(“/请求地址”),在Controller方法前定义或类前定义
public calss Controller{
@RequestMapping("/hello.do")
public ModelAndView execute(){

}

}

RequestMappingHandlerMapping定义方法
<bean id“” class=“RequestMappingHandlerMapping”>
<bean id“” class=“RequestMappingAdapterMapping”>

<mvc:annotation-driven />
自定义标签 封装 上面两个组件
每个标记都需要组件进行解析支撑

设计实现流程

hello.do请求—>DispatcherServlet—>HandlerMapping—
—>Controller(返回modelAndView)—>ViewResolver–>视图jsp

搭建开发环境

1.创建项目
2.引入jar包~
3.配置spring-mvc.xml
编写确实的组件

配置流程中的组件

配置DispatcherServlet组件

<?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
 
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>
  	org.springframework.web.servlet.DispatcherServlet
  	</servlet-class>
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:spring-mvc.xml</param-value>
  	</init-param>
  		<load-on-startup>1</load-on-startup>
  		<!--启动服务器就实例化组件 1为优先级-->
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

–配置HandlerMapping组件

<mvc:annotation-driven>

–配置Controller组件

<context:component-scan base-package="">

配置ViewResolver

    <!--   配置ViewResolver配置spring-mvc.xml通用资源适配解析器前缀  后缀 -->
<bean id="ModelAndView" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property  name="prefix" value="/"></property>
          <property  name="suffix" value=".jsp"></property>
</bean>

不用再实现Controller
ModelAndView返回的对象数据,不需要数据跳转String就可以
返回值可以是ModelAndView或String
参数可以是有参或无参

返回值类型

参数类型 HttpServletRequest HttpServletResponse HttpServletSession

返回值是String

public String execute() {
return “”hello";

}

返回值是ModelAndView

public ModelAndView execute1(){
ModelAndView mav=new ModelAndView();
mav.setViewName();
mav.getModel().put(“msg”,“传给页面的值”);
return mav;
}

登录功能
显示登录界面
tologin.do请求 ----DispatcherServlet-----HandlerMapping-----Logincontroller----ViewResolver组件----.jsp

public class LoginController{

@RequestMapping("./tologin.do");
public String toLogin(){
return "login";

}

}

登录按钮处理
login.do—DispatcherSrevlet-----HandlerMappaing----LoginController—ViewResolver----成功ok.jsp

@RequestMapping("./login.do")

传递参数 问题

第1种参数的获取 HttpServletRequest request

@RequestMapping("toLogin.do")
	public ModelAndView execute2(HttpServletRequest request) {
		
		ModelAndView mav=new ModelAndView();
		String name=request.getParameter("name");
		String pwd=request.getParameter("pwd");
		if(name.equalsIgnoreCase("root")&&pwd.equals("123456")) {
			mav.getModel().put("msg","恭喜登录成功");
			mav.setViewName("ok");
			return mav;
		}else {
			mav.getModel().put("msg","登陆失败");
			mav.setViewName("login");
			return mav;
		}
	}

pubic ModelAndView check( HttpServletRequest request){
//检查用户名 与密码
使用request进行表单数据进行获取
String name=request.getParameter(“name”);
String pwd=request.getParameter(“pwd”);
if(“scoott”.equalsIgnoreCase(name)&&“123456”.equals(pwd)){
mav.setViewName(“ok”);
}else{
mav.setViewName(“login”);
}
}

第2种参数的获取 根据form参数对应规则传递

@RequestMapping("toLogin.do")
		public ModelAndView execute3(@RequestParam(value="name",required = true,defaultValue = "tom") String username,String pwd) {
			//使用@RequestParam进行参数设置 require 为true必须有参数传递  defaultValue 默认值当无参数传递,取默认值,有参时为实际值
			ModelAndView mav=new ModelAndView();
			System.out.print(username+"="+pwd);
			if(username.equalsIgnoreCase("root")&&pwd.equals("123456")) {
				mav.getModel().put("msg","恭喜登录成功");
				mav.setViewName("ok");
				return mav;
			}else {
				mav.getModel().put("msg","登陆失败");
				mav.setViewName("login");
				return mav;
			}
		
	}

//参数传递,名称对应规则 参数必须与form表单数据相同
require true必须有参数传递 defaultValue 默认显示值
@requestParams(value=“username” require=“”true/false“”,defaultValue=“”tom“”) String name,
@RequestMapping("./login.do")
pubic ModelAndView check(String name,String pwd){
//检查用户名 与密码
使用request进行表单数据进行获取

if("scoott".equalsIgnoreCase(name)&&"123456".equals(pwd)){
		mav.setViewName("ok");
}else{
	mav.setViewName("login");
}

}
400请求参数有问题
传递参数 问题可以1.使用request获取,2.可以参数接收,3.可以封装接收 封装为实体类

第3种参数的获取 封装成实体类

@RequestMapping("toLogin.do")
		public ModelAndView execute4(User user) {
			
			ModelAndView mav=new ModelAndView();
			
			if(user.getName().equalsIgnoreCase("root")&&user.getPwd().equals("123456")) {
				mav.getModel().put("msg","恭喜登录成功");
				mav.setViewName("ok");
				return mav;
			}else {
				mav.getModel().put("msg","登陆失败");
				mav.setViewName("login");
				return mav;
			}
		
	}

@RequestMapping("./login.do")
pubic ModelANdView check(User user){
if(“scoott”.equalsIgnoreCase(user.getName)&&“123456”.equals(user.getPwd)){
mav.setViewName(“ok”);
}else{
mav.setViewName(“login”);
mav.getModel().put(“error”,“输入的信息错误”);
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值