一、重点问题
ios提交数据不支持get请求
get提交解决中文乱码问题,在tomcat目录下改server.xml目录
javaweb项目中默认首页是可以改的,但是不建议改
设置字符编码集不区分大小写
只有post请求可以返回请求体长度
重定向会发两次请求,而转发只发一次请求
数据库表存储数据数据库本身并没有限制,而是电脑硬盘限制存储数据数量
二、课堂知识
第1节 Servlet是什么
1. 从广义上来讲,Servlet规范是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案。而具体的Servlet容器负责提供标准的实现,也就是tomcat为你创建对象
2. 从狭义上来讲,Servlet指的是javax.servlet.Servlet接口及其子接口,也可以指实现了Servlet接口的实现类
3. Servlet作为服务器端的一个组件,它的本意是“服务器端的小程序”。Servlet的实例对象由Servlet容器负责创建;Servlet的方法由容器在特定情况下调用;Servlet容器会在Web应用卸载时销毁Servlet对象的实例
</pre>
第2节 Servlet的技术体系
1. Servlet接口:是sun公司针对于web技术提供的一套标准(接口)
2. GenericServlet:对servlet功能进行了封装和完善,将service方法保留为抽象方法,让使用者仅关心业务实现。
3. HttpServlet抽象类是对GenericServlet进一步封装和扩展更贴近HTTP协议下的应用程序编写,在service方法中根据不同HTTP请求类型调用专门的方法进行处理
4. 今后在实际使用中我们只需要继承HttpServlet并且实现doget和dopost方法即可。
5. ServletConfig接口:封装了Servlet配置信息</pre>
第3节 ServletConfig配置获取
// 在web.xml中配置
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.qianfeng.servlet.HelloServlet</servlet-class>
<init-param>
<param-name>userName</param-name>
<param-value>admin123</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping></pre>
</center>
在servlet组件中获取配置信息
//获取上下文ServletConfig
ServletConfig servletConfig = getServletConfig();
String userName = servletConfig.getInitParameter("userName");
System.out.println(userName);</pre>
第4节 Servlet使用
- 使用Servlet接口实现Web的方式一
1. 使用eclipse创建JavaWeb动态工程 (2.5版本的web项目)
2. 添加jar包 javaee-api-7.0.jar
3. 创建MyServlet类,extend Servlet接口
4. 在web.xml中注册MyServlet类
5. 创建请求页面,编写业务代码</pre>
- 使用GenericServlet类实现Web的方式二
GenericServlet类是对Servlet接口的进步一封装,并且将service方法抽象化,让用户将重心放在具体的业务上</pre>
- 使用HttpServlet类实现Web的方式三
HttpServlet类是对GenericServlet类的更进步一封装,并且抽象出doGet、doPost方法,更方便用户处理前端发送过来的GET/POST请求
request对象的常用方法?
1. String getParamter(String name) : 返回指定name参数的参数值
2. String[] getParameterValues(String name) : 返回包含name参数的所有值
3. void setAttribute(String, object) : 存储此请求域中的数据
4. Object getAttribute(String) : 从域中取出对象
5. String getProtocol() : 返回请求中的协议类型及版本号
6. String getServerName() : 返回接受请求的服务器主机名
7. int getServerPort() : 获取服务器对应的端口号
8. String getCharacterEncoding() : 返回字符集编码
9. void setCharacterEncoding() : 设置请求的字符集编码
10. int getContentLength() : 返回请求体的长度【字节数】
11. String getRemoteAddr() : 返回发送此请求的客户端IP地址,返回的ip地址中的0代表任意浏览器都可以访问</pre>
第5节 转发和重定向
- 请求转发
1. Servlet接受浏览器发送过来的请求之后进行初步处理而不是直接响应给前端页面,而是在服务器内部转发给其他的servlet程序继续处理,这种情况下浏览器只发出了一次请求,浏览器地址栏不会发生变化,用户不会感知到地址栏被转发
2. 转发请求的Servlet和目标Servlet共享同一个request对象
3. 转发可以访问WEB-INF目录下的资源
转发语法:
request.getRequestDispatcher("/ok.html").forward(request, response);</pre>
- 请求重定向
1. Servlet接收到浏览器端请求并处理完成后,给浏览器端一个特殊的响应,这个特殊的响应要求浏览器去请求一个新的资源,整个过程中浏览器端会发出两次请求,且浏览器地址栏会改变为新资源的地址
2. 重定向的情况下,因为发送两次请求,所以原Servlet和目标资源之间就不能共享请求数据了
3. 重定向不能访问WEB-INF下的资源(因为重定向是客户端发出的动作)
重定向语法:
resp.sendRedirect("ok.html");</pre>
- 转发和重定向的区别
| 转发和重定向 |
| | 转发 | 重定向 |
| 浏览器地址栏 | 不改变 | 改变 |
| 发送请求次数 | 1 | 2 |
| 能否共享request对象数据 | 是 | 否 |
| 目标资源:WEB-INF下的资源 | 能访问 | 不能访问 |