总结
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”,“输入的信息错误”);
}
}