当表单数据多的时候避免太多的request.getParament()方式获取数据;
public class Per {
private String method; //<form action="PeoServlet?method=getPeo">,我在这里做了处理
private String name;
private int age;
private String gender;
public Per() {
super();
}
public Per( String method,String name, int age, String gender) {
super();
this.method = method;
this.name = name;
this.age = age;
this.gender = gender;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
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 getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Per [name=" + name + ", age=" + age
+ ", gender=" + gender + "]";
}
}
关键方法: BeanUtils.populate(p, req.getParameterMap());
本例:获取前端表单数据,封装到javabean。(练习中写了一些反射的东西,可忽略)
需要jar包:commons-logging-1.2.jar commons-logging-1.2.jar
jsp部分:
<form action="PeoServlet?method=getPeo" method="post">
姓名:<input type="text" name="name" /><br/>
年龄:<input type="text" name="age" /><br/>
性别:<input type="text" name="gender" /><br/>
<input type="submit" value="提交" /><br/>
</form>
姓名:<input type="text" name="name" /><br/>
年龄:<input type="text" name="age" /><br/>
性别:<input type="text" name="gender" /><br/>
<input type="submit" value="提交" /><br/>
</form>
servlet部分:jsp传来数据,由servlet中的getPeo方法获取并封装到javabean(只要关注beanUtils的方法即可)
----------------------------------------------------------------------------------------------------------------------------------------------
@WebServlet("/PeoServlet")
public class PeoServlet extends ServletBase{
private static final long serialVersionUID = 1L;
public void getPeo(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Per p = new Per(); //javabean
try {
//表单数据封装;[method=getPeo, name=a, age=1, gender=q]
//req.getParameterMap()将method=getPeo也获取了,注意数据的处理
public class PeoServlet extends ServletBase{
private static final long serialVersionUID = 1L;
public void getPeo(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Per p = new Per(); //javabean
try {
//表单数据封装;[method=getPeo, name=a, age=1, gender=q]
//req.getParameterMap()将method=getPeo也获取了,注意数据的处理
BeanUtils.populate(p, req.getParameterMap());
} catch (Exception e) {
throw new RuntimeException("数据封装出错"+e);
}
System.out.println("ok:"+p);//打印javabean
}
}
} catch (Exception e) {
throw new RuntimeException("数据封装出错"+e);
}
System.out.println("ok:"+p);//打印javabean
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------
@WebServlet("/ServletBase")
public class ServletBase extends HttpServlet {
@Override
public void service(ServletRequest req, ServletResponse resp)
throws ServletException, IOException {
//处理乱码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String methonName = req.getParameter("method");
if (methonName == null || methonName.trim().isEmpty()) {
throw new RuntimeException("未传入参数");
}
Class c = this.getClass();
Method method = null;
try {
method = c.getMethod(methonName, HttpServletRequest.class,
HttpServletResponse.class);
} catch (Exception e) {
throw new RuntimeException("您调用的方法:" + methonName + ",它不存在");
}
// 调用method表示的方法
try {
method.invoke(this, req, resp);
} catch (Exception e) {
throw new RuntimeException("您调用的方法:" + methonName + ",内部抛出异常."
+ e.getMessage());
}
}
}
public class ServletBase extends HttpServlet {
@Override
public void service(ServletRequest req, ServletResponse resp)
throws ServletException, IOException {
//处理乱码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String methonName = req.getParameter("method");
if (methonName == null || methonName.trim().isEmpty()) {
throw new RuntimeException("未传入参数");
}
Class c = this.getClass();
Method method = null;
try {
method = c.getMethod(methonName, HttpServletRequest.class,
HttpServletResponse.class);
} catch (Exception e) {
throw new RuntimeException("您调用的方法:" + methonName + ",它不存在");
}
// 调用method表示的方法
try {
method.invoke(this, req, resp);
} catch (Exception e) {
throw new RuntimeException("您调用的方法:" + methonName + ",内部抛出异常."
+ e.getMessage());
}
}
}
----------------------------------------------------------------------------------------------------------------------
javabean实体类:
private String method; //<form action="PeoServlet?method=getPeo">,我在这里做了处理
private String name;
private int age;
private String gender;
public Per() {
super();
}
public Per( String method,String name, int age, String gender) {
super();
this.method = method;
this.name = name;
this.age = age;
this.gender = gender;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
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 getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Per [name=" + name + ", age=" + age
+ ", gender=" + gender + "]";
}
}