一。导入配置文件pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xingxue.springmvc</groupId> <artifactId>springmvc-day1</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!-- spring 相关的依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.0.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.0.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.0.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.0.4.RELEASE</version> </dependency> <!-- spring web 模块提供了启动 spring 容器的 监听器 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.0.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.0.4.RELEASE</version> </dependency> <!--还导入其他相关的依赖--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.2.1</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <path>/</path> <port>80</port> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> <filtering>false</filtering> </resource> </resources> </build> </project>
二。配置resources》》applicationContext-mvc.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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" 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"> <context:component-scan base-package="com.xingxue"/> <!--要在容器中配置该标签,配置后 @RequestMapping 该注解才生效--> <mvc:annotation-driven/> <!--配置该标签后,web.xml 中配置的前端控制器拦截为/ ,可以处理静态资源了--> <mvc:default-servlet-handler/> <!--配置 内部资源视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsps/"/> //这是return 返回的路径 最后将他拼起来 <property name="suffix" value=".jsp"/> </bean> </beans>
三 WEB-INF\jsps下面的文件包 springmvcday1\src\main\webapp\WEB-INF\jsps
C:\Users\Administrator\Desktop\springmvcday1\src\main\webapp\WEB-INF\jsps\index\index.jsp <%-- Created by IntelliJ IDEA. User: Administrator Date: 2018/4/24 Time: 14:07 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>Title</title> </head> <body> <h1>欢迎${user.logname} 来到主页</h1> </body> </html> C:\Users\Administrator\Desktop\springmvcday1\src\main\webapp\WEB-INF\jsps\ok.jsp
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2018/4/24 Time: 9:42 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>ok!</h1> </body> </html>
三 配置 WEB-INF下面的web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<!--配置 springmvc 的前端 控制器
DispatcherServlet
-->
<!-- 引入spring 提供的 POST 提交方式的中文乱码过滤器 :注意一点 提供的 中文乱码过滤器只能处理 POST ;所以前面提交的方式改为post-->
<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>
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>//这个标签标示 在加载这个的时候就开始执行
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<!--如果这里配置的 / ,web应用无法处理静态资源 css html 要到前面controller里面去配置处理静态资源-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
四、登录页面demo.jsp 对应DemoController
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"//这个一定要配置,否则不能呢解析 %>
<html>
<head>
<title>demo</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/demo1?name=zhangsan&password=123">点我,访问controller</a>
<form action="${pageContext.request.contextPath}/demo3" method="post">
<input name="logname"/><br/>
<input name="password"/><<br/>
<input type="submit" value="点我,表单请求controller"/>
</form>
<a href="${pageContext.request.contextPath}/demo3?logname=zhangsan&password=123">点我,访问controller</a>
<%--springmvc 还提供了 url 方式来传递参数
参数作为了 url 的组成部分
--%>
<a href="${pageContext.request.contextPath}/demo4/122333/zhangsan">url组成部分作为参数传递</a>
<a href="${pageContext.request.contextPath}/demo5">转发重定向</a>
</body>
</html>
登录页面 login.jsp 对应DemoController2
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2018/4/24
Time: 14:08
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/login3" method="post"//提交方式 为post 否则不能处理乱码请求>
<input name="logname"/><br/>
<input name="password"/><<br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
五。如果提交的参数多的话,为了不显得繁琐,我们对他进行封装
package com.xingxue.springmvc.model; public class UserModel { private String logname; private String password; public String getLogname() { return logname; } public void setLogname(String logname) { this.logname = logname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "UserModel{" + "logname='" + logname + '\'' + ", password='" + password + '\'' + '}'; } }
六 controller页面提交过来对应的方法 controller.java
package com.xingxue.springmvc.web.controller; import com.xingxue.springmvc.model.UserModel; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @Controller public class DemoController { @RequestMapping(value = "demo1") //RequestMapping 注解中的 value 属性用于 映射 uri 地址,uri地址映射 demo1 方法 // method 属性用于 映射 请求方式,如果不配,默认支持 get post 都支持 // @RequestParam 注解 用于 提交的参数的名称跟 映射的方法的变量不一致的时候,使用 value 属性来映射请求参数,当然如果提交过来的 // 参数的名称跟 方法的 属性名称一致,可以不写 @RequestParam 注解 public String demo1(@RequestParam(value = "name") String name1,String password){ System.out.println(name1); System.out.println(password); System.out.println("demo1方法执行了...."); return "ok"; //返回的字符串也是 逻辑视图名称 } @RequestMapping(value = "demo2",method = RequestMethod.POST)//这里规定了请求方式 那么前端页面也要明确请求方式 public String demo2(){ System.out.println("demo2方法执行了..."); return "ok"; } @RequestMapping(value = "demo3") public String demo3(UserModel model){ System.out.println(model); return "ok"; } // /demo4/122333 @RequestMapping(value = "demo4/{id}/{name}")//这里的{id}/{name}是可以随便写的,就是代表前对页面的路径地址,要相对应 // PathVariable 注解用于取 url 组成部分作为参数 这个属性是一定要有的@PathVariable public String demo4(@PathVariable(value = "id") String id,@PathVariable("name") String name){ System.out.println(id); System.out.println(name); return "ok"; } @RequestMapping(value = "demo5") //redirect 重定向指令 // forward 转发指令 public String demo5(){ return "redirect:/main.jsp"; } }
七 取数据的方式 DemoController2.java
package com.xingxue.springmvc.web.controller; import com.xingxue.springmvc.model.UserModel; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Map; // 控制器方法 创建方式有三种:1.返回类型为 String(这种返回类型,他的底层会自动创建ModelAndView。所以他的return 不能再是ModelAndView ) 2. 返回类型为void 3. 返回类型 ModelAndView @Controller public class DemoController2 { @RequestMapping(value = "login",method = RequestMethod.POST) public String login(UserModel model, Map map, ModelMap modelMap, Model mm, ModelAndView modelAndView){ /*model对象保存到 web中级 学的 三个域对象之一中,页面采用 el 表达式就可以取出来*/ //request.setAttribute("user",model); 数据放入 请求域中 // request.getSession().setAttribute("user",model); 数据放入 session 域 // request.getServletContext().setAttribute("user",model); 数据放入 application域 map.put("user",model); //map 放入的数据自动放到请求域中 这里的user 是后面取El表达式相对应的值 // modelMap.addAttribute("user",model);//modelMap 放入的数据自动放到请求域中 // mm.addAttribute("user",model);//mm 放入的数据自动放到请求域中 //modelAndView.addObject("user",model); //modelAndView 放入的数据自动放到请求域中 return "index/index"; // 逻辑视图名称 当前面WEB-INF/JSPS 下面多了一层index文件,那么我们这里先约定好,不然后面拼串的时候找不到这个 } @RequestMapping(value = "login2",method = RequestMethod.POST) public ModelAndView login2(UserModel model,ModelAndView modelAndView){ //1.放数据 modelAndView.addObject("user",model); //2.放逻辑视图名称 modelAndView.setViewName("index/index"); return modelAndView; } @RequestMapping(value = "login3",method = RequestMethod.POST) public void login3(UserModel userModel, HttpServletResponse response) throws IOException { 如果输入中文出现乱码,设置setContentType
response.setCharacterEncoding ("UTF-8"); response.setContentType ("");response.getWriter().write("hello,sb!" + userModel.getLogname()); }}