Servlet记录
【Servlet】java语言编写动态资源的开发技术,普通的java类
【转发与重定向的区别】
转发在服务器端完成的;重定向是在客户端完成的
转发的速度快;重定向速度慢
转发的是同一次请求;重定向是两次不同请求
重定向不能保存数据在request域中,转发可以
转发不会执行转发后的代码;重定向会执行重定向之后的代码
转发地址栏没有变化;重定向地址栏有变化
转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
【加载资源文件路径】
"."代表tomcat/bin目录,不能再web项目中使用
【Servlet线程】
1)单例多线程:tomcat实例化一个servlet类,为每个用户开启一个线程处理请求
2)线程安全问题:
多个用户访问Servlet的共享数据(成员变量),可能会产生线程安全问题
解决:使用共享数据时加锁
3)实现单线程模式
<%@ page isThreadSafe=”false”%> 默认值为true
https://blog.csdn.net/john2522/article/details/7467983
【Servlet开发步骤】
1)编写Servlet类
继承HttpServlet类,重写doGet(),doPost()方法
2)编译servlet字节码
存放在tomcat的一个web应用中的WEB-INF/classes目录下
3)配置一个servlet web.xml中
HelloServlet
gz.itcast.d_servlet.HelloServlet
HelloServlet
/hello
4)访问:启动tomcat,访问http://localhost:8080/myweb/hello
【servlet生命周期】
1)加载Servlet:当Tomcat第一次访问Servlet的时候,Tomcat会负责创建Servlet的实例【构造器】
2)初始化:当Servlet被实例化后,Tomcat会调用【init()】方法初始化这个对象
3)处理服务:当浏览器访问Servlet的时候,Servlet 会调用【service()】方法处理请求
4)销毁:当Tomcat关闭时或者检测到Servlet要从Tomcat删除的时候会自动调用【destroy()】方法,让该实例释放掉所占的资源。一个Servlet如果长时间不被使用的话,也会被Tomcat自动销毁
简单总结:只要访问Servlet,service()就会被调用。init()只有第一次访问Servlet的时候才会被调用。
destroy()只有在Tomcat关闭的时候才会被调用。
【servlet的自动加载】默认是第一次访问时加载,改变servlet的加载时机可以提前到加载web应用时创建
配置servlet时添加1,tomcat启动时会加载此类,越小优先级越高
------------------HttpServletRequest----------------
【请求行】
request.getMethod(); 请求方式
request.getRequetURI() / request.getRequetURL() 请求资源
request.getProtocol() 请求http协议版本
【请求头】
request.getHeader("名称") 根据请求头获取请求值
request.getHeaderNames() 获取所有的请求头名称
【实体内容】
request.getInputStream() 获取实体内容数据
【获取请求参数】
request.getParamerter(参数名): 获取一个值的参数
request.getParamerterValue(参数名):获取多个值的同名参数,如select元素值
request.getParamerterNames(): 获取所有参数名称列表
【设置请求参数的编码格式】
request.setCharacterEncoding("utf-8"); //只对POST方式提交的数据有效
------------------HttpServletResponse----------------
响应行:
response.setStatus(404) 设置状态码
响应头:
response.setHeader("name","value") 设置响应头
实体内容:
response.getWriter().writer(); 响应二进制数据
response.getOutputStream().writer() 响应字符数据
【设置响应类型和内容编码】如果未指定字符集,则将使用ISO-8859-1
response.setContentType("text/html;charset=UTF-8")
【以流的方式响应】
response.setContentType("text/html; charset=UTF-8");
PrintWriter pw = response.getWriter();
pw.close();
【重定向】
response.sendRedirect("www.baidu.com");
-------------ServletConfig对象--------
【初始化参数配置】
name
xyg
【创建】
tomcat启动web应用封装这些配置信息到servletconfig对象中,调用init()时传入servletconfig对象
【获取】
this.getServletConfig().getInitParameter("name");//获取配置信息
-----------ServletContext对象--------
servlet的上下文对象,表示当前web应用环境,一个web应用中只有一个servletContext对象
【获取】
this.getServletConfig().getServletContext();//通过配置对象获取上下文对象
【方法】
servletContext.getContextPath(); //获取部署的项目名
servletContext.getInitParameter("name"); //获取web应用初始化参数(全局)
servletContext.getRequestDispatcher("/get").forward(request,response); //转发
----------------域对象------------
用于在不同动态资源直接共享数据
【分类】
HttpServletRequest 一次请求
ServletContext 全局
HttpSession 一次会话
PageContext 当前页面
-------------JSP------------------
【执行过程】
1.浏览器访问jsp页面,tomcat将jsp翻译成java源文件(hello_jsp.java)
2.tomcat将字节码翻译成class字节码文件(hello_jsp.class)
3.tomcat构造生成的类对象(hello_jsp对象)
4.调用类对象中方法
再次访问就直接调用方法,无需构造类对象
【work目录】存放jsp运行时的临时文件
-------------jsp语法----------------
【指令】<%@include%>,<%@page%>
【表达式】向浏览器输出变量的值或表达式计算的结果
<%=%> //out.print(“变量” );
【脚本】 执行java代码
<%%>
【声明】 声明jsp的变量或方法
<%!%>
动作
【注释】 <%-- -- %>
//服务端跳转
<%response.sendRedirect("path");%> //客户端跳转
---------------JSTL------------------
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
取值 ${}
设值
输出
删除
判断
循环:
status.index行数0开始
status.count行数1开始
格式化日期
处理字符串:${fn:length()}
${fn:join()}
Servlet记录的更多相关文章
- JS+Ajax+Servlet:记录页面访问时间
1.前端JS记录页面访问时间 1.1JQuery版本: <script type="text/javascript" src="js/jquery.min.js&q ...
- jave ee之 servlet 记录
1:没有自动生成web.xml文件 解决方法:新建web工程的时候最后会选择是否创建web.xml文件 2:通过url映射无法打开对应网站 <servlet> <servlet-na ...
- idea配置servlet记录,tmocat当服务器,学习
没整理图片,将就看吧, Mac10.11.6 idea2018.1.3 servlet+tmocat9 遇到问题: 端口错误 java.rmi.server.ExportException: Port ...
- Servlet工作原理(转)
Servlet运行在Servlet容器中,由容器负责Servlet实例的查找及创建工作,并按照Servlet规范的规定调用Servlet的一组方法,这些方法也叫生命周期的方法.具体调用过程如下图所示: ...
- Servlet 工作原理
Servlet运行在Servlet容器中,由容器负责Servlet实例的查找及创建工作,并按照Servlet规范的规定调用Servlet的一组方法,这些方法也叫生命周期的方法.具体调用过程如下图所示: ...
- freeMarker(九)——程序开发指南补充知识
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.变量.范围 本章介绍当模板在访问变量时发生了什么事情,还有变量是如 ...
- 【JSP】JSP基础学习记录(四)—— Servlet
序: 众所周知JSP的基础也就是Servlet,如果单纯用Servlet类来响应用户的HTTP请求可以吗?答案是肯定的.JSP中的9个内置对象只是自动帮我们初始化的,没有他们一样可以实现web.只是工 ...
- Servlet学习记录4
带进度条的文件上传 UploadServlet只实现了普通的文件上传,并附带普通文本域的提交.如果需要显示上传进度条,实时显示上传速度等,需要配合使用Ajax技术.这里仍然使用Apache的commo ...
- Servlet学习记录3
提交表单信息 Web程序的任务是实现服务器与客户端浏览器之间的信息交互.客户端提交的信息可能来自表单里的文本框,密码框,选择框,单选按钮,复选框以及文件域.这些表单信息被以参数形式提交到了服务器.Se ...
随机推荐
- Perl基础语法
一.脚本文件perl 代码可以写在一个文本文件中,以 .pl..PL 作为后缀.文件名可以包含数字,符号和字母,但不能包含空格,可以使用下划线(_)来替代空格.一个简单的Perl 文件名:rurun_ ...
- ref & out - C#中的参数传递
[ref & out - C#中的参数传递] ref与out均指定函数参数按引用传递,惟一的不同是,ref传递的参数必须初始化,而out可以不用. ref与out无法作为重载的依据,即ref与 ...
- Loadrunner Analyze
Analysis 对controller运行的结果进行分析 1.首先必须明确:光靠Analysis是不行的,只要能通过Analysis分析出部分问题就已经很不错了, 善于利用它才是最关键的. 2.如何 ...
- Docker01 centos系统安装、centos安装docker、docker安装mongoDB
1 centos系统安装 本博文是基于 centos6.5 的,利用VMware 虚拟机搭建 centos6.5 系统 1.1 centos6.5资源获取 1.2 安装 1.2.1 新建虚拟机 1.2 ...
- input 框提示信息
给input添加提示信息,只需添加 “placeholder”的class,将提示信息放在value中, 其中“placeholder”的名字是随便取的,不是H5的“placeholder”属性 例子 ...
- rest-framework之序列化组件
一:django自带序列化组件 Django内置的serializers(把对象序列化成json字符串) from django.core import serializers def test(re ...
- 现代C++学习笔记之二入门篇1
现代 C++ 强调: 基于堆栈的范围,而非堆或静态全局范围. 自动类型推理,而非显式类型名称. 智能指针而不是原始指针. std::string 和 std::wstring 类型(请参见 <s ...
- 编写高质量代码改善C#程序的157个建议——建议16:元素数量可变的情况下不应使用数组
建议16:元素数量可变的情况下不应使用数组 在C#中,数组一旦被创建,长度就不能改变.如果我们需要一个动态且可变长度的集合,就应该使用ArrayList或List<T>来创建. 而数组本身 ...
- 平方十位数——第八届蓝桥杯JavaB组(国赛)第一题
原创 标题:平方十位数 由0~9这10个数字不重复.不遗漏,可以组成很多10位数字.这其中也有很多恰好是平方数(是某个数的平方). 比如:1026753849,就是其中最小的一个平方数. 请你找出其中 ...
- Android Studio2.3更换默认的ConstraintLayout布局
1.在as安装目录\plugins\Android\lib\templates\activities\common\root\res\layout下,找到simple.xml.ftl文件 2.用以下布 ...