SpringMVC
来源:互联网 发布:淘宝aj比较靠谱的店 编辑:程序博客网 时间:2024/06/16 20:07
一.springMVC通过xml设置
1.在web.xml中配置springmvc控制器
<!-- 配置springMvc核心控制器 --> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- 默认会去WEB-INF下找DispatcherServlet-servlet.xml文件 -->
2.在WEB-INF下配置DispatcherServlet-servlet.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <bean name="/hello.do" class="com.itheima.springmvc.HelloAction" ></bean> <!-- 映射器 将bean的name属性当做url请求 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 适配器 用于寻找实现了Controller接口的实现类 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- 视图解析器 通过ModelAndView对象封装的视图名找到真正的页面 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/></beans>
3.自定义HelloAction.java
public class HelloAction implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception { // TODO Auto-generated method stub ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message", "hello world!!"); modelAndView.setViewName("/jsp/success.jsp"); return modelAndView; }}
4.自定义/jsp/success.jsp文件
<body><h1>${message}</h1></body>
5.加载指定的springmvc.xml文件
在web.xml中配置<!-- 配置springMvc核心控制器 --> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 通知DispatcherServlet去指定路径下加载springmvc.xml --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet>
6.配置逻辑视图
在springmvc01.xml中配置<!-- 视图解析器 通过ModelAndView对象封装的视图名找到真正的页面 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="prefix" value="/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean>
7.将springmvc01.xml加入总springmvc.xml文件
<import resource="com/itheima/springmvc/spring01.xml"/>
8.映射器配置
在springapp01.xml配置
<!-- 映射器 适合将多个请求路径映射到一个action中 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/update.do">userAction</prop> <prop key="/delete.do">userAction</prop> <prop key="/query.do">userAction</prop> </props> </property> </bean>
9.jsp到jsp/html之间的转发控制器
<!-- jsp到jsp之间的转发控制器 --> <bean name="/home.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> <property name="viewName" value="/jsp/success.jsp"></property> </bean>
10.封装参数的控制器
public class UserAction extends AbstractCommandController{ public UserAction(){ this.setCommandClass(User.class); } @Override protected ModelAndView handle( HttpServletRequest request, HttpServletResponse response, Object obj, BindException error) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message", "增加用户成功"); modelAndView.setViewName("/jsp/success.jsp"); User user = (User)obj; System.out.println(user.getUserName()+"..."+user.getAge()); return modelAndView; } }
11.解决springmvc的post请求乱码问题
在web.xml中配置
<filter> <filter-name>CharacterEncodingFilter</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></filter><filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
12.自定义日期转换器
在UserAction.java中重写initBinder方法
@Override protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { binder.registerCustomEditor(Date.class, new CustomDateEditor( new SimpleDateFormat("yyyy-mm-dd"),true)); }
二.springmvc的注解方式
1.在web.xml中配置核心控制器
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping></web-app>
2.配置spring.xml
<import resource="com/daming/springmvc/app01/spring_app01.xml"/>
3.配置spring_app01.xml
<!-- 让springioc容器自动扫描带注解的文件类 --> <context:component-scan base-package="com.daming.springmvc.app01"></context:component-scan>
4.带注解的action类
@Controllerpublic class UserAction { @RequestMapping(value="/hello.do",method=RequestMethod.POST) //接收普通的参数 public String hello(Model model,String userName,int age){ model.addAttribute("message", "hello"); System.out.println(userName+":"+age); return "/jsp/success.jsp"; } @RequestMapping(value="/register.do") //接收封装参数的对象 public String register(Model model,User user){ model.addAttribute("message", "register"); System.out.println(user.getUserName() +":"+user.getAge()+":"+user.getHeridate()); return "/jsp/success.jsp"; } //接收数组 @RequestMapping("/bye.do") public String bye(Model model){ model.addAttribute("message", "bye"); return "/jsp/success.jsp"; } @RequestMapping("/deleteAll.do") public String deleteAll(Model model,int[] ids){ model.addAttribute("message", "deleteAll"); return "/jsp/success.jsp"; } //接收list封装的参数 @RequestMapping("/addAll.do") public String addAll(Model model,Bean bean){ for (int i = 0; i < bean.getEmpList().size(); i++) { System.out.println( bean.getEmpList().get(i).getUserName()+":" +bean.getEmpList().get(i).getAge()); } model.addAttribute("message", "addAll"); return "/jsp/success.jsp"; } }
5.结果的转发和重定向
@Controller@RequestMapping("/emp")public class EmpAction { @RequestMapping("/findById.do") public String findById(String id){ System.out.println("findByid id = "+id); //return "forward:/emp/updateById.do"; return "redirect:/emp/updateById.do"; } @RequestMapping("/updateById.do") public String updateById(String id,Model model){ System.out.println("updateById id = "+id); model.addAttribute("message",id); return "/jsp/success.jsp"; } }
6.以Json形式作为请求参数和返回值类型
@Controller@RequestMapping("/json")public class EmpAction { @RequestMapping("/bean2json.do") public @ResponseBody Emp bean2json(){ System.out.println("bean2json"); Emp emp = new Emp(); emp.setUserName("大明"); emp.setAge("20"); return emp; } @RequestMapping("/map2json.do") public @ResponseBody Map map2json(){ Map map = new HashMap<String, Object>(); List<Emp> list = new ArrayList<Emp>(); System.out.println("map2json"); Emp emp = new Emp(); emp.setUserName("大明"); emp.setAge("20"); list.add(emp); list.add(emp); map.put("empList",list); map.put("rows",list.size()); return map; } @RequestMapping("/list2json.do") public @ResponseBody List<Emp> list2json(){ System.out.println("list2json"); List<Emp> list = new ArrayList<Emp>(); Emp emp = new Emp(); emp.setUserName("大明"); emp.setAge("20"); list.add(emp); list.add(emp); return list; } @RequestMapping("/requestjson.do") public @ResponseBody String requestjson(@RequestBody Emp emp){ System.out.println(emp.getUserName()+":"+emp.getAge()); return "haha"; } }
0 0
- SpringMVC
- springmvc
- SpringMVC
- SpringMVC
- springMvc
- springMVC
- springmvc
- springMVC
- springMVC
- springmvc
- SpringMVC
- SpringMVC
- springMvc
- springmvc
- springmvc
- SpringMVC
- Springmvc
- springmvc
- 3.31
- 深度解析 Java 内存原型
- OpenStack REST API 的 SSL 配置
- 【C】求两个数的最大公约数
- 解决服务器和本地中文乱码的问题
- SpringMVC
- 动态规划——数塔问题
- Pascal's Triangle
- leetcode42. Trapping Rain Water
- 20位活跃在Github上的国内技术大牛
- 链表插入排序
- 【codevs】3269 混合背包
- JavaScript
- 七月机器学习之决策树随机森林和adaboost11