概述
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字符集去编码带有中文的输出内容时就产生了乱码。
如何解决输出内容的乱码问题
- response.setContentType(“text/html;charset=UTF-8”);
其中charset可以使用其他支持中文的字符集,如GBK。setContentType()有两个作用:
1.通知容器,在调用out.println方法输出时,使用指定的字符集
2.生成一个消息头(content-type),通知浏览器,服务器返回的数据类型和字符集
- public class HelloServlet extends HttpServlet{
- public void service(HttpServletRequest request,
- HttpServletResponse response)throws ServletException,
- IOException{
- response.setContentType("text/html;charset=utf-8");
- //获得输出流
- PrintWriter out = response.getWriter();
- out.println(“哈哈哈”);
- //关闭流
- out.close();
- }
- }
Servlet如何处理表单
如何获得请求参数值
对于表单提交的数据,Servlet可以从容器构建的request对象中获取,如下两个方法可以在不同情况下获取表单数据:String getParameter(String paramName)
String[] getParameterValues(String paramName)
getParameter方法
主要用于获取表单中控件的数据。其中 参数名一定要与客户端表单中的控件name属性相一致 。所以在构建表单各元素时,name属性一定要有。而name属性和id属性的区别就在于, id属性一般是作为客户端区分控件的标识 , name属性是服务器端区分各控件的标识 。如果参数名写错,则该方法会返回null。
- <html>
- <head>
- </head>
- <body>
- <form action="hello" method="post">
- 用户名:<input name="username"/><br/>
- <input type="submit" value="提交"/>
- </form>
- </body>
- </html>
- public class HelloServlet extends HttpServlet{
- public void service(HttpServletRequest
- request,HttpServletResponse response)
- throws ServletException,IOException{
- /*
- * request.getParameter方法:
- * 1.作用:依据请求参数名获取请求参数值。
- */
- String username = request.getParameter("username");
- //处理请求
- String msg = "<div style='font-size:80px'>" +
- "你好 " + username + "</div>";
- response.setContentType("text/html;charset=utf-8");
- //获得输出流
- PrintWriter out = response.getWriter();
- out.println(msg);
- //关闭流
- out.close();
- }
- }
getParameterValues方法
用于 获取表单中一组参数名相同的控件提交的数据组 ,如复选框,所以 该方法返回的是字符串数组 。如果用户没有选择这一组同名控件的任何一个,则该方法返回null。用于提供用户输入用户名和爱好选项的HTML页面完整代码如下:
- <html>
- <head>
- </head>
- <body>
- <form action="hello" method="post">
- 用户名:<input name="username"/><br/>
- 爱好:
- 吃饭<input type="checkbox" name="hobby" value="eating" checked="checked"/>
- 睡觉<input type="checkbox" name="hobby" value="sleeping"/>
- 打豆豆<input type="checkbox" name="hobby" value="fighting"/>
- <br/>
- <input type="submit" value="提交"/>
- </form>
- </body>
- </html>
- public class HelloServlet extends HttpServlet{
- public void service(HttpServletRequest
- request,HttpServletResponse response) throws ServletException,IOException{
- String username = request.getParameter("username");
- String[] hobby= request.getParameterValues("hobby");
- //处理请求
- String msg = "<div style='font-size:80px'>" +
- "你好 " + username + "</div>";
- response.setContentType("text/html;charset=utf-8");
- PrintWriter out = response.getWriter();
- out.println(msg);
- for(int i=0;i<hobby.length;i++){
- out.println("<h1>" + hobby[i] +"</h1>");
- }
- //关闭流
- out.close();
- }
- }
为什么表单提交中文会出现乱码
如何解决表单提交时的中文乱码问题
步骤一、确保表单所在的页面按照指定的字符集打开
在HTML页面中使用meta标记可以确保浏览器按照指定的字符集进行解码页面,并限定表单提交时的数据编码方式
- <meta http-equiv="content-type" content="text/html;charset=utf-8">
- request.setCharacterEncoding("utf-8");
解决GET方式提交时的中文乱码问题
步骤一、确保 表单所在的页面按照指定的字符集打开在HTML页面中 使用meta标记可以确保浏览器按照指定的字符集进行解码页面,并限定表单提交时的数据编码方式
- <meta http-equiv="content-type" content="text/html;charset=utf-8">
- String username = request.getParameter(“username”);
- username = new String(username.getBytes(“iso-8859-1”),“UTF-8”);
解决表单提交时的中文乱码问题的完整代码如下:
- public class HelloServlet extends HttpServlet{
- public void service(HttpServletRequest request,
- HttpServletResponse response)throws
- ServletException,IOException{
- request.setCharacterEncoding("utf-8");
- String username = request.getParameter("username");
- username=new String(username.getBytes("iso-8859-1"),"utf-8");
- String msg = "<div style='font-size:80px'>" +
- "你好 " + username + "</div>";
- response.setContentType("text/html;charset=utf-8");
- PrintWriter out = response.getWriter();
- out.println(msg);
- out.close();
- }
- }
最后
以上就是冷艳期待为你收集整理的Servlet如何运行的全部内容,希望文章能够帮你解决Servlet如何运行所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复