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