一、springMVC中常用注解
1. @Controller注解:
2. @RequestMapping注解:
3. @Scope注解:
4. @AutoWired注解:实现依赖注入
5. @RequestParam注解:
二、springMVC获取参数信息
三、springMVC之重定向与转发
1. 传统servlet实现重定向与转发
2. springMVC实现重定向
3. springMVC实现转发
一、视图解析器:视图解析器对重定向无效,只对转发有效
二、中文乱码问题
建立一个过滤器解决乱码问题
三、springMVC带数据给jsp页面
第一种方式:通过reqeust域 |
第二种方式:通过Model带数据(默认存放到request域中) |
第三种方式:通过Map集合带数据 |
四、统一异常处理(*):
下面是项目的目录:
/** * Project Name:dt48_springMVC2 * File Name:LoginController.java * Package Name:cn.java.controller.admin * Date:下午5:40:22 * Copyright (c) 2017, bluemobi All Rights Reserved. * */ package cn.java.controller.admin; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * Description: <br/> * Date: 下午5:40:22 <br/> * * @author dingP * @version * @see */ @Controller public class LoginController { @RequestMapping(value = "test9") public void test9() { int i = 10 / 0; } }
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; /** * Description: 能够处理当前工程的所有controler错误<br/> * Date: 下午5:42:24 <br/> * * @author dingP * @version * @see */ @ControllerAdvice public class GlobalExceptionHandler { // 异常处理注解 @ExceptionHandler(Exception.class) public String exceptHand(Exception ex) { // ex.printStackTrace(); System.out.println("哈哈,恭喜您出错了"); return "front/error.jsp"; } // 异常处理注解 // @ExceptionHandler(ArithmeticException.class) // public void exceptHand2(Exception ex) { // System.out.println("哈哈,恭喜您出错了==============="); // // } }
package cn.java.controller.front; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import cn.java.entity.User; /** * Description: <br/> * Date: 下午2:16:57 <br/> * * @author dingP * @version * @see */ @Controller//被这个注释后就变成了一个servlet类 @Scope("prototype")//多例,这是修饰类的 public class HomeController { @RequestMapping(value = "test1") public void test1(User user) { System.out.println("test1..........."); System.out.println(user); } //@RequestParam是传递参数的. //@RequestParam用于将请求参数区数据映射到功能处理方法的参数上。defaultValue = "张三"表明当用户不给值的时候默认为张三,required = false表示不用必须给user穿一个值 @RequestMapping(value = "test2") public void test2(@RequestParam(name = "user", defaultValue = "张三", required = false) String username, @RequestParam(name = "pwd", required = true) String password, @RequestParam(name = "nianlin") Integer age) { System.out.println("username=" + username); System.out.println("password=" + password); System.out.println("age=" + age); } @RequestMapping(value = "submitYijian") public void submitYijian(@RequestParam(required = true) String content, @RequestParam(required = false) String phoneNum, @RequestParam(required = false) String email) { } /** * 传统的servlet的重定向与转发 * @param user * @param pwd * @param request * @param response * @throws Exception */ @RequestMapping(value = "test3") public void test3(String user, String pwd, HttpServletRequest request, HttpServletResponse response) throws Exception { if ("admin".equals(user) && "123".equals(pwd)) {// 登录成功 /**下面的这个方法是传统的servlet * request.getRequestDispatcher("/pages/front/success.jsp").forward(request,response); */ String basePath = request.getContextPath();/// dt48_springMVC2的 response.sendRedirect("basePath/pages/front/success.jsp"); } else {// 失败 request.getRequestDispatcher("/index.jsp").forward(request, response); } } /** * springmvc实现重定向,注意,在springmvc中,servlet类中,返回值是String的,不是重定向就是转发。 * @param user * @param pwd * @return */ @RequestMapping(value = "test4") public String test4(String user, String pwd) { if ("admin".equals(user) && "123".equals(pwd)) {// 登录成功 return "redirect:/pages/front/success.jsp";//加上这个redirect:表示重定向 } else {// 失败 // return "forward:/pages/front/fail.jsp"; return "/pages/front/fail.jsp";//默认为转发 } } /** * springmvc转发,注意,在springmvc中,servlet类中,返回值是String的,不是重定向就是转发。 * @return */ @RequestMapping(value = "test5") public String test5() { return "redirect:/pages/front/success.jsp";// --->/pages/front//pages/front/success.jsp.jsp } /** * 注意,在springmvc中,servlet类中,返回值是String的,不是重定向就是转发。 * @param user * @param pwd * @param request * @param model * @return */ @RequestMapping(value = "test6") public String test6(String user, String pwd, HttpServletRequest request, Model model) { System.out.println("user=" + user); System.out.println("pwd=" + pwd); // request.setAttribute("user", user); // model.addAttribute("username", user); if ("admin".equals(user) && "123".equals(pwd)) {// 登录成功 /** * 在springmvc中配置了视图解析器, * <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置前缀 --> <property name="prefix" value="/pages/"></property> <!-- 配置后缀 --> <property name="suffix" value=""></property> </bean> 所以在这里只需要写几个固定的位置就可以了 */ return "front/success.jsp"; } else {// 失败 return "front/fail.jsp"; } } /** * 注意,在springmvc中,servlet类中,返回值是String的,不是重定向就是转发。 * @param map * @return */ @RequestMapping(value = "test7") public String test7(Map<String, Object> map) { map.put("aaa", "王二麻子"); return "front/success.jsp"; } @RequestMapping(value = "test8") public void test8() { int i = 10 / 0; } }
package cn.java.filters; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; /** * Description: 能够解决当前工程下的所有乱码问题<br/> * Date: 下午4:27:06 <br/> * * @author dingP * @version * @see */ public class EncodingFilter implements Filter { @Override public void doFilter(ServletRequest reqeust, ServletResponse response, FilterChain chain) throws IOException, ServletException { reqeust.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); chain.doFilter(reqeust, response); } }
<?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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <!-- 配置包扫描 --> <context:component-scan base-package="cn.java.controller.*"></context:component-scan> <!-- 配置mvc特有的注解驱动 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 视图解析器 ,只对转发有效--> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置前缀 --> <property name="prefix" value="/pages/"></property> <!-- 配置后缀 --> <property name="suffix" value=""></property> </bean> </beans>error.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <% String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() +request.getContextPath()+"/"; %> <!DOCTYPE html> <html> <head> <base href="<%=basePath %>"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>错误处理页面</title> </head> <body> <img src="<%=basePath %>/resources/images/error.gif"> </body> </html>
fail.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <% String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() +request.getContextPath()+"/"; %> <!DOCTYPE html> <html> <head> <base href="<%=basePath %>"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>new jsp</title> </head> <body> <!-- 通过request域来保存数据 --> 通过request域来保存数据:${requestScope.user } <hr> <!-- 通过Model封装数据 --> 通过Model封装数据:${requestScope.username } </body> </html>
success.jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <% String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() +request.getContextPath()+"/"; %> <!DOCTYPE html> <html> <head> <base href="<%=basePath %>"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登录成功</title> </head> <body> <h1 style="color:red">登录成功</h1> <!-- 通过request域来保存数据 --> 通过request域来保存数据:${requestScope.user } <hr> <!-- 通过Model封装数据 ,注意的是保存在model中的数据默认保存在request域中--> 通过Model封装数据:${requestScope.username } <hr> 通过Map集合封装数据:${requestScope.aaa } </body> </html>
web.xml配置文件:
<?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" id="WebApp_ID" version="3.0"> <display-name>dt48_springMVC2</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 配置过滤器,放在最前面。 --> <filter> <filter-name>encodingFilter</filter-name> <!-- <filter-class>cn.java.filters.EncodingFilter</filter-class> --> <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>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--配置springMVC的核心控制器类:DispatcherServlet --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 与springmvc建立联系 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name>
index.xml:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <% String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() +request.getContextPath()+"/"; %> <!DOCTYPE html> <html> <head> <base href="<%=basePath %>"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>new jsp</title> </head> <body> <%-- <form action="<%=basePath %>/test1.htm" method="post"> <p>用户名:<input type="text" name="username"></p> <p>密 码<input type="password" name="password"></p> <p>年 龄:<input type="text" name="age"></p> <p><input type="submit" value="提交"></p> </form> --%> <form action="<%=basePath %>/test6.htm" method="post"> <p>用户名:<input type="text" name="user"></p> <p>密 码<input type="password" name="pwd"></p> <!-- <p>年 龄:<input type="text" name="nianlin"></p> --> <p><input type="submit" value="提交"></p> </form> </body> </html>