Java Servlet概念
用Java编写的服务器端的程序,可以向客户端生成动态的网页内容。
servlet容器
将客户端的请求传送给servlet,并将结果返回给客户端,容器运行在服务器端。
常见的容器有:
- tomcat
- jetty
- weblogic
- websphere
- glassfish
tomcat
文件目录
- bin bin文件夹下是tomcat的运行程序
- conf conf内的web.xml可以设置tomcat的配置
- lib lib内是一些开发时使用到的jar包
安装
tomcat安装时要注意默认端口不能被占用,windows下通过CMD指令查看端口是否被占用:
netstat -an|find "8009"
查看8009端口的信息,如果没有内容则端口没有被占用。
netstat -ano|find "8009"
如果有程序占用,查询8009端口被哪个程序占用,有如下信息
TCP 0.0.0.0:8009 0.0.0.0:0 LISTENING 4776
TCP [::]:8009 [::]:0 LISTENING 4776
tasklist |find "4776"
通过上面查询的值查找对应的进程
- tomcat安装时可以设置端口号,在安装完成后也可以通过修改server.xml来修改
- 在开发工具中的tomcat设置中也可以修改
tomcat使用内存设置
以tomcat7为例在bin目录下启动Tomcat7w.exe,在Java选项卡下:
Initial memory pool设置tomcat占用内存的默认值
Maximum memory pool设置tomcat占用内存的最大值
- 该选项卡下还可以设置Java虚拟机占用的内存
在Java options下添加
-XX:PermSize=256M //设置默认值
-XX:MaxPermSize=1024M //设置最大值
Java Web项目文件结构
- src 该目录下全部是Java文件
- bean 用于存放Java实体类
- servlet 用于存放servlet
- service 通常将对实体的操作类写在改目录下
- web jsp文件存放在该文件夹下
- WEB-INF 该目录对于客户端来说基本是隐藏的无法被访问
- classes
- lib 存放第三方的jar包
- web.xml 用于配置servlet映射
index.jsp 如果没有专门设置,网站根目录会访问这个jsp文件
- WEB-INF 该目录对于客户端来说基本是隐藏的无法被访问
启动tomcat后llq显示地址为 http://localhost:8089/
,其中8090为tomcat的端口号。此时访问的就是index.jsp页面。
web.xml配置
- web.xml文件的结构:
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
//以上内容没用特殊情况每次书写都相同
<display-name>hello world</display-name>
//起名字
<description>
this is my Helloworld.
//描述信息
</description>
//servlet配置映射在这里面写
</web-app>
- Servlet写好后需要在web.xml中配置映射地址,在其中添加servlet和servlet-mapping标签
<servlet>
<servlet-name>responseservlet</servlet-name>
//这里是页面的名字,需要和servlet-mapping中的一致
<servlet-class>com.westos.servlet.javawebservlet.ResponseServlet</servlet-class>
//这里是Servlet文件在项目中的相对位置
</servlet>
<servlet-mapping>
<servlet-name>responseservlet</servlet-name>
<url-pattern>/responseservlet</url-pattern>
//这里设置的就是映射地址,访问的时候就是通过该地址访问
</servlet-mapping>
- 如果要将所有页面都设置为
utf-8
的编码格式可以在web.xml中添加如下代码,可以有效防止因为编码导致的乱码
<jsp-config>
<jsp-property-group>
<url-pattern>*.html</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
Servlet
- Servlet文件需要放在src下的Servlet包内,包名最好以XXXServlet结尾。
- Servlet文件的命名也需要以XXXServlet结尾
Servlet类继承自HttpServlet,里面包含doPost和doGet两个方法,分别对应HTML表单提交的两种方式,使用哪种提交方式就会执行哪个方法中的代码
为统一编码防止页面出现乱码需要在代码前执行设置编码格式的方法
response.setCharacterEncoding("utf-8");
//设置发送到客户端数据的编码格式
response.setContentType("text/html;charset=utf-8");
//指定发送给客户端的页面为一个纯文本页面,编码格式为utf-8
//如果要传送文件的话就不能设置这一条
request.setCharacterEncoding("utf-8");
//设置客户端编码的格式
Servlet内置方法
init()
使用的时候需要重写,用于初始化Servlet。
destroy()
使用的时候需要重写,用于销毁Servlet。
doGet()
用于处理客户端浏览器直接访问和表单get方式提交的表单。
doPost()
用来处理表单post方式的提交,不能处理客户端浏览器的直接访问。
service()
用于响应客户端的请求。默认情况下,请求都会先经过该方法然后转到doGet()或者doPost()
doHead()
此方法将执行doGet方法,但是仅仅向客户端返回doGet应该向客户端返回的头部内容。
Servlet常用方法
request
获取页面传来的参数信息,本质是一个数据包
String getParameter(String var1)
返回通过客户端表单的name找到对应表单的值,返回值为Stirng类型,如果该值不存在则返回null
getRequestURL()
获取一个完整的URL地址如:http://localhost:8089/city
getRequestURI()
获取相对地址即:/city,是除了http://localhost:8089以后的所有部分
getServletPath()
获取地址的最后一节:/city,如果还有父文件夹会忽略只获取最后一位
getRemoteAddr()
返回ip地址,如果发生不定项则发生0:0:0:0:0:0:0:1
response
定义服务器的响应发送到客户端,本质就是一个普通的html页面,是由服务器动态生成的。
PrintWriter getWriter()
返回可将字符文本发送到客户端的 PrintWriter 对象。
PrintWriter对象再调用print(String s)
,println(String x)
方法就可以向客户端输出html页面。
sendRedirect("/logServlet")
跳转到指定页面,参数中为一个地址
getHeaderNames()
获取所有相应的头文件的集合
session
需要通过request.getsession()来获得
- 每打开一个浏览器,就会创建一个session,并直到页面关闭是一个完整的会话。
- 一个浏览器独占一个session对象
- 当打开第一个jsp页面时,jsp会创建一个session对象,并分配一个id,发送到客户端,放到cookie中,直到关闭浏览器session对象才消失。
- 通常可以用来坐访问统计。
- session对象默认30分钟没有使用服务器就会销毁。
Session和Cookie的主要区别
- Cookie是把客户的数据写客户的浏览器。
- Session是把用户的数据写到用户独占的session中。
- Session对象由服务器创建,服务器可以调用request对象的getSession方法得到session对象。
web.xml中可以配置session的过期时间
<session-config>
<session-timeout>15</session-timeout>//单位分钟
</session-config>
isNew()
判断Session是否是新创建的
request.getSession()
可以创建一个新的Session
invalidate()
手动销毁session
setAttribute(String var1, Object var2)
以键值对的方式存储一个数据,保存于服务端,session过期或者销毁后数据就会丢失。用于存储临时数据。
getAttribute(String var1)
通过键获取值
ServletContext
用于保存所有用户的公共的数据信息,通过getServletContext()来获取ServletContext对象。
ServletContext对象只要服务器不关闭就一直存在并且所有用户共享。
setAttribute(String var1, Object var2)
以键值对的方式存储一个数据,保存于服务端,在ServletContext中应该避免存储大量数据。因为除非服务器关闭不然数据会一直保存在服务器。
getAttribute(String var1)
通过键获取值
removeAttribute(String name)
删除指定的值
ServletConfig
- 代表当前Servlet在web.xml中的配置信息
通过getServletConfig()获取ServletConfig对象
getServletName()
获取当前Servlet在web.xml中配置的名字
getInitParameter(String name)
获取当前Servlet指定名称的初始化参数的值