Springmvc练习二

1、网站练习,先清楚原理,便于拓展

注意一点就是页面定位的问题,如果你springmvc文件没有配置加上后缀“.jsp”的设置记得在网站控制器源代码的基础上加上“.jsp”

 

2、简单尝试一下就知道,这里所谓的参数绑定无非就是在java代码的基础之上加上了页面定位和参数传递。主要逻辑还是用java解决。接下来我们写一个简单计算功能的实现。

这里要注意一下,采用注解模式:1、springmvc中这句代码别动:<context:component-scan base-package="controller" />。2、jsp页面别用中文名,否则定位会出问题

 

 

但是运行之后没有结果

虽然结果没出但是却成功跳转,所以基本可以确定是数值传递出了问题,检查后发现addObject方法需要传递两个参数,修改后解决:

 

 

 3、教材练习

教材练习也只不过是加了两个方法以及用到了javase中集合的基本知识,原理并不变。我们可以拿到需求后自己写一份代码。

主要思路:

1、写一个jsp页面:拿到输入的用户名传递给控制器处理,搜索出所有此用户名的信息后在此页面输出。

2、写一个user类:包含用户名、年龄、电话等信息。

3、写一个控制器:(1)使用集合模拟后台数据便于查询(2)创建搜索结果的集合,拿到用户名后在模拟数据库中查找符合条件的数据并存入该集合。(3)返回搜索结果。

User类

package Num;


public class User {
    private String name;
    private int age;
    private String idea;
    
    public User(String name ,int age ,String idea){
        this.age = age;
        this.name = name;
        this.idea = idea;
    }
    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;
    }

    public String getIdea() {
        return idea;
    }

    public void setIdea(String idea) {
        this.idea = idea;
    }
}

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>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
	<form action="query">
		用户名:<input type="text" name="name"/>
		<input type="submit" value="提交"/>
	</form>
	<hr>
	<h3>搜素结果</h3>
	<table>
		<Tr>
			<td>姓名</td><td>年龄</td><td>电话</td>
		</Tr>
		<c:forEach items="${listusers}" var="list">
			<tr>
				<td>${list.name}</td><td>${list.age}</td><td>${list.idea}</td>
			</tr>
		</c:forEach>
	</table>
</body>
</html>

 控制器:

package controller;
 
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 Num.User;

@Controller
public class Query {
 
    @RequestMapping("/query")
    public ModelAndView com(@RequestParam("name") String name) throws Exception {
        ModelAndView mav = new ModelAndView();
        
       //模拟一个数据库
        List<User> data = new ArrayList<User>();
        User u1 = new User("小鬼",1 ,"泰酷辣");
        User u2 = new User("蔡徐坤" ,2 ,"你干嘛");
        User u3 = new User("蔡徐坤" ,2 ,"姬霓太美");
        data.add(u1);
        data.add(u2);
        data.add(u3);
        //进行搜索并保存搜索结果
        User u4 = new User();
        u4.setName(name);
        List<User> ans = new ArrayList<User>();
        for (User i : data){
            if (i.getName().equals(name)){
                ans.add(i);
            }
        }
        //传递参数
        mav.addObject("listusers" ,ans);
        mav.setViewName("user.jsp");
        return mav;
    }
}

但是我运行后发现搜索结果为空,这个问题卡了很久真是吐了。解决方法涉及到网站后面的知识,在这里写一下希望能够帮助遇到同样问题的人。

 这时候就要考虑两种可能:

1、参数没有成功传递。2、传递的参数无法在搜索时使用。

我们只需要在控制器类里做一个简单测试即可:把拿到的字符串塞进一个user类中输出看看有没有东西。

 

发现是有东西的,只不过是乱码。好的,那么问题就可以锁定为字符串转码编译的问题了。解决方法与之前遇到的问题类似,使用过滤器。

我们在web.xml增加如下代码:

    <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>

 然后修改表单提交的方式为post:

 然后就ok了。

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值