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

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>

这里写图片描述

使用jstl标签:

<%@ 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.*" %>
  <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  <body>
  <h1>list</h1>
  <table>
  <tr>
  <td>id</td>
  <td>username</td>
  <td>password</td>
  </tr>

<c:forEach items="${list}" var="user">
<tr>
<td>${user.username}</td>
<td>${user.password}</td>
</tr>

</c:forEach>
  </table>


  </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值