7.1 Servlet响应
通过response对象对用户进行响应
• 创建输出流对象
• PrintWriter out = response.getWriter();
• 使用out对象响应用户
• out.println(“这是通过Servlet响应用户的信息”)
7.2 Servlet获取客户端参数
通过request对象获取请求信息
l String getParameter(String name)
l String[ ] getParamterValues(String name)
• 客户浏览器通过使用以下方法把请求参数传给servlet:
GET(数据量少,安全性要求不高,速度快)
• 以查询字符串的方式附在统一资源地址(URL)后面• 查询串可在客户浏览器上显示
• 默认表单请求方式
• POST(数据量大,安全性要求高)
• 通过单独的套接字连接发送包数据
• 完整的事务对客户是不可见的
• 与GET方法比较起来较慢
doXxx方法
HttpServlet类为每一种HTTP请求方式都定义了一个对应的doXxx方法,例如,与GET请求方式对应的是doGet方法,与POST请求方式对应的是doPost方法。
7.3 Servlet接受表单数据
程序要点:
1、servlet如何获得客户端参数
request.getParameter(参数名);
2、如何解决服务器返回页面中文乱码问题
response.setContentType("text/html;charset=GBK");
3、了解form表单设置action属性时路径问题,相对路径是相对于当前浏览器URL而言的路径。
/表示当前web服务器中web应用程序发布的根目录,对tomcat来说是webapps ,是绝对路径
./当前目录 ,是相对路径
…/表示上一级目录, 是相对路径
注意如果HTML文件放在其他文件夹中时,如何设计action中的路径,
方法一 相对路径: …/ 或者 绝对路径: /上下文根目录 建议使用后者
方法二 也可以考虑修改web.xml中servlet的访问URL,
在web.xml中设置/inputservlet 此/表示当前应用程序根目录。
以后的开发中我们尽量使用绝对路径访问,写绝对路径肯定没有问题,但写相对路径却能会有问题。在后面的学习中会进一步介绍。
4、了解form表单的两种提交方式,get和post方法的区别。
默认是get方式
(1) GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是unicode,即是说所有的非ASCII字符都要编码之后再传输。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。
因此,GET请求的数据会暴露在地址栏中,而POST请求则不会,相对而言GET方式的请求会更快。
(2) 传输数据的大小
在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求 时,传输数据会受到URL长度的限制。
对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制。GET方式传递数据量少,POST方式相对而言传递的数据量大。
(3) 安全性
POST的安全性比GET的高。这里的安全是指真正的安全。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露在URL上,因为登录页面有可能被浏览器缓存 以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击。
对于数据量少,安全要求不高的请求可以用GET,对于数据量大,安全性要求高的请求用POST方式。
5、了解如何在地址栏里面用get方式传递参数
参数格式设置: URL?参数名1=值&参数名2=值&…
6、让servlet 即能处理get方式请求,又能处理post方式请求
重写父类的doGet()方法,并在doPost()方法中调用doGet()方法
input .html表单页面:
<html> <head><title>Login</title></head> <body> <form action="InputServlet" method="post"> 请输入内容:<input type="text" name="info"> <input type="submit" value="提交"> </form> </body> </html>
InputServlet.java 获取参数的Servlet程序
package com.org; import java.io.* ; import javax.servlet.* ; import javax.servlet.http.* ; public class InputServlet extends HttpServlet{ public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ resp.setContentType("text/html;charset=UTF-8");//设置服务器给客户端响应的内容类型,指定编码方式解决返回给客户端中文乱码的问题 req.setCharacterEncoding("UTF-8");//解决Post请求的中文乱码问题 String info = req.getParameter("info") ;// 假设参数名称为info PrintWriter out = resp.getWriter() ; out.println("<html>") ; out.println("<head><title>表单输入</title></head>") ; out.println("<body>") ; out.println("<h1>欢迎你" + info + "</h1>") ; out.println("</body>") ; out.println("</html>") ; out.close() ; } public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ this.doGet(req,resp) ; } }
web2.0中的配置信息
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="https://java.sun.com/xml/ns/javaee" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> <servlet> <servlet-name>input</servlet-name> <servlet-class>com.org.InputServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>input</servlet-name> <url-pattern>/InputServlet</url-pattern> </servlet-mapping> </web-app>