我是靠谱客的博主 冷艳期待,最近开发中收集的这篇文章主要介绍Servlet如何运行,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Servlet运行的步骤

Servlet作为Web服务器的补充功能在运行时需要受到Servlet容器的管理,其运行的流程如下:

1.浏览器依据IP建立与容器的连接
2.浏览器将请求数据打包
3.容器解析请求数据包,封装request和response对象
4.容器依据请求资源路径找到Servlet创建对象
5.容器将request和response对象作为参数传入service方法,并调用
6.容器将响应数据打包发给浏览器
7.浏览器取出结果,生成页面

Servlet如何输出中文

为什么返回的页面会有乱码

Java语言在内存当中保存的每一个字符使用的都是Unicode字符集。一个中文字在内存中使用2个字节来表示。

编码:将Unicode字符集对应的字节数组转换成某种本地字符集(比如UTF-8,GBK)对应的字节数组的过程叫做编码

解码:将某种本地字符集对应的字节数组转换成Unicode字符集对应的字节数组的过程

如果想输出就涉及到编码问题。编码和解码使用的字符集不一致就产生了乱码问题

out.println(“”)这行代码是编码过程。现在这个out要输出的内容使用的是Unicode字符集,于是转换为默认的iso-8859-1。之所以使用这个格式是因为tomcat默认是英文的。所以调用out.println时,容器采用默认情况下的ISO-8859-1字符集去编码带有中文的输出内容时就产生了乱码

 如何解决输出内容的乱码问题

  1. response.setContentType(“text/html;charset=UTF-8);

其中charset可以使用其他支持中文的字符集,如GBK。setContentType()有两个作用:
1.通知容器,在调用out.println方法输出时,使用指定的字符集
2.生成一个消息头(content-type),通知浏览器,服务器返回的数据类型和字符集

  1. public class HelloServlet extends HttpServlet{
  2.     public void service(HttpServletRequest request,
  3. HttpServletResponse response)throws ServletException,
  4. IOException{    
  5.         response.setContentType("text/html;charset=utf-8");
  6.         //获得输出流
  7.         PrintWriter out = response.getWriter();        
  8.         out.println(“哈哈哈”);
  9.         //关闭流
  10.         out.close();
  11.     }
  12. }

Servlet如何处理表单

如何获得请求参数值

对于表单提交的数据,Servlet可以从容器构建的request对象中获取,如下两个方法可以在不同情况下获取表单数据:
String getParameter(String paramName)
String[] getParameterValues(String paramName)

getParameter方法

主要用于获取表单中控件的数据。其中 参数名一定要与客户端表单中的控件name属性相一致 。所以在构建表单各元素时,name属性一定要有。而name属性和id属性的区别就在于, id属性一般是作为客户端区分控件的标识 name属性是服务器端区分各控件的标识 。如果参数名写错,则该方法会返回null。

  1. <html>
  2.     <head>        
  3.     </head>
  4.     <body>
  5.         <form action="hello" method="post">
  6.             用户名:<input name="username"/><br/>
  7.             <input type="submit" value="提交"/>
  8.         </form>
  9.     </body>
  10. </html>
使用该方法获取表单数据的完整代码如下:

  1. public class HelloServlet extends HttpServlet{
  2.     public void service(HttpServletRequest
  3.             request,HttpServletResponse response)
  4.     throws ServletException,IOException{
  5.         /*
  6.          * request.getParameter方法:
  7.          *     1.作用:依据请求参数名获取请求参数值。
  8.          */
  9.         String username = request.getParameter("username");
  10.         //处理请求
  11.         String msg = "<div style='font-size:80px'>" +
  12.                 "你好 " + username + "</div>";
  13.         response.setContentType("text/html;charset=utf-8");
  14.         //获得输出流
  15.         PrintWriter out = response.getWriter();        
  16.         out.println(msg);        
  17.         //关闭流
  18.         out.close();
  19.     }
  20. }

getParameterValues方法

