一。导入配置文件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()); }}