BS 浏览器访问服务器
缺点:页面不会很好看
优点:不需要手动更新,可以保持更多的连接
CS 客户端访问服务器
优点:页面更好看
缺点:手动更新数据
Http状态:200 ok 正常
302 重定向
404 没找到资源
500 服务器内部错误
Tomcat:中间件 服务器,在学习过程中一直使用的开源的服务器, 类似还有jetty/jboss/websphere
下载,安装,启动(双击startup.bat),关闭
tomcat和eclipse集成
定义servlet有3种方式
1 写一个类实现servlet接口,重写方法
在web.xml 配置Servlet和servlet-mapping这两个标签
2 写一个类继承GenericServlet类,重写方法
3 写一个类实现继承HttpServlet类,重写方法
页面请求servlet
1 在页面地址栏输入url 敲回车
2 这个请求去匹配web.xml 的url-pattern元素
如果资源不存在返回404
如果存在,根据servlet-name找到servlet-name的同胞元素servlet-class
第一次,这个类会进行实例化操作,调用service方法进行处理
第一次以后,将不会再实例化,调用service方法进行处理
3 页面获取到响应以后,解析数据包显示在页面上,同时会把连接断开
HttpServletRequest
请求头
Request:页面上所有的传递的信息都封装在此对象里面,根据需要调用不同的方法可以得到不同的值
获取页面传参有4种方式 :
1 Request.getParameter(String name) 返回字符串的值
第二种方式
Request.getParameterValues 返回String[] 包含参数值的字符串对象数组
第三种 request.getParameterNames 返回枚举
返回包含此请求中包含的参数名称的字符串对象的枚举。如果请求没有参数,则方法返回空枚举。
回报:
String对象的枚举,每个字符串都包含请求参数的名称;如果请求没有参数,则为空的枚举
如果在后台进行获取信息
while遍历
第四种方式
Request.getParameterMap 返回的是一个map集合
HttpServletResponse响应对象
响应浏览器信息。把要显示的内容封装到response对象里面
方法:
PrintWriter :response.getWriter():得到一个打印流,打印的内容是浏览器显示
sendRedirect:重定向
SetCharsetEncoding(String charset):默认为iso-8859-1编码
响应头:
提交方式有get/post两种
Get有两种:1 超链接
2 表单里面的method=”get”
Post:1 表单method=”post”
至于调用doGet/doPost 取决于有几个方法存在
1 只有doGet/doPost两个方法存在,看提交方式是哪一个 get请求就是doGet处理,如果post请求是doPost处理
2 有doGet/doPost/service三个方法存在,一定是service方法处理
3 有doGet/doPost/service/父类的service 四个方法存在,优先使用父类的service方法处理
get/post区别
Get:1 传参显示在地址栏上,不安全,有可能被一些工具所获取
2 把链接发给别人,大家看到的内容是一样的
3 get是幂等性的,可以缓存记录的
4 get提交的内容比较少的,不能上传大的视频等
Post:1 post是提交表单,登录,内容是藏在form-data里面,更安全
2如果再次提交表单,不幂等,所以会弹出提示,是否要重新提交表单
3可以提交大的数据,比如电影文件之类
乱码处理
欧洲标准编码iso-8859-1
Tomcat8 :doGet 没有处理乱码,但也没乱码,无需处理
DoPost 有乱码
处理方案:1 使用name = new String(name.getBytes(),”utf-8”);
2 统一设置 request.setCharsetEncoding(“utf-8”)
Tomcat7:doGet 要处理 1 name = new String(name.getBytes(),”utf-8”);
2 在tomcat/conf/server.xml connector元素添加 URIEncoding=”UTF-8”设置后不会出现乱码
过滤器(后面介绍)也可以处理
页面用Js:encode(字符器) 后台用java:decode处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术