javaweb实训第三天上午——Servlet(1)https://developer.aliyun.com/article/1414833
1.7.处理请求的方式
前言:之前学过请求方式或方法有很多,主要掌握:get和post两种,下面的这种写法太麻烦:
为了提高开发效率,一般采用下面的几种方式处理不同的请求方式:
第一种:在doGet中调用doPost
第二种:在doPost中调用doGet
第三种:service方法(底层会判断是get还是post调用相应的方法处理)
1.8.HttpServletRequest对象
1.HttpServletRequest对象是Servlet的请求对象,可以获取请求数据包/报文中的所有信息;
2.常用方法:
(1)String getContextPath():获取上下文路径,<Context path="上下文" ../>; (2)String getHeader(String headName):根据指定的请求头获取对应的请求头的值; (3)String getRequestURI():返回当期请求的资源路径URI(上下文路径/资源名); (4)StringBuffer getRequestURL():返回浏览器请求地址URL; (5)String getRemoteAddr():返回请求服务器的客户端的IP; (6)String getServletPath():返回请求,<url-pattern>中的值; (7)==String getParameter(String name):==根据参数名称,获取对应参数的值; (8)String[] getParameterValues(String name):根据参数名称,获取该参数的多个值; (9)Map<String,String[]> getParameterMap():返回请求参数组成的Map集合; (10)void req.setCharacterEncoding("UTF-8"):能够正确获取post请求的中文参数而不出现乱码; (11)String getProtocol()):获取协议版本HTTP/1.1 (12)String getMethod()):获取请求方式(GET or POST) (13)int getServerPort():获取端口号
1.9.HttpServletResponse对象
1.HttpServletResponse对象是Servlet的响应对象,可以设置响应的文件格式和编码格式,还可以获取输出流;
2.常用方法:
(1)获取流:
①方法1:OutputStream getOutputStream(); 获取字节输出流(上传下载用)
②方法2:resp.getWriter(); 获取字符输出流
(2)响应页面的文件格式和编码格式:resp.setContextType(“text/html;charset=UTF-8”);
1.10.乱码问题
1.向页面输出中文
(1)resp.setContentType(“text/html;charset=utf-8”);//能够向页面输出中文
(2)注意:""中的内容不要写错,否则浏览器不认识响应的类型,就会将问题抛给用户;
2.获取表单提交的中文数据
(1)针对post请求(请求参数是在实体内容中)
①第一种:req.setCharacterEncoding(“utf-8”);
②第二种:转码:name = new String(name.getBytes(“iso-8859-1”), “utf-8”);//转码缺点:太麻烦,每个数据都要转
③注意:两种只能用其一;
3.针对get请求(请求参数是在地址栏上),tomcat8不做处理,如果是tomcat7及其以前:
(1)第一种:转码:name = new String(name.getBytes(“iso-8859-1”), “utf-8”);
(2)第二种:修改服务器中的配置conf – server.xml – 标签中最后加上属性URIEncoding=“utf-8”
(3)注意:两种只能用其一 ,以后服务器换了,还需重新配置一次;
4.注意:
(1)tomcat8.x之前的默认编码集为ISO-8859-1,tomcat8.x之后默认编码集为UTF-8;
(2)对于tomcat8.x以及之后的get请求不需要转码或配置,而Tomcat7需要配置;
2.课程总结
2.1.重点
1.get和post区别;
2.Sevlet开发;
3.Servlet生命周期;
2.2.难点
1.Web项目搭建和部署;
2.Servlet开发;
3.乱码问题;
4.Servlet生命周期理解;
2.3.如何掌握
1.课上认真听课;
2.完成课后练习;
3.抓住课程重点;
2.4.排错技巧
1.通过异常和错误找出问题,分析问题,解决问题;
2.如果tomcat点了没有反应,可能是在eclipse 里面配置有问题;
3.如果已经启动了tomcat,再次启动会报错端口号被占用;
4.不熟悉Servlet开发流程;
3.常见问题
1.错误信息:A child container failed during start
(1)原因1:请求的写法不规范
(2)原因2:请求重复了,Servlet的请求不能重复
2.错误信息:ClassNotFoundException - 我们自己写的类找不到
(1)原因1:类的完全限定名写错
(2)原因2:eclipse自动编译出问题,切换到navigator视图发现classes中没有字节码文件 – 解决,重启eclipse,有可能eclipse在执行其他任务时卡住了
3.Tomcat启动时进入Debug模式
(1)如果Javaweb项目运行时,设置了断点【有时候并不是自己设置的,tomcat自动设置的】,那么启动时就会停止 – 解决,清除所有的断点,然后重新启动tomcat
4.Tomcat启动时报错
(1)包含第一个错误
(2)找配置【web.xml or server.xml】找注解@WebServlet
4.课后练习
1.课堂代码1-2遍;
2.完成一个页面输入账号和密码,后台连接数据库查询是否有该用户
如果有返回登陆成功
如果没有返回 亲,账号和密码错误
5.扩展知识或课外阅读推荐(可选)
5.1.扩展知识
@WebServlet注解
@WebServlet(name="", urlPatterns={""}, loadOnStartup=1,initParams={@WebInitParam(name="",value="")})
public class FirstServlet extends HttpServlet{ … }
注:如果添加了web.xml,需要设置metadata-complete=”false”或者说不写这个属性,那么上述注解才有用: