Servlet的几种常见表单form处理及信息传递
1、a标记的信息传递
在index.html的body里写入一个a标记:
< a href=" hile">处理器< /a>
该href只有一个名称没有任何 / 之类的目录名称,说是在该工程目录下的文件,没有子目录。通过a标记传递参数通常为url后添加"?name=xx&age=xx"等。
html:
<a href="hile?name=奔跑的蜗牛&age=18">处理器</a>
servlet:
package com.sy.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class processServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("GBK");
String name = req.getParameter("name");
String age = req.getParameter("age");
System.out.println("name:"+name);
System.out.println("age:"+age);
resp.setCharacterEncoding("GBK"); //处理服务器端返回的中文乱码问题
resp.getWriter().write(name+' '+age);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
web.xml:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>process</servlet-name>
<servlet-class>com.sy.servlet.processServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>process</servlet-name>
<url-pattern>/hile</url-pattern>
</servlet-mapping>
2、form表单简单信息提交(默认为Get方式提交)
html:
<form method="post" action="hello">
name:<input name="xingming"/><br/>
password:<input name = "pwd"/><br/>
<input type="submit" value="提交">
</form>
servlet:
package com.sy.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class processServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req.resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String name = req.getParameter("xingming");
String pwd = req.getParameter("pwd");
//System.out.println("name:"+name);
//System.out.println("pwd:"+pwd);
//resp.setHeader("contentType", "text/html;charset=GBK");
resp.setCharacterEncoding("GBK");
resp.getWriter().write(name+' '+pwd);
}
}
web.xml:
<servlet>
<servlet-name>process2</servlet-name>
<servlet-class>com.sy.servlet.processServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>process2</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
3、form表单文件的上传读取,这个我不知道为什么不能做到上传的文件名和内容都用中文不乱码,这让我很头疼。(还未得到答案,希望有人指点迷津)
(1)form的简单input里输入的中文出现乱码,而上传的文件内容包含的中文却是正常的。(编码设置如下)
resp.setCharacterEncoding(“GBK”); resp.setContentType(“text/html;charset=GBK”);
提交后的结果:“奔跑的蜗牛3” 出现乱码
4、获取客户端所传递过来的header信息、contentlength信息,URL…等信息。这个就直接贴servlet代码了,主要是看客户端信息。
package com.sy.servlet;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class reqInfoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("GBK");
resp.setContentType("text/html;charset=UTF-8");
String url = req.getRequestURI();
Integer contentlength = req.getContentLength();
String method = req.getMethod();
resp.getWriter().write("url:"+url+"\n contentlength:"+contentlength+" \n method:"+method);
resp.getWriter().write("这是req的Head的信息:");
Enumeration<String> emt = req.getHeaderNames();
while (emt.hasMoreElements()){
String name = emt.nextElement();
resp.getWriter().write(name+"——> "+req.getHeader(name));
resp.getWriter().write("<br/>");
}
}
}
5、form单选、复选框的传值。
单选(性别:)还是req.getParameter(“gender”);
复选(课程:)变成req.getParameterValues(“course”)
html:
<form action="answer">
<input type="hidden" name="hidden" value="test"/>
性别:<input type="radio" name="gender" value="男"/>男
<input type="radio" name="gender" value="女"/>女<br/>
课程:<input type="checkbox" name="course" value="语文"/>语文
<input type="checkbox" name="course" value="数学"/>数学
<input type="checkbox" name="course" value="英语"/>英语
<input type="submit" value ="提交">
</form>
servlet:
package com.sy.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class OtherServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("GBK");
String hidden = req.getParameter("hidden");
System.out.println(hidden);
String gender = req.getParameter("gender");
resp.getWriter().write("性别:"+gender+"<br/>");
resp.getWriter().write("所选课程:"+"<br/>");
String[] courses = req.getParameterValues("course");
for(int i=0;i<courses.length;i++){
resp.getWriter().write(courses[i]+"<br/>");
}
}
}
xml:
<servlet>
<servlet-name>otherServlet</servlet-name>
<servlet-class>com.sy.servlet.OtherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>otherServlet</servlet-name>
<url-pattern>/answer</url-pattern>
</servlet-mapping>