zoukankan      html  css  js  c++  java
  • 使用参数和接收表单数据

    获取请求参数:

      请求参数可分为两种:

        1.查询参数,它直接显示在请求URL上,例如:http://localhost:8080/Hello-User/greeting?user=radiam,其中user就是请求参数

        2.请求正文,参数被包含在post请求中,这些参数可以通过web开发者工具进行查看

    例子:获取单值请求参数

    package cn.example;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    //使用注解部署servlet
    @WebServlet(
    		name = "helloServlet",
    		urlPatterns = {"/greeting", "/salutation", "/wazzup"},
    		loadOnStartup = 1
    )
    public class HelloServlet extends HttpServlet{
    	// 设置一个默认的用户名
    	private static final String DEFAULT_USER = "Guest";
    	
    	/*
    	 * 功能:
    	 * 检测请求中是否带有user参数,若没有,就使用常量值
    	 * 设置响应内容的类型和字符编码
    	 * 从响应中获得一个PrintWriter,并输出一个html文档
    	 */
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		// 获取请求参数中的user
    		String user = req.getParameter("user");
    		if(user == null)
    			user = HelloServlet.DEFAULT_USER;
    		
    		// 设置响应内容的类型是html文本
    		resp.setContentType("text/html");
    		// 设置响应内容的字符编码为utf-8
    		resp.setCharacterEncoding("utf-8");
    		
    		// 获得响应的字符输出流
    		PrintWriter writer = resp.getWriter();
    		// 向字符输出流中输入html文本
    		writer.append("<!DOCTYPE html>\r\n")
    			.append("<html>\r\n")
    			.append("	<head>\r\n")
    			.append(" 		<title>Hello User Application</title>\r\n")
    			.append("	</head>\r\n")
    			.append("	<body>\r\n")
    			.append(" 		Hello, ").append(user).append("!<br/>\r\n")
    			.append("		<form action=\"greeting\" method=\"post\" >\r\n")
    			.append("			Entry your name: <br/>\r\n")
    			.append("			<input type=\"text\" name=\"user\" />\r\n")
    			.append("			<input type=\"submit\" value=\"Submit\" />\r\n")
    			.append("		</form>\r\n")
    			.append("	</body>\r\n")
    			.append("</html>\r\n");
    	}
    	
    	/*
    	 * 处理以post方法提交的表单
    	 */
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		// 简单地把任务委托给doGet()方法
    		this.doGet(req, resp);
    	}
    }
    

    例子:获取多值请求参数

    package cn.example;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /*
     * 接收多值参数
     */
    
    @WebServlet(
    		name = "multivalueParameterServlet",
    		urlPatterns = {"/checkbox"}
    )
    public class MultiValueParameterServlet extends HttpServlet{
    	/*
    	 * 创建一个html页面,询问用户喜欢哪些水果
    	 */
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		//设置响应内容的类型和字符编码
    		resp.setContentType("text/html");
    		resp.setCharacterEncoding("utf-8");
    		
    		// 获得响应的PrintWriter对象
    		PrintWriter writer = resp.getWriter();
    		// 往输出流输入html文本
    		writer.append("<!DOCTYPE html>\r\n")
    			.append("<html>\r\n")
    			.append("	<head>\r\n")
    			.append("		<title>Hello User Application</title>\r\n")
    			.append("	</head>\r\n")
    			.append("	<body>\r\n")
    			.append("		<form action=\"checkbox\" method=\"post\" />\r\n")
    			.append("		Selection the fruits you like to eat:<br/>\r\n")
    			.append("		<input type=\"checkbox\" name=\"fruit\" value=\"Banana\" /> Banana <br/>\r\n")
    			.append("		<input type=\"checkbox\" name=\"fruit\" value=\"Orange\" /> Orange <br/> \r\n")
    			.append("		<input type=\"checkbox\" name=\"fruit\" value=\"Guava\" /> Guava <br/> \r\n")
    			.append("		<input type=\"checkbox\" name=\"fruit\" value=\"Kiwi\" /> Kiwi <br/> \r\n")
    			.append("		<input type=\"submit\" value=\"submit\" />\r\n")
    			.append("	</body>\r\n")
    			.append("</html>\r\n");
    	}
    	
    	/*
    	 * 处理用户提交的表单
    	 */
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		// 从请求正文中获得复选框中的选择
    		String[] fruits = req.getParameterValues("fruit");
    		//设置响应内容的类型和字符编码
    		resp.setContentType("text/html");
    		resp.setCharacterEncoding("utf-8");
    		
    		// 获得响应的PrintWriter对象
    		PrintWriter writer = resp.getWriter();
    		writer.append("<!DOCTYPE html>\r\n")
    		.append("<html>\r\n")
    		.append("	<head>\r\n")
    		.append("		<title>Hello User Application</title>\r\n")
    		.append("	</head>\r\n")
    		.append("	<body>\r\n")
    		.append("		<h2>Your Selections</h2> \r\n");
    		
    		if(fruits == null)
    			writer.append("		You did not select any fruits \r\n");
    		else{
    			writer.append("		<ul> \r\n");
    			for(String fruit : fruits){
    				writer.append("		<li>").append(fruit).append("</li> \r\n");
    			}
    			writer.append("		</ul>\r\n");
    		}
    		
    		writer.append("		</body>\r\n")
    			.append("</html>\r\n");
    	}
    }
    

    使用初始化参数配置应用程序:

      有两种方式:

        1.使用上下文初始化参数,结果是:在servlet的任何地方都可以轻松获得这些初始化参数,它们不是某个servlet特有的,应用程序中的所有servlet都共享这些参数,可通过ServletContext对象调用getInitParameter(name)获得

        2.使用servlet初始化参数,结果是:这些参数是某个servlet特有的,可以从ServletConfig对象调用 getInitParameter(name) 获得,无需经过ServletContext对象

    例子:获取上下文初始化参数:

    /*
     * 获取上下文初始化参数
     */
    @WebServlet(
            name = "contextParameterServlet",
            urlPatterns = {"/contextParameter"}
    )
    public class ContextParameterServlet extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 获取ServletContext对象
            ServletContext context = this.getServletContext();
            
            resp.setContentType("text/html");
            resp.setCharacterEncoding("utf-8");
            PrintWriter writer = resp.getWriter();
            
            writer.append("settingOne: ").append(context.getInitParameter("settingOne"))
                .append(", settingTwo: ").append(context.getInitParameter("settingTwo"));
            
        }
    }

    在web.xml中配置

            <!-- 
     		使用上下文初始化参数,在这里的两个参数在Servlet代码的任何地方都可以轻松地访问和使用
     	 -->
     	 <context-param>
     	 	<param-name>settingOne</param-name>
     	 	<param-value>foo</param-value>
     	 </context-param>
     	 <context-param>
     	 	<param-name>settingTwo</param-name>
     	 	<param-value>bar</param-value>
     	 </context-param>    
    

    例子:使用Servlet初始化参数

    /*
     * 获取Servlet初始化参数,该参数是某个serlvet特有的,可以从ServletConfig对象中获取
     */
    @WebServlet(
            name = "servletParameterServlet",
            urlPatterns = {"/servletParameters"},
            initParams = {
                    @WebInitParam(name = "database", value = "CustomerSupport"),
                    @WebInitParam(name = "server", value = "10.0.12.5")
            }
    )
    public class ServletParameterServlet extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 获取ServletConfig对象
            ServletConfig config = this.getServletConfig();
            
            resp.setContentType("text/html");
            resp.setCharacterEncoding("utf-8");
            PrintWriter writer = resp.getWriter();
            
            writer.append("database: ").append(config.getInitParameter("database"))
                .append(", server: ").append(config.getInitParameter("server"));
        }
    }

    其中注解部分也可以在web.xml中配置,如下:

           <servlet>
              <servlet-name>servletParameterServlet</servlet-name>
              <servlet-class>cn.exampke.ServletParameterServlet</servlet-class>
              <init-param>
                  <param-name>database</param-name>
                  <param-value>CustomerSupport</param-value>
              </init-param>
              <init-param>
                  <param-name>server</param-name>
                  <param-value>10.0.12.5</param-value>
              </init-param>
          </servlet>
          <servlet-mapping>
              <servlet-name>servletParameterServlet</servlet-name>
              <url-pattern>/servletParameters</url-pattern>
          </servlet-mapping>    

    使用注解和部署文件配置servlet的比较:

      1.使用注解:

        优点:避免xml配置,非常直接和简洁;

        缺点:当它修改时,需要重新编译应用程序;

           有些事情它不能办到,比如:创建单个servlet的多个实例,安排过滤器的执行顺序

      2.使用web.xml:

        优点:当它修改时,只需重启应用就可以使配置文件生效,不需要重新编译应用程序

           它可以做一些注解无法完成的事情

        缺点:比较繁琐

  • 相关阅读:
    DML、DDL、DCL的区别
    exe文件图标不见了,教你win10桌面EXE文件图标不见了如何解决
    js获取近十二个月
    关于tomcat中的三个端口的作用及其相关细节
    js判断对象是否为空对象的几种方法
    解决myeclipse validation验证javascript导致速度变慢的现象
    jQuery基础教程之is()方法和has() 方法
    2015年6月发布了ECMAScript6版本
    http系列--从输入 URL 到页面加载完成的过程
    一篇文看懂Hadoop
  • 原文地址:https://www.cnblogs.com/aristole/p/8001005.html
Copyright © 2011-2022 走看看