首页 > 技术文章 > Servlet 快速开始 表单中文字段

chenhui7373 2018-03-19 23:06 原文

 

req.getParameter | getParameterValue 一大特点是 返回null表示没有。

 

【web.xml】

<servlet>

<serlvlet-mapping>

应用程序级别共享初始化参数(servletContext.getInitParameter):<context-param>   配置数据库连接信息、电子邮件报警信息等等。

Servlet级别私有初始化参数(servletConfig.getInitParameter):<init-param>

 

 【HelloServlet】

逻辑:req.getParameter可以拿到浏览器  =》请求参数,writer可以写回 =》 html页面  

 1 public class HelloServlet extends HttpServlet{
 2     private static final String DEFAULT_USER = "GUEST";
 3     @Override
 4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 5         String user = req.getParameter("user");//获取请求参数
 6         if (user==null){
 7             user = DEFAULT_USER;
 8         }
 9         resp.setContentType("text/html");//设置内容类型
10         resp.setCharacterEncoding("UTF-8");//设置编码 meta
11 
12         PrintWriter writer = resp.getWriter();
13         writer.append("<!DOCTYPE html>\r\n")
14                 .append("<html>\r\n")
15                 .append("<head>\r\n")
16                 .append("<title>Hello User App</title>\r\n")
17                 .append("</head>\r\n")
18                 .append("<body>\r\n")
19                 .append("Hello,").append(user).append("!<br/><br/>\r\n")
20                 .append("<form action=\"greeting\" method=\"POST\">\r\n")
21                 .append("Enter your name:<br/>\r\n")
22                 .append("<input type=\"text\" name=\"user\" />\r\n")
23                 .append("<input type=\"submit\" value=\"提交\" />\r\n")
24                 .append("</form>\r\n")
25                 .append("</body>\r\n")
26                 .append("</html>\r\n");
27     }
28 
29     @Override
30     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
31         doGet(req,resp);
32     }
33 
34     //    @Override
35 //    public void init() throws ServletException {
36 //        System.out.println(this.getServletName()+"init方法");
37 //    }
38 //
39 //    @Override
40 //    public void destroy() {
41 //        System.out.println(this.getServletName()+"destory方法");
42 //    }
43 }

【多值Servlet】

逻辑:doGet展示一个表单,doPost处理提交的表单。

 1 @WebServlet(name="multiValueServlet",urlPatterns = {"/selectFruits"})
 2 
 3 public class MultiValueServlet extends HttpServlet{
 4     @Override
 5     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 6         resp.setContentType("text/html");
 7         resp.setCharacterEncoding("UTF-8");
 8         //展示一个表单
 9         PrintWriter writer = resp.getWriter();
10         writer.append("<!DOCTYPE html>\r\n")
11                 .append("<html>\r\n")
12                 .append("<head>\r\n")
13                 .append("<title>挑水果</title>\r\n")
14                 .append("</head>\r\n")
15                 .append("<body>\r\n")
16                 .append("<h2>欢迎光临,本店!</h2><br/><br/>\r\n")
17                 .append("<form action=\"\" method=\"POST\">\r\n")
18                 .append("<label for=\"apple\">苹果</label>\r\n")
19                 .append("<input type=\"checkbox\" id=\"apple\" name=\"fruits\" value=\"newapple\" />\r\n")
20                 .append("<label for=\"pineapple\">梨</label>\r\n")
21                 .append("<input type=\"checkbox\" id=\"pineapple\" name=\"fruits\" value=\"newpineapple\" />\r\n")
22                 .append("<label for=\"banana\">香蕉</label>\r\n")
23                 .append("<input type=\"checkbox\" id=\"banana\" name=\"fruits\" value=\"newbannana\" />\r\n")
24                 .append("<input type=\"submit\" value=\"提交\" />\r\n")
25                 .append("</form>\r\n")
26                 .append("</body>\r\n")
27                 .append("</html>\r\n");
28 
29     }
30 
31     @Override
32     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
33         String[] fruits = req.getParameterValues("fruits");
34         resp.setContentType("text/html");
35         resp.setCharacterEncoding("UTF-8");
36         PrintWriter writer = resp.getWriter();
37         if (fruits==null){
38             writer.println("欢迎下次光临");
39          //   return;
40         }else {
41             writer.append("<!DOCTYPE html>\r\n")
42                     .append("<html>\r\n")
43                     .append("<head>\r\n")
44                     .append("<meta charset=\"UTF-8\">\r\n")
45                     .append("<title>欢迎随意挑选</title>\r\n")
46                     .append("</head>\r\n")
47                     .append("<body>\r\n");
48 
49             for (String fruit:fruits){
50                 writer.append(fruit);
51                 System.out.println(fruit);
52             }
53             writer.append("</body>\r\n")
54             .append("</html>\r\n");
55         }
56 
57     }
58 }

 

【表单提交中文细节】

浏览器编码是ISO8859-1,可以用过滤器解决,暂时可以request直接设置编码UTF-8。

 

推荐阅读