`

SpringMVC控制器

阅读更多
1. @RequestMapping请求映射

2. @RequestParam请求参数

3. ModelAndView返回模型和视图

4. SpringMVC对象属性自动封装

5. SpringMVCPOST请求乱码解决

6. Controller内部转发和重定向

新建项目SpringMvc02

StudentController.java

package com.andrew.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.andrew.model.Student;
@Controller
@RequestMapping("/student")
public class StudentController {
    private static List<Student> studentList = new ArrayList<Student>();
    static {
        studentList.add(new Student(1, "张三", 11));
        studentList.add(new Student(2, "李四", 12));
        studentList.add(new Student(3, "王五", 13));
    }
    @RequestMapping("/list")
    public ModelAndView list() {
        ModelAndView mav = new ModelAndView();
        mav.addObject("studentList", studentList);
        mav.setViewName("student/list");
        return mav;
    }
    @RequestMapping("/preSave")
    public ModelAndView preSave(@RequestParam(value = "id", required = false) String id) {
        ModelAndView mav = new ModelAndView();
        if (id != null) {
            mav.addObject("student", studentList.get(Integer.parseInt(id) - 1));
            mav.setViewName("student/update");
        } else {
            mav.setViewName("student/add");
        }
        return mav;
    }
    @RequestMapping("/save")
    public String save(Student student) {
        if (student.getId() != 0) {
            Student s = studentList.get(student.getId() - 1);
            s.setName(student.getName());
            s.setAge(student.getAge());
        } else {
            studentList.add(student);
        }
        return "forward:/student/list.do";
    }
    @RequestMapping("/delete")
    public String delete(@RequestParam("id") int id) {
        studentList.remove(id - 1);
        return "redirect:/student/list.do";
    }
}

Student.java

package com.andrew.model;
public class Student {
    private int id;
    private String name;
    private int age;
    public Student() {
        super();
    }
    public Student(int id, String name, int age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

spring-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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    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">
    <!-- 使用注解的包,包括子集 -->
    <context:component-scan base-package="com.andrew"/>
    <!-- 视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

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_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <display-name>SpringMvc02</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
    <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>*.do</url-pattern>
    </filter-mapping>
</web-app>

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<% response.sendRedirect("student/list.do"); %>

jsp\student\add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/student/save.do" method="post">
<table>
    <tr><th colspan="2">学生添加</th></tr>
    <tr><td>姓名</td><td><input type="text" name="name"/></td></tr>
    <tr><td>年龄</td><td><input type="text" name="age"/></td></tr>
    <tr><td colspan="2"><input type="submit" value="提交"/></td></tr>
</table>
</form>
</body>
</html>

jsp\student\list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/student/preSave.do">添加学生</a>
<table>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>操作</th>    
    </tr>
    <c:forEach var="student" items="${studentList }">
    <tr>
        <td>${student.id }</td>
        <td>${student.name }</td>
        <td>${student.age }</td>
        <td>
            <a href="${pageContext.request.contextPath}/student/preSave.do?id=${student.id}">修改</a>
            &nbsp;&nbsp;
            <a href="${pageContext.request.contextPath}/student/delete.do?id=${student.id}">删除</a>
        </td>
    </tr>
    </c:forEach>
</table>
</body>
</html>

jsp\student\update.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/student/save.do" method="post">
<table>
    <tr><th colspan="2">学生修改</th></tr>
    <tr>
        <td>姓名</td>
        <td><input type="text" name="name" value="${student.name }"/></td>
    </tr>
    <tr>
        <td>年龄</td>
        <td><input type="text" name="age" value="${student.age }"/></td>
    </tr>
    <tr>
        <td colspan="2">
            <input type="hidden" name="id" value="${student.id }"/>
            <input type="submit" value="提交"/>
        </td>
    </tr>
</table>
</form>
</body>
</html>


http://localhost:8080/SpringMvc02/
运行结果:
http://localhost:8080/SpringMvc02/student/list.do
添加学生 
编号 姓名 年龄 操作
1 张三 11 修改    删除  
2 李四 12 修改    删除  
3 王五 13 修改    删除
运行结果:
http://localhost:8080/SpringMvc02/student/preSave.do
abc 123 submit
http://localhost:8080/SpringMvc02/student/save.do
添加学生 
编号 姓名 年龄 操作
1 张三 11 修改    删除  
2 李四 12 修改    删除  
3 王五 13 修改    删除 
0 abc 123 修改    删除
运行结果:
http://localhost:8080/SpringMvc02/student/preSave.do?id=1
张三1 111
http://localhost:8080/SpringMvc02/student/save.do
添加学生 
编号 姓名 年龄 操作
1 张三1 111 修改    删除  
2 李四 12 修改    删除  
3 王五 13 修改    删除 
0 abc 123 修改    删除
运行结果:
http://localhost:8080/SpringMvc02/student/list.do
2 李四 12 修改    删除  
3 王五 13 修改    删除 
0 abc 123 修改    删除


7. SpringMvc对ServletAPI的支持

8. SpringMvc对Json的支持

导入json jar包

jackson-annotations-2.2.1.jar
jackson-core-2.2.1.jar
jackson-core-asl-1.8.8.jar
jackson-databind-2.2.1.jar
jackson-mapper-asl-1.8.8.jar
jackson-module-jaxb-annotations-2.2.1.jar

User.java

package com.andrew.model;
public class User {
    private int id;
    private String userName;
    private String password;
    public User() {
        super();
    }
    public User(String userName, String password) {
        super();
        this.userName = userName;
        this.password = password;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

UserController.java

package com.andrew.controller;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.andrew.model.User;
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/login")
    public String login(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("----登录验证---");
        String userName = request.getParameter("userName");
        String password = request.getParameter("password");
        Cookie cookie = new Cookie("user", userName + "-" + password);
        cookie.setMaxAge(1 * 60 * 60 * 24 * 7);
        User currentUser = new User(userName, password);
        response.addCookie(cookie);
        HttpSession session = request.getSession();
        session.setAttribute("currentUser", currentUser);
        return "redirect:/main.jsp";
    }
    @RequestMapping("/login2")
    public String login2(HttpServletRequest request) {
        return "redirect:/main.jsp";
    }
    @RequestMapping("/login3")
    public String login3(HttpSession session) {
        return "redirect:/main.jsp";
    }
    @RequestMapping("/ajax")
    public @ResponseBody User ajax() {
        User user = new User("zhangsan", "123");
        System.out.println(user);
        return user;
    }
}

login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<a href="user/ajax.do">测试ajax</a>
<form action="user/login.do" method="post">
    <table>
        <tr><td>用户名:</td><td><input type="text" name="userName"/></td></tr>
        <tr><td>密码:</td><td><input type="password" name="password"/></td></tr>
        <tr><td><input type="submit" value="登录"/></td></tr>
    </table>
</form>
</body>
</html>

main.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Main.jsp  ${currentUser.userName }
</body>
</html>

http://localhost:8080/SpringMvc02/index.jsp
abc 123 submit
运行结果:
http://localhost:8080/SpringMvc02/main.jsp
Main.jsp abc
后台显示:
----登录验证---

运行结果:
http://localhost:8080/SpringMvc02/user/ajax.do
com.andrew.model.User@5fe043cf


ResponseUtil.java

package com.andrew.util;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
public class ResponseUtil {
    public static void write(HttpServletResponse response, Object o) throws Exception {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println(o.toString());
        out.flush();
        out.close();
    }
}
分享到:
评论

相关推荐

    springmvc控制器映射

    spring mvc视频 之控制器映射

    SpringMvc学习笔记

    Spring MVC与Struts2等同属表现层框架,它们的主要任务是协调控制器、模型和视图,处理用户请求并展示结果。在Spring框架的体系中,Spring MVC提供了高度的可扩展性和灵活性。 2. **工作流程** - 用户发起请求...

    基于SpringMVC的网上书店系统(带脚本)

    2. **控制器**:SpringMVC的DispatcherServlet负责调度请求,将请求转发给相应的处理器(Controller)。Controller处理业务逻辑,如检索图书信息、处理用户登录、购物车操作等。 3. **模型**:模型对象代表了系统中...

    SpringMVC从无到有

    五、创建SpringMVC控制器 控制器通常是一个实现了Controller接口或者继承了AbstractController的类。在SpringMVC中,我们更常用的是使用注解@Controller,通过@RequestMapping注解定义请求映射。 六、视图解析 视图...

    springmvc+mybatis面试题

    【SpringMVC控制器的单例问题】 SpringMVC的控制器默认是单例模式,因此在多线程环境下可能存在线程安全问题。为避免这个问题,控制器不应包含可变状态,即避免在控制器中定义实例变量。如果必须存储数据,可以使用...

    SpringMVC面试专题.pdf

    - **单例模式**:SpringMVC 中的控制器默认是单例模式,这意味着同一控制器实例会被多个线程共享。 - **潜在问题**:当多个线程同时访问同一个控制器实例时,可能会出现线程安全问题。 - **解决方案**:为了避免线程...

    SpringMVC基础例子

    在这个例子中,jQuery可能用于发送Ajax请求到后端SpringMVC控制器,更新页面内容而无需刷新整个页面。例如,使用$.ajax()或$.post()方法发送异步请求,然后将服务器返回的数据动态插入到DOM中。 **MyBatis** ...

    Spring+Springmvc+mybaties购物车

    1. `src/main/java`:Java源代码,包括Spring配置、Springmvc控制器、MyBatis的Mapper接口和服务层实现。 2. `src/main/resources`:资源文件,如Spring的配置文件、MyBatis的Mapper XML文件、数据库连接配置等。 3....

    百度富文本编辑器和springMVC整合

    SpringMVC控制器中可以定义一个方法来接收这些数据。例如: ```java @RequestMapping(value = "/saveContent", method = RequestMethod.POST) public @ResponseBody String saveContent(@RequestParam("content") ...

    springMVC拦截器项目

    拦截器是 SpringMVC 中的一种回调机制,它们在请求被控制器处理之前或之后执行。通过实现 HandlerInterceptor 接口或继承 AbstractHandlerInterceptorAdapter 类,你可以自定义拦截逻辑。主要方法包括 `preHandle`...

    SpringMVC+MyBatis+EasyUI简单分页Demo

    通过jQuery调用AJAX,向SpringMVC控制器发送请求,获取分页数据。控制器将MyBatis查询的结果转化为JSON格式,返回给前端,datagrid会自动更新显示。 在项目"NewTestLogin"中,可能包含登录功能的实现,这是Web应用...

    springmvc实战应用

    首先,来看SpringMVC控制器的实现。SpringMVC支持多种控制器的实现方式。一种方式是通过实现接口来实现控制器。在web.xml中需要配置DispatcherServlet,它用于拦截请求并分发给相应的控制器。具体配置如下: ```xml...

    SpringMVC面试专题及答案.pdf

    ### SpringMVC 面试专题...- **返回类型**:SpringMVC 中控制器方法的返回值类型非常灵活,可以是字符串(视图名称)、`ModelAndView` 对象、`RedirectView` 对象等。这些返回类型可以根据不同的场景选择最合适的类型。

    springmvc+mybatis+easyUI(增删改查)Demo

    - **查询(Query)**:用户可以通过输入条件或者点击分页等操作发起查询请求,SpringMVC控制器结合MyBatis查询数据,并通过EasyUI展示结果。 5. **项目结构**: 项目的源代码通常包括以下几个部分:`src/main/...

    springMVC与flex整合项目

    - **创建SpringMVC控制器**:在SpringMVC项目中定义控制器,处理Flex客户端发送的请求,这些请求通常通过AMF进行序列化和反序列化。 - **服务接口与实现**:定义Flex客户端调用的业务服务接口,然后在SpringMVC中...

    SpringMVC&&GraphQL

    2. **配置GraphQL服务**:创建GraphQL的执行环境,包括schema定义、resolver实现,以及如何将GraphQL请求与SpringMVC控制器关联起来。 3. **编写schema**:定义GraphQL的类型和查询、突变操作,这是GraphQL的核心...

    springmvc写的超市订单管理系统

    表现层主要由SpringMVC控制器组成,负责接收和响应用户请求;业务逻辑层处理具体的业务规则,如订单创建、修改、查询等操作;数据访问层则通过MyBatis与MySQL交互,实现数据的增删改查。这样的分层设计,使得系统...

    springMVC 整合velocity

    4. **控制器处理**:在 SpringMVC 控制器中,返回一个视图名,该名字对应于 Velocity 模板文件。SpringMVC 会自动查找并渲染相应的模板。 ```java @Controller public class MyController { @RequestMapping("/...

Global site tag (gtag.js) - Google Analytics