Spring Web MVC注解应用以及一些常用方法技巧总结

12/26 编程语言 阅读 606 views 次 人气 0
摘要:

--------------------------------------------------------------------------------------------------------------------------------------

Spring Web MVC注解应用

a.RequestMappingHanlderMapping组件

@RequestMapping(“/login..do”)

该标签用在Controller业务方法前

--------------------------------------------------------------------------------------------------------------------------------------

b.Controller编写和配置

取消了实现Controller接口及方法的约定

可以允许我们按需要灵活定义业务方法

public ModelAndView或者String 方法名(根据需要定义 request,response,session){}

(Controller需要扫描到Spring容器,必须使用@Controller)

还是写例子 hello.jsp

处理流程是一样的

Spring配置文件:

<!-- 等价于handlermapping和handleradapter两个bean。其实还有其他的 -->

    <!-- 开启扫描controller -->
    <context:component-scan base-package="Controller"></context:component-scan>
    <!-- 配置viewResolver -->

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/"></property>
    <property name="suffix" value=".jsp"></property>

    </bean>

--------------------------------------------------------------------------------------------------------------------------------------

web.xml

<servlet>
  <servlet-name>springwebmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <!-- 指明配置文件 -->
  <init-param>
    <param-name>contextConfigLocation</param-name>  
    <param-value>classpath:applicationContext.xml</param-value>  
</init-param>
<!-- <load-on-startup>1</load-on-startup> -->
  </servlet>
  <servlet-mapping>
  <servlet-name>springwebmvc</servlet-name>
  <url-pattern>*.do</url-pattern>
  </servlet-mapping>

--------------------------------------------------------------------------------------------------------------------------------------

Controller:

package Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller//扫描到Spring容器
public class toLogonController {
    @RequestMapping("logon.do")
    public ModelAndView execute(){
        ModelAndView mav = new ModelAndView("hello");


        return mav;


    }
}

--------------------------------------------------------------------------------------------------------------------------------------

hello.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>Spring MVC example</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!-- <link rel="stylesheet" type="text/css" href="styles.css"> -->

  </head>

  <body>

<h1>Spring Web MVC 注解版</h1>

  </body>
</html>

--------------------------------------------------------------------------------------------------------------------------------------

这里写图片描述

--------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------

再写下登陆

//进入登陆页面

/tologin.do

DispatcherServlet

Handlermapping

LoginController

ViewResolver

login.jsp

login.do

DispatcherServlet

Handlermapping

LoginController

ViewResolver

正确jsp 错误jsp

主要是Controller

可以把多个控制写在一个里面不同的就是请求路径

package Controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller//扫描到Spring容器
public class toLogonController {
    @RequestMapping("tologin.do")
    public ModelAndView execute(){
        ModelAndView mav = new ModelAndView("login");


        return mav;


    }

    @RequestMapping("login.do") 
public String checkLogin(HttpServletRequest request){
         String username=request.getParameter("username");
         String password=request.getParameter("password");
         if(username.equals("root")&&password.equals("1234")){
             return "hello";
         }else

    return "login";
}

}

--------------------------------------------------------------------------------------------------------------------------------------

这里写图片描述

--------------------------------------------------------------------------------------------------------------------------------------

1.Controller如何接收请求参数

a.利用HttpServletRequest

b.利用业务方法参数

参数名与请求参数key保持一致

请求: login.do?username=xxx

Controller中:

public String f1(String username){}

--------------------------------------------------------------------------------------------------------------------------------------

或者利用@RequetParam(“key”)

public checkLogin1( @RequetParam(“key”) String username
){
}

--------------------------------------------------------------------------------------------------------------------------------------

然后这个username就有值了。

注意:这个@RequetParam(“key”)是在方法参数中写在参数前面的

c.利用实体对象参数

//使用实体对象user接收请求参数
public String checkLogin2(User user){
//利用 user来接收参数并获取。
}
然后创建一个entity包写入类 User
public class User implements Serializable(){
//最好写上接口 Serializable 方便以后序列化
private String username;
private String password;
加上set get方法
}

--------------------------------------------------------------------------------------------------------------------------------------

少量参数使用b;利用方法参数名保持一致。大量参数使用c;如果客户端表单数据没有格式检查,遇到非字符串使用a;

--------------------------------------------------------------------------------------------------------------------------------------

2.Controller如何向响应jsp传值

a.利用HttpServletRequest(setAttribute方法)

b.利用ModelAndView 返回一个ModelAndView对象利用

mav.getModel().put()方法 其实这个Model是个map

c.利用ModelMap方法参数

@RequestMapping(“login3.do”)
public String checkLogin3( String username String password  ModelMap model){
//传给jsp值
//增加一个参数 ModelMap
model.put(“username”,username);
//在jsp中用el表达式获取 ${username}
}

--------------------------------------------------------------------------------------------------------------------------------------

d.使用@ModelAttribute(“key”)

一个是get方法前面,一个方法参数前面

public String checkLogin4(@ModelAttribute(“user”)String username ){}

--------------------------------------------------------------------------------------------------------------------------------------

这么写就直接会帮你传过去。获取就是${user}

但只能把参数值传过去。

或者

@ModelAttribute(“user”)
public String getName(){
return “tom”
}
等价于
model.put(“user”,getName()); //${user}

--------------------------------------------------------------------------------------------------------------------------------------

主要用a和c

--------------------------------------------------------------------------------------------------------------------------------------

3.Controller如何使用session

public String checkLogin(HttpSession session){
session.setAttribute(key,value);

}

--------------------------------------------------------------------------------------------------------------------------------------

然后在jsp中获取session内容还是用el表达式

${sessionScope.username}

--------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------

案例:列表显示功能

/list.do

DispatcherServlet

HandlerMapping

ListController(List,传递到list.jsp)

ViewResolver

/WEB-INF/list.jsp

Controller:

package Controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import entity.User;

@Controller
public class ListController {
    @RequestMapping("list.do")
    public String listController(HttpServletRequest request){

        List<User> list =new ArrayList<User>();
        for(int i=0;i<5;i++){
            User user = new User();
            user.setUsername("admin"+i);
            user.setPassword("password"+i);

            list.add(user);

        }

        request.setAttribute("list", list);


        return "list";
    }

}

--------------------------------------------------------------------------------------------------------------------------------------

User:

package entity;

public class User {

    private String username;
    private String password;
    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;
    }

}

--------------------------------------------------------------------------------------------------------------------------------------

list.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>list</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!-- <link rel="stylesheet" type="text/css" href="styles.css"> -->

  </head>
  <%@page import="entity.*" %>
  <body>
  <h1>list</h1>
  <table>
  <tr>
  <td>id</td>
  <td>username</td>
  <td>password</td>
  </tr>
  <% List<User> list = ( List<User>)request.getAttribute("list"); int i=0; for(User user:list){ i++; String username=user.getUsername(); String password=user.getPassword(); %>
    <tr>
    <td><%=i %></td>
    <td><%=username %></td>
    <td><%=password %></td>
    </tr>

    <% } %>

  </table>


  </body>
</html>

--------------------------------------------------------------------------------------------------------------------------------------

这里写图片描述

小奋斗文章

--------------------------------------------------------------------------------------------------------------------------------------

评论

该文章不支持评论!

分享到: