博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用参数和接收表单数据
阅读量:5045 次
发布时间:2019-06-12

本文共 6832 字,大约阅读时间需要 22 分钟。

获取请求参数:

  请求参数可分为两种:

    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("\r\n")			.append("\r\n")			.append("	\r\n")			.append(" 		Hello User Application\r\n")			.append("	\r\n")			.append("	\r\n")			.append(" 		Hello, ").append(user).append("!
\r\n") .append("
\r\n") .append(" Entry your name:
\r\n") .append("
\r\n") .append("
\r\n") .append("
\r\n") .append(" \r\n") .append("\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("\r\n")			.append("\r\n")			.append("	\r\n")			.append("		Hello User Application\r\n")			.append("	\r\n")			.append("	\r\n")			.append("		
\r\n") .append(" Selection the fruits you like to eat:
\r\n") .append("
Banana
\r\n") .append("
Orange
\r\n") .append("
Guava
\r\n") .append("
Kiwi
\r\n") .append("
\r\n") .append(" \r\n") .append("\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("\r\n") .append("\r\n") .append(" \r\n") .append("
Hello User Application\r\n") .append(" \r\n") .append(" \r\n") .append("

Your Selections

\r\n"); if(fruits == null) writer.append(" You did not select any fruits \r\n"); else{ writer.append("
    \r\n"); for(String fruit : fruits){ writer.append("
  • ").append(fruit).append("
  • \r\n"); } writer.append("
\r\n"); } writer.append(" \r\n") .append("\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中配置

settingOne
foo
settingTwo
bar

 

例子:使用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中配置,如下:

servletParameterServlet
cn.exampke.ServletParameterServlet
database
CustomerSupport
server
10.0.12.5
servletParameterServlet
/servletParameters

 

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

  1.使用注解:

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

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

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

  2.使用web.xml:

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

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

    缺点:比较繁琐

转载于:https://www.cnblogs.com/aristole/p/8001005.html

你可能感兴趣的文章
Spring Cloud微服务笔记(五)Feign
查看>>
C语言键盘按键列表
查看>>
Codeforces Round #374 (Div. 2)
查看>>
oracle数据类型
查看>>
socket
查看>>
Vue中使用key的作用
查看>>
二叉索引树 树状数组
查看>>
日志框架--(一)基础篇
查看>>
Java设计模式之原型模式
查看>>
Spring学习(四)-----Spring Bean引用同xml和不同xml bean的例子
查看>>
哲理故事与管理之道(20)-用危机激励下属
查看>>
关于源程序到可运行程序的过程
查看>>
wepy的使用
查看>>
数值函数ROUND(四舍五入),TRUNC(不四舍五入),MOD
查看>>
Android端百度地图API使用详解
查看>>
NavigationBar设置
查看>>
IO端口和IO内存的区别及分别使用的函数接口
查看>>
自定义的JavaScript定时器
查看>>
smarty对数组进行json_encode
查看>>
Django model 字段类型及选项解析(二)
查看>>