用于 获取表单中一组参数名相同的控件提交的数据组 ,如复选框,所以 该方法返回的是字符串数组 。如果用户没有选择这一组同名控件的任何一个,则该方法返回null。
用于提供用户输入用户名和爱好选项的HTML页面完整代码如下:

  1. <html>
  2.     <head>
  3.     </head>
  4.     <body>
  5.         <form action="hello" method="post">
  6.             用户名:<input name="username"/><br/>
  7.             爱好:
  8. 吃饭<input type="checkbox" name="hobby" value="eating" checked="checked"/>
  9.             睡觉<input type="checkbox" name="hobby" value="sleeping"/>
  10.             打豆豆<input type="checkbox" name="hobby" value="fighting"/>
  11. <br/>
  12.             <input type="submit" value="提交"/>
  13.         </form>
  14.     </body>
  15. </html>
使用该方法获取复选框值的完整代码如下:

  1. public class HelloServlet extends HttpServlet{
  2.     public void service(HttpServletRequest
  3.             request,HttpServletResponse response)     throws ServletException,IOException{
  4.         String username =     request.getParameter("username");
  5.         String[] hobby= request.getParameterValues("hobby");
  6.         //处理请求
  7.         String msg = "<div style='font-size:80px'>" +
  8.                 "你好 " + username + "</div>";
  9.         response.setContentType("text/html;charset=utf-8");        
  10.         PrintWriter out = response.getWriter();
  11.         out.println(msg);
  12.     for(int i=0;i<hobby.length;i++){
  13.             out.println("<h1>" + hobby[i] +"</h1>");
  14.         }
  15.         //关闭流
  16.         out.close();
  17.     }
  18. }

为什么表单提交中文会出现乱码

当表单提交时,浏览器会对表单中的中文参数值进行编码,而 使用的编码是打开页面时所使用的字符集 ,如 当前页面使用的UTF-8的字符集进行显示的,那么表单提交的数据就会以UTF-8的方式进行编码后传输 ,而 Web服务器在默认情况下对提交的表单数据会使用ISO-8859-1的字符集来解码 编码与解码的方式不一致就产生了表单提交时的中文乱码问题

如何解决表单提交时的中文乱码问题

步骤一、确保表单所在的页面按照指定的字符集打开

在HTML页面中使用meta标记可以确保浏览器按照指定的字符集进行解码页面,并限定表单提交时的数据编码方式

  1. <meta http-equiv="content-type" content="text/html;charset=utf-8">
在服务器端需要在调用getParameter方法读取参数之前,告诉浏览器如何解码,使用如下代码即可完成该设置:

  1. request.setCharacterEncoding("utf-8");

 解决GET方式提交时的中文乱码问题

步骤一、确保 表单所在的页面按照指定的字符集打开
在HTML页面中 使用meta标记可以确保浏览器按照指定的字符集进行解码页面,并限定表单提交时的数据编码方式

  1. <meta http-equiv="content-type" content="text/html;charset=utf-8">
完成ISO-8859-1到UTF-8格式的转换

  1. String username = request.getParameter(“username”);
  2. username = new String(username.getBytes(“iso-8859-1),“UTF-8);
由于GET方式提交的任何数据在服务器端一定会以ISO-8859-1的方式进行解码,所以 服务器端可以先按ISO-8859-1的方式获取字节数组,在将该数组转变成UTF-8对应的字符串形式
解决表单提交时的中文乱码问题的完整代码如下:

  1. public class HelloServlet extends HttpServlet{
  2.     public void service(HttpServletRequest     request,
  3. HttpServletResponse response)throws
  4. ServletException,IOException{
  5.         request.setCharacterEncoding("utf-8");
  6.         String username =     request.getParameter("username");
  7.     username=new String(username.getBytes("iso-8859-1"),"utf-8");
  8.         String msg = "<div style='font-size:80px'>" +
  9.                  "你好 " + username + "</div>";
  10.         response.setContentType("text/html;charset=utf-8");
  11.         PrintWriter out = response.getWriter();
  12.         out.println(msg);
  13.         out.close();
  14.     }
  15. }

最后

以上就是冷艳期待为你收集整理的Servlet如何运行的全部内容,希望文章能够帮你解决Servlet如何运行所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部