web.xml文件:
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/classes/applicationContext.xml </param-value> </context-param> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/classes/mySpring-selevert.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
mySpring-selevert.xml文件需要加上这些 <!-- 启动注解驱动 --> <mvc:annotation-driven/> <!--启用自动扫描 --> <context:component-scan base-package="com.wode.controller" /> <!-- ViewResolver视图解析器 用于将返回的ModelAndView对象进行分离 --> <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> 完成案例1:使用注解登录 首先使用第一个注解@Controller标注这个类是一个控制器 @RequestMapping(path="/login",method=RequestMethod.GET)--这个东西就表明了使用的request路径 案例1也在基础搭建中 案例2:在这个控制器中添加一个注册的方法 我们发现在同一个类中不同业务区分是通过@RequestMapping("regist.do")来实现的这比以前要简单多了 案例3:为了简化开发,我们发现每次我们接受参数都需要使用request来接受,无形中增加了我们的代码量 我们可以这样 @RequestMapping("regist.do") public String regist(String name,String pwd){ ---这里,我们的参数和表单提交保持一致 System.out.println(name+" "+pwd); return "main"; } 如果不想一致呢?和我们mybatis中使用的方法一样 public String regist(String name,@RequestParam(value="pwd")String password){ //这样就可以了 System.out.println(name+" "+password); return "main"; } 案例4:继续思考,之前我们就遇到过这样的问题,传递的参数太多了,我们要想办法把他封装成为一个对象 @RequestMapping("regist.do") public String regist(UserBean bean){ System.out.println(bean.getUsername()+" "+bean.getPassword()); return "main"; } 这里需要注意的是表单中的name必须和bean中的属性名字一模一样,错一个字都不行 案例5 注意,我们之前传递参数是使用的req.setAttribute(arg0, arg1);这种方式来的,但是spring mvc为了简化这个操作,可以这样做 @RequestMapping("regist.do") public String regist(UserBean bean,Map<String, Object> map){ System.out.println(bean.getUsername()+" "+bean.getPassword()); map.put("userName", bean.getUsername());//modelAndView model return "main"; } 这里使用的map来充当了request对象让我们更简单的操作 但是这里有个坑,我们在后边将重定向的时候讲解一下 案例6:我们经常要遇到ajax操作,这怎么做呢? 这里我们使用和之前差不多的方法:回忆下Servlet @RequestMapping("doAjax.do") public void doAjax(PrintWriter writer){ ---这里 writer.println("hello world"); } 我们接着在页面上就可以正常使用ajax了,还有我们之前的json的使用 案例7 那我们怎么在注解中使用转发和重定向呢?其是很简单 @RequestMapping("regist.do") public String regist(UserBean bean,Map<String,Object> map){ System.out.println(bean.getUsername()+" "+bean.getPassword()); if(bean.getUsername().equals("zhangsan")){ //请求转发 return "forward:main.jsp"; }else{ //重定向 map.put("userName",bean.getUserName); return "redirect:main.jsp"; } } 分别转发和重定向一次,在重定向的位置发生了问题 就是重定向竟然有了参数??? -----原因就是map搞的 案例10 关于json的使用 这里做了改进 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> </list> </property> </bean> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> jsp页面发送ajax @Controller public class TestAction { @RequestMapping("test.do") public @ResponseBody List<UserBean> test1(String uname) throws Exception{ //这个东西是核心 List<UserBean> list = new ArrayList<UserBean>(); UserBean user=new UserBean(); user.setUsername("张三"); user.setPassword("admin"); UserBean user2=new UserBean(); user2.setUsername("lisi"); user2.setPassword("admin"); list.add(user); list.add(user2); return list; } @ResponseBody自动帮你做转换,我们只需要把jackson的jar包放进去就可以了,以前需要我们手动在xml文件中处理的我们打开TCP/IP Monitor可以清楚的看到实验结果
