基金网站建设需求书,wordpress客户,网站建设如果没有源代码,页面设计好看的网站目录 SpringMVC简介复习servletSpringMVC入门导包配置前端控制器编写处理器实现Contoller接口普通类加注解(常用) 路径问题获取参数的方式过滤器简介自定义过滤器配置框架提供的过滤器 springMVC向页面传值的三种方式视图解析器springMVC的转发和重定向 SpringMVC简介
1.Sprin… 目录 SpringMVC简介复习servletSpringMVC入门导包配置前端控制器编写处理器实现Contoller接口普通类加注解(常用) 路径问题获取参数的方式过滤器简介自定义过滤器配置框架提供的过滤器 springMVC向页面传值的三种方式视图解析器springMVC的转发和重定向 SpringMVC简介
1.SpringMVC是一个基于MVC模式的WEB/表现层框架它解决WEB开发中常见的问题参数接收、文件上传/下载、表单验证、国际化等等 2.SpringMVC作为Spring框架一个非常重要的功能模块可以与Spring无缝集成提高开发效率 3.Spring是一个轻量级的Java 开发框架为了解决企业应用开发的复杂性而创建。SpringMVC以Spring框架为核心为应用程序中的Web层表现层提出的一套优秀的解决方案 4.目前很多公司都使用SpringMVC90%的招聘单位要求熟悉使用SpringMVC 注意SpringMvc的功能就是之前Servlet的功能可以理解为使用SpringMVC代替了Servlet
复习servlet
见代码 创建动态web工程 - HelloServlet - web.xml - Tomcat
HelloServlet
public class HelloServlet extends HttpServlet{Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {System.out.println(进来了);}
}web.xml servletservlet-namehelloServlet/servlet-nameservlet-classcn.ming.controller.HelloServlet/servlet-class/servletservlet-mappingservlet-namehelloServlet/servlet-nameurl-pattern/hello/url-pattern/servlet-mapping部署到Tomcat浏览器访问localhost/hello
tips 1.Target runtime选上tomcat后就自动导入了相关jar包不用再去lib添加相关jar包 2.Dynamic web module version选3.0以上版本因为支持注解如webservlet 3.创建动态web工程后怎么修改classes路径 项目右键 - build path - Configure Build Path - source - 放到WEB-INF下的classes 4.为什么部署到webapp而不是部署到项目根目录 因为WEB-INF下有看不到的classes路径外面的java代码已编译到里面
SpringMVC入门
导包
SpringMvc是Spring的一个模块所以要用SpringMvc需要导入Spring的jar包 tips动态web工程一般导完包后会自动编译不用手动build path
配置前端控制器
以前servlet的方式 现在的方式 前端控制器就是springMVC提供的servlet接收所有请求但不处理请求发给处理器即一个个方法去处理所以需要配置前端控制器
web.xml servletservlet-namedispatcherServlet/servlet-name!-- 前端控制器 人家写好的servlet --servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class!-- 加载SpringMVC的核心配置文件 --init-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:springMVC.xml/param-value/init-param!-- Tomcat启动就初始化servlet --load-on-startup1/load-on-startup/servletservlet-mappingservlet-namedispatcherServlet/servlet-name!-- 请求路径 --url-pattern/hello/url-pattern/servlet-mappingspringMVC.xml
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beans
xmlns:contexthttp://www.springframework.org/schema/context
xmlns:mvchttp://www.springframework.org/schema/mvc
xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
/beans编写处理器
业务处理控制器的三种实现 1.实现Contoller接口 2.实现HttpRequestHandler接口 3.普通类加注解(常用)
实现Contoller接口
HelloController
public class HelloController implements Controller{Overridepublic ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {System.out.println(我是HelloController);return null;}}springMVC.xml
bean name/hello.do classcn.ming.controller.HelloController/beanweb.xml servlet-mappingservlet-namedispatcherServlet/servlet-name!-- 请求路径 --url-pattern*.do/url-pattern/servlet-mapping普通类加注解(常用)
上面这两种太局限方法名固定了参数固定返回值固定还要实现一个接口。所以后面都用第三种
HiController
Controller // 代表当前这个类就是controller 交给spring管理 不用再配置bean
//RequestMapping(/hi)
public class HiController {RequestMapping(/hello.do)public void handler1() {System.out.println(我回来了);}public void handler2() {}public void handler3() {}
}springMVC.xml !-- 开启扫描包路径 --context:component-scan base-packagecn.ming.controller /路径问题
后缀匹配匹配的范围太小 /*匹配所有请求会将csshtmljsp都匹配上一般用在过滤器对于restful不友好 /匹配所有请求最常用不会拦截.jsp但是会拦截静态资源(csshtmlimages)(/替代了tomcat中默认处理静态资源的Servlet)所以需要配置静态资源放行但是这又会导致RequestMapping等注解失效所以还要加上使spring注解生效的配置
代码 web.xml servlet-mappingservlet-namedispatcherServlet/servlet-name!-- 请求路径 --url-pattern//url-pattern/servlet-mappingspringMVC.xml !-- 放行静态资源 --mvc:default-servlet-handler/!-- 使spring注解生效 RequestMapping--mvc:annotation-driven /webapp下新建index.html
html
head
meta charsetUTF-8
titleInsert title here/title
/head
bodyh1hello world/h1
/body
/htmlHiController
Controller // 代表当前这个类就是controller 交给spring管理 不用再配置bean
//RequestMapping(/hi)
public class HiController {RequestMapping(/hello.do)public void handler1() {System.out.println(我回来了);}RequestMapping(/hi.do)public void handler2() {System.out.println(hi.do。。);}RequestMapping(/hei)public void handler3() {System.out.println(hei.....);}
}启动tomcat分别测试访问页面和controller
获取参数的方式
tips浏览器访问默认发get请求表单可以自己选发get或post
ParamController
/*** springMVC接收参数的四种方式*/
Controller
public class ParamController {/*** 一般不用 以前的方式* http://localhost/handler1?namezs*/RequestMapping(/handler1) // 请求的路径public void handler1(HttpServletRequest request){String name request.getParameter(name);System.out.println(name);}/*** 常用 重点 类型要符合名称要相同* http://localhost/handler2?namelsage18*/RequestMapping(/handler2) // 请求的路径public void handler2(String name,Integer age){System.out.println(name);System.out.println(age);}/*** 常用 重点 对象接收参数 * http://localhost/handler3?namelsage18*/RequestMapping(/handler3) // 请求的路径public void handler3(User user){System.out.println(user);}/*** 暂时不用 restful风格方式 * localhost:80/handler4/zs/30*/RequestMapping(/handler4/{name}/{age}) // 请求的路径public void handler4(PathVariable(name)String name, PathVariable(age)Integer age){System.out.println(name);System.out.println(age);}
}启动tomcat浏览器访问
过滤器简介
tips浏览器地址栏默认都是get发post请求可以用表单指定get请求在tomcat里自己解决了中文乱码而post需要自己解决中文乱码 代码里每个处理器都设置字符集太麻烦所以现在用filter过滤器
filter过滤器 作用乱码问题过滤非法字符 执行时机请求到达前端控制器之前
自定义过滤器
form.html
html
head
meta charsetUTF-8
titleInsert title here/title
/head
bodyform action/handler3 methodpostname: input typetext namenamebr/age: input typetext nameagebr/input typesubmit value提交/form
/body
/htmlMyFilter
public class MyFilter implements Filter{//初始化方法Overridepublic void init(FilterConfig arg0) throws ServletException {}//处理具体的内容Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {System.out.println(filter。。。。。。);// 处理乱码问题req.setCharacterEncoding(utf-8);// 放行chain.doFilter(req, resp);}//销毁方法Overridepublic void destroy() {}}web.xml filterfilter-namemyFilter/filter-namefilter-classcn.ming.filter.MyFilter/filter-class/filterfilter-mappingfilter-namemyFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping浏览器访问
配置框架提供的过滤器
web.xml !-- 我们用框架提供的支持UTF-8编码的过滤器 --filterfilter-namecharacterEncoding/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param!--强制指定字符编码即使request或response设置了字符编码也会强制使用当前设置的,任何情况下强制使用此编码--init-paramparam-nameforceEncoding/param-nameparam-valuetrue/param-value/init-param/filterfilter-mappingfilter-namecharacterEncoding/filter-nameurl-pattern/*/url-pattern/filter-mappingspringMVC向页面传值的三种方式
方式一 DataController
Controller
RequestMapping(/data)
public class DataController {/*** 向页面传值方式一 不常用。。。*/RequestMapping(/handler1)public ModelAndView handler1(){ ModelAndView mv new ModelAndView();// 向request域存值mv.addObject(name,tom);mv.addObject(age,30); // 跳转到页面mv.setViewName(/WEB-INF/views/data.jsp);return mv;}/*** 向页面传值方式二 常用*/RequestMapping(/handler2)public String handler2(Model model){// 向request域存值model.addAttribute(name, 王天霸);model.addAttribute(age, 40);return /WEB-INF/views/data.jsp;}/*** 向页面传值方式三 : 常用*/RequestMapping(/handler3)public String handler3(MapString,Object map){// 向request域存值map.put(name, 力很弱);map.put(age, 60);return /WEB-INF/views/data.jsp; //返回页面}
}data.jsp
% page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8%
!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd
html
head
meta http-equivContent-Type contenttext/html; charsetUTF-8
titleInsert title here/title
/head
body${name}br/${age}
/body
/html视图解析器
视图解析器把页面的前后缀配置起来后面就都只需要简写
springMVC.xml !-- 视图解析器 prefixreturnsuffix /WEB-INF/views/data.jsp --bean classorg.springframework.web.servlet.view.InternalResourceViewResolverproperty nameprefix value/WEB-INF/views//propertyproperty namesuffix value.jsp/property /beanDataController /*** 向页面传值方式三 : 常用*/RequestMapping(/handler3)public String handler3(MapString,Object map){// 向request域存值map.put(name, 力很弱);map.put(age, 60);return data; //返回页面}springMVC的转发和重定向
DataController /*** 转发和重定向* 使用forward转发和redirect重定向都不会走视图解析器但它们之间的区别还是存在*/RequestMapping(/handler4)public String handler4(){// 默认是转发 走视图解析器// return data;// 不走视图解析器 forward:转发// return forward:/index.html;// 不走视图解析器 redirect:重定向return redirect:/index.html;}