SSM框架(二)四种控制器请求
目录
承接上一篇文章:SSM框架(一) 基于eclipseJee搭建SpingMVC框架
本文主讲在:controller类下的四种控制请求
一、请求接收
大致是如图流程,图中也不是很明白,详细讲述一下:
- 搭建:参考前面一章 SSM框架(一) 基于eclipseJee搭建SpingMVC框架
- 主要目录:
二、接收请求参数
1.字符串格式
Controller类的方法中加入形参String userName ,String userPassword
(注意jsp和controller类命名一致)
-
index.jsp主要代码:
index.do
<form action="index.do" method="post"> <input type="text" name="userName"/><br/> <input type="text" name="userPassword"/><br/> <input type="submit" value="添加"/> </form>
-
Controller.java:
package com.cungudafa.spingmvc01.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/") public class UserInfoController { @RequestMapping(value="index") public String userIndex(String userName,String userPassword){ System.out.println("添加操作的业务逻辑:"+userName+" "+userPassword); return "success"; } }
-
浏览器查看到:
控制台打印:
2.对象封装
如果请求中userName=xxx,自定义类
-
index.jsp主要代码:
dologin.do
<form action="dologin.do" method="post"> <input type="text" name="userName"/><br/> <input type="text" name="userPassword"/><br/> <input type="submit" value="添加"/> </form>
-
创建bean目录和 UserInfo.java:
UserInfo.java:
(注意在jsp调用时,标签的name要与实体里的private后名称相同,同理controller调用时get方法名称方法名也要一致
)package com.cungudafa.spingmvc01.bean; public class UserInfo { private Integer userId; private String userName; private String userPassword; public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public UserInfo(String name, String password) { super(); this.userName = name; this.userPassword = password; } @Override public String toString() { return "User [用户=" + userName + ", 密码=" + userPassword + "]"; } }
-
调用实体前必须
更新一下配置
,这里再贴一遍更新后的pom.xml、web.xml和sping-mvc.xml
:
pom.xml 增加了文件上传部分:<!-- 文件上传 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency>
web.xml 增加了浏览器url解析
web.xml:<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1" metadata-complete="true"> <!-- 声明Spring的主配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/*.xml</param-value> </context-param> <!-- 配置Spring的监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 解析乱码 --> <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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置SpringMVC后台 .do --> <servlet> <servlet-name>back</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/spring-mvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>back</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
sping-mvc.xml: 相对之前增加了上传文件部分,解析包改为到最大目录
com.cungudafa.spingmvc01
sping-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"> <!-- 启用注解 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 配置SpringMVC --> <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="com.cungudafa.spingmvc01" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!-- 上传文件的处理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean> <!-- JSP视图 --> <!-- 定义跳转的文件的前后缀 ,视图模式配置--> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- controller中return时会自动加上前缀和后缀,变成一个完整的url --> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
-
Controller.java:
package com.cungudafa.spingmvc01.controller; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.cungudafa.spingmvc01.bean.UserInfo; @Controller @RequestMapping("/") public class UserInfoController { @RequestMapping(value="index") public String userIndex(String userName,String userPassword){//直接同命名 System.out.println("添加操作的业务逻辑:"+userName+" "+userPassword); return "success"; } @RequestMapping("login") public String login(){ return "login"; } @RequestMapping(value="dologin") public String login(UserInfo a,HttpSession session){//UserInfo a 封装对象,实例化;HttpSession session传值 System.out.println("用户:"+a.getUserName()+"\t密码:"+a.getUserPassword()); session.setAttribute("user", a);//从后台controller再传回前端页面,可调用user打印出来 return "success"; } }
-
封装对象结果–浏览器查看到:
控制台打印出:
三、将某些值/某些对象放在session中
具体代码参考第二部分
四、跳转到目标视图/下一个Servlet
- 在controller中加入关键代码:
package com.cungudafa.spingmvc01.controller; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; 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.ResponseBody; import com.cungudafa.spingmvc01.bean.UserInfo; /* * 一个控制器 * @author Administrator * */ @Controller @RequestMapping("/") public class UserInfoController { @RequestMapping(value="index") public String userIndex(String userName,String userPassword){ System.out.println("添加操作的业务逻辑:"+userName+" "+userPassword); return "success"; } @RequestMapping("login") public String login(){ return "login"; } @RequestMapping(value="dologin") public String login(UserInfo a,HttpSession session){ System.out.println("用户:"+a.getUserName()+"\t密码:"+a.getUserPassword()); session.setAttribute("user", a); return "success"; } @RequestMapping("index1") public void index1(HttpServletResponse response){ try { response.sendRedirect("/SpingMVC01/index.jsp"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @RequestMapping("index2") public void index2(HttpServletResponse response){ try { PrintWriter out = response.getWriter(); out.println("hello"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @RequestMapping("index301") public String index301(){ return "login"; } @RequestMapping("index302") public @ResponseBody String index302(){ return "login"; } @RequestMapping("student/{id}") public String find(@PathVariable("id") Integer id,HttpSession session){ System.out.println("id = " + id); session.setAttribute("id", id); return "index"; } }
情景1:response直接访问
- 浏览器输入:
http://localhost:8080/SpingMVC01/index2.do
查看:
情景2:控制跳转
- 浏览器分别输入:
http://localhost:8080/SpingMVC01/index301.do
、http://localhost:8080/SpingMVC01/index302.do
查看:
情景3:{id}记录
-
浏览器输入:
http://localhost:8080/SpingMVC01/student/1.do
查看:
控制台打印出: -
-> 在这里我们在success.jsp设置一个打印符:
success.jsp关键代码:<body> <h1>success</h1> ${id} </body>
-
-> 将return的index页面换为success页面:
controller关键代码:@RequestMapping("student/{id}") public String find(@PathVariable("id") Integer id,HttpSession session){ System.out.println("id = " + id); session.setAttribute("id", id); return "success"; }
-
运行结果:
浏览器输入:http://localhost:8080/SpingMVC01/student/1.do
查看:
控制台打印出: