Servlet学习笔记
Tomcat文件conf:配置文件,server.xml:用于配置server相关的信息如tomact启动端口,配置Host,配置Context即web应用。
Web.xml:配置与web应用
Tomcat-users.xml:用户配置tomcat的用户密码和权限
http://localhost:8080/web/index.html:URL(统一资源定位)
http:协议,localhost:主机域名,8080:端口,web:web应用,index.html:资源文件
web/hello.html:URI
work:存放jsp被方问后生产的对应的servlet文件class文件
web应用下的web.xml文件中配置默认首页面:
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
配置虚拟目录在tomcat的conf目录下的server.xml的<Host>节点中添加<Context path=”/web应用名” docBase=”文件绝对路径” />
Context元素reloadable设置有文件更新tomcat会自动重新加载,unpackWAR设置运行前解压所有web应用
tomcat体系架构从大到小:tomcat(server),service,engine(引擎),host(主机),context(web应用)
开发servlet的三种方法:实现servlet接口,继承GenericServlet类,继承HttpServlet类
Servlet的init(ServletConfig config)初始化servlet,函数只会调用一次
将Servlet部署到web.xml文件
<servlet>
<servlet-name>servlet的注册名</servlet-name>
<servlet-class>servlet的绝对路径</servlet-class>
</servlet>
<servlet>
<servlet-name>servlet的注册名</servlet-name>
< url-pattern >servlet的访问路径(格式为:/名字)</url-pattern>
</servlet>
Servlet的访问路径使用通配符的格式为:/*表示匹配所有,*.扩展名
匹配标准:匹配度高优先选择,*.扩展名优先级最低
使用javac编译有自定义包名的java文件,需要带命令参数格式为:javac –d .java文件
提交方式get与post的区别:get会将提交的信息显示到地址栏,get提交内容一般不大于2k,post理论无限制,get提交会立即处理响应。
Servlet配置<load-on-startup>启动优先级(数字)</load-on-startup>指定servlet的创建顺序
<init-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
<init-param>通过getServletConfig()函数读取
setContentType("text/html;charset=utf-8");设置浏览器默认解析的编码格式
setCharacterEncoding("utf-8");设置程序编码格式
Servlet请求重定向函数sendRedirect(“跳转地址?参数1名=参数1值&参数2名=参数2值”)
超文本传输协议(HTTP,HyperText Transfer Protocol)
http1.0称为短连接,http1.1称为长连接,是指请求时间间隔的长短
http的请求基本结构:
请求行(请求方式,请求的资源名称,http协议版本)
消息头(格式 消息名:内容)
空行
内容(格式:内容名字=内容体)
http请求消息头:
Accept:浏览器接受的格式
Accept-Charset:浏览器接受字符编码
Accept-Encoding:浏览器接受数据的格式
Accept-Language:浏览器支持的语言
Host:浏览器访问的主机和端口
If-Wodified-Since:浏览器缓存文件及时间
Referer:浏览器访问主机方式
Use-Agent:浏览器内核信息
Cookie:网页信息
Connection: 连接方式
Date:浏览器发送http请求时间
http的响应基本结构:
状态行(格式 http版本号 状态码 原因)
消息头(格式 消息名:内容)
空行
内容(格式:内容名字=内容体)
http响应消息头:
Location:浏览器重新定位地址
Server:服务器信息
Content-Encoding:数据格式
Content-Length:数据大小
Content-Language:数据语言
Content-Type:内容格式
Last-Modified:资源最近更新的时间
Refresh:多少时间后跳转到指定地址
Content-Disposition:attachment;filename=文件名称
Transfer-Encoding:传输编码,校验和
Set-Cookie:cookie信息
Expires:缓存数据方式(为了支持不同浏览器内核设置3个缓存数据方式)
Cache-Control:缓存数据方式
Pragma:缓存数据方式
Connection: 连接方式
Date:浏览器收到http响应时间
getWriter()用于回送字符数据
getOutputStream()用于回送字节数据(二进制数据)
由于web服务器会检测数据流是否关闭,未关闭服务器会关闭,所以getWriter()与getOutputStream()同时使用会第二个无法正常传输数据。
中文乱码原因:浏览器根据不同的请求提交方式有不同编码格式,tomcat服务器默认编码格式为iso-8859-1
解决方法:
浏览器显示编码格式设置:
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
post请求提交:request.setCharacterEncoding(“utf-8”);
get请求提交:new String(string.getBytes(“iso-8859-1”),”utf-8);
下载文件提示框编码格式设置:java.net.URLEncoder.encode(“中文名”,”utf-8”);
getHeader(“参数名”)返回请求头信息中参数名的值
服务器内部转发request.getRequestDispatcher("/转向的Servlet名").forward(request, response);转发后的request和response与转发前是同一个request和response
浏览器转发response.sendRedirect(“/web应用名/资源名(servlet)”)转发是在,request和response对象与转发之前不是同一个
分页变量
pageNow:现在显示第几页
pageSize:每页显示多少条记录
pageCount:共有多少页
rowCount:共有多少条记录
java web读取文件使用类加载器,类加载器读取资源默认是主目录是src目录
inputStream=类名.class.getClassLoader().getResourceAsStream("文件名");
浏览器的Cookie是在服务器创建会保存到浏览器
Cookie 名字=new Cookie(属性名, 属性值);cookie只能存放String类型数据
名字.setMaxAge(正数);设置cookie存放时间(单位是秒)
名字.setMaxAge(0);在浏览器退出后删除cookie
名字.setMaxAge(负数);负数与默认不设置一样在关闭浏览器时清除
response.addCookie(名字);cookie通过http响应返回给浏览器并保存
cookie可以多个浏览器共享
一个浏览器最多存放300个cookie,一个web站点最多存放20个cookie,每个cookie大小最大为4k
浏览器的cookie读取
Cookie 名字[]=request.getCookies();通过request类读取返回所有cookie
名字.getName()获得cookie的属性名,重名的cookie值会被替换
名字.getValue()获得cookie的属性值
一个web应用可以保存多个cookie,有最大数量限制
一个web应用的所有cookie都存放在同一个文件里
Cookie存放中文时可能会出现乱码或者错误,因为cookie中文编码格式默认为base64
cookie存放中文通过java.net.URLEncoder.encode(需要编码的值, 编码格式);进行编码
cookie取出中文通过java.net.URLDecoder.decode(需要解码的值, 解码格式);进行解码
cookie默认是明文存放不安全重要信息需要加密
密码加密存放,一般是用户输入密码进行加密后再存放到数据库,验证时对用户输入的密码加密后到数据库对比验证
Session是存在服务器端的内存中,服务器为每个用户的浏览器创建各自独享的session对象
服务器未发现session会自动创建一个,一般都是在浏览器第一次访问时创建
Session 名字=request.getSession(参数)获得服务器的session,参数为false表示服务器未找到session不去创建新的session,参数为true与默认不填表示服务器未找到session会创建新的session
session默认存在时间30分钟(单位是分钟),服务器(tomcat)下所有web应用的所有session默认时间修改在服务器(tomcat)的web.xml文件中,一个web应用下的所有session默认时间修改在相应web应用下的web.xml文件中,一个session的默认时间设置是名字.setMaxInactiveInterval(时间);设置session名为名字的存在时间(单位是秒),默认时间的设置优先级从大到小为session,web应用,服务器
名字.setAttribute(属性名(字符串), 属性值(object));设置session内容,属性名一样的值将会被替换
名字.getAttribute(参数);返回session中属性名为参数的值,返回类型为object
名字.removeAttribute(参数);删除session中属性名为参数的值,让session中属性名为参数值失效
重启服务器(tomcat),重新加载(reload)web应用,关机等操作会导致session失效
名字.invalidate();设置session立即失效(包含session中所有属性),一般用于安全退出
List集合有序,map集合无序
用户禁用浏览器的cookie后的session处理方法
response. encodeRedirectURL(url地址);用于对sendRedirect方法后的url地址进行重写
response.encodeURL(url地址);用于对表单提交和超链接的url地址进行重写
ServletContext是在服务器端web应用启动时创建的,一个ServletContext被改web应用的所有客户端共享,
ServletContext可以通过ServletContext 名字=this.getServletContext();方法获得也可以通过
ServletContext名字=this.getServletConfig().getServletContext();方法获得
ServletContext的生命周期从创建开始到web应用服务器关闭为止
web应用下的web.xml文件servlet标签中配置
<init-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</init-param>只会被该servlet访问
访问使用String 名字=this.getServletConfig().getInitParameter("参数名");
web应用下的web.xml文件中配置
<context-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</context-param>会被该web应用所有servlet访问
访问使用String 名字=this.getServletContext().getInitParameter("参数名");
ServletContext服务器web应用内部实现跳转this.getServletContext().getRequestDispatcher("跳转地址");
ServletContext读取文件
InputStream 名称=this.getServletContext().getResourceAsStream("资源名称及位置");
属性读取对象Properties
properties.load(inputStream流对象);加载文件流
properties.getProperty("属性名");获得属性值
获取文件的绝对路径String 名字=this.getServletContext().getRealPath("资源文件名称");
ServletContext能读取web目录和WEB-INF目录下的文件
其他文件下需要使用类加载器this.getClass().getClassLoader().getResourceAsStream("资源文件名称");
统计页面访问次数不包含网页刷新的方法
将页面跳转方式服务器内部跳转request.getRequestDispatcher("页面地址").forward(request, response);换成浏览器跳转response.sendRedirect("页面地址");
本文地址:https://blog.csdn.net/kaku812814843/article/details/85910070