Servlet基础精华知识和经典实例

Servlet知识

动态网页

以数据库技术为基础,不是独立存在于服务器上的网页文件


Servlet
Servlet是一种Web服务器端编程技术
Servlet是继承与javax.servlet.http.HttpServlet类的java类;
Servlet有支持Servlet的Web服务器(Tomcat)调用和启动运行
一个Servlet负责对应的一个或一组URL访问请求,并返回响应的内容


B/S和C/S
C/S:client/server:客户机和服务器架构

B/S:Browser/Server:浏览器和服务器架构

C/S和B/S架构比较
C/S:服务器负荷轻,维护升级成本高
B/S:服务器负荷重,维护升级成本低


B/S:工作原理
浏览器--服务器--数据库
在浏览器里吧请求发给服务器(有传递参数,也是服务器接收),在服务器里调用dao类(有参数先接收参数)来,操作数据库


浏览器通过URL来访问服务器
Servlet是一种类



写Servlet的步骤:
1.创建一个类 extends javax.servlet.http.HttpServlet
2.重写三个方法:
public void init() throws ServletException
protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
public void destroy()

3.给Servlet配置一个URL地址,供浏览器访问Servlet用
打开WebRoot/WEB-INF/Web.xml文件:添加<Servlet>标签和<servlet-mapping>标签




<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.yy.servlet.web.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/first</url-pattern>

</servlet-mapping>

详细说明:

Servlet基础精华知识和经典实例



Servlet的init()方法

默认情况下:当第一次访问该Servlet是,被调用(该Servlet被初始化),且只被调用一次

Servlet的Service()方法

Servlet的主方法:每访问一次就被调用一次

Servlet的destroy()方法


Servlet对应的页面什么都没有
out.println("把文字输出到浏览器中"):就是给Servlet对应的页面写代码
out.println("把文字输出到浏览器中"):让代码一行一行的显示
<br>实现换行





改变Servlet初始化时间
服务器启动时自动初始化:
在该Servlet配置时,在<Servlet>标签中添加<load-on-startup>5</load-on-startup>
Servlet基础精华知识和经典实例



HttpServletResponse接口
获取请求的基本信息:
1.getMethod():返回客户端请求方式
2.getRequest():返回端口后参数之前那部分内容,且为真实的资源名,而不一定与地址栏中相同
3.getQueryString():返回资源路径?号后面的所有内容
4.getScheme():返回协议名称
5.getContextPath():返回请求URL所属的web应用程序的路径
6.getRequestURL():返回真实的资源路径,不一定与地址栏相同,但不包括参数部分,且返回类型StringBuffer


获取网络连接信息:
1.request.getRemoteAddr()返回客户端的ip地址
2.request.getRemotePort()返回客户端发出请求使用的端口
3.request.getLocalAddr()返回服务器上接收当前请求的网络接口的ip地址
4.request.getLocalPort()返回服务器上接收当前请求的网络接口的端口号




return是一个方法的结束


HttpServletResponse接口
封装了服务器会送给客户端的响应信息,通过它来操作返回个客户端的响应信息
HttpServletResponse对象是servlet程序和Servlet引擎进行通信的接口
Servlet程序通过HttpServletResponse对象将响应正文传递给Servlet引擎
再由Servlet引擎将响应正文输出到客户端




标准Servlet的写法:
1.新建一个Servlet
2.写上名字:这样doGet()方法和doPost()方法
3.点next,给Servlet配上在web.xml文件中的名字和URL,点finish会在web.xml文件中,自动配置Servlet


不需要Servlet()方法
实际上Service()方法就是先判断,请求的方式
get方式:Service()方法就是调用doGet()方法
post方式:Service()方法就调用doPost()方法


请求转发———服务器内部跳转(本项目中跳转)

代码:
request.getRequestDispatcher("/跳转的页面").forward(request,response);
return;
'/'表示项目的根目录
不加‘/’表示Servlet所在目录
因为转发后还会执行下面的代码,所以让return来结束方法


浏览器只发出一次请求--即该Servlet
请求转发是把"/转到的页面"的源码,复制给该Servlet所对应的页面
所以地址栏是该Servlet的地址

请求重定向

代码:
response.sendRedirect("/项目名/转到的页面")
return;
'/'表示服务器的根目录(端口号之后)
因为重定向后还会执行下面的代码,所有让return;来结束该方法

浏览器发出两次请求---即该Servlet和"/项目名/转到的页面"地址(自动发出该次请求)
请求重定向是把"/项目名/转到的页面"的 地址发给浏览器,让浏览器进行第二次请求
所以地址栏是"/项目名/转到的页面"的地址

请求转发只能跳到本项目中的路径
请求重定向可以跳到任意的路径


Servlet经典实例

输入username用户名、password密码进行登录注册(在数据库中)

方法一:

先建立一个login.jsp

Servlet基础精华知识和经典实例

2.在创建两个类

Servlet基础精华知识和经典实例

Servlet基础精华知识和经典实例

效果如下:

Servlet基础精华知识和经典实例


Servlet基础精华知识和经典实例




Servlet基础精华知识和经典实例



作用域——请求域(HttpServletRequest request)
作用范围:只在一次请求中有效


四个方法:
void setAttribute(String name,Object obj)
Object getAttribute(String name)
void removeAttribute(String name)
Enumeration getAttributeNames():返回request域中所有属性名的枚举


作用域——会话域(HttpSession session)
获得Session的代码
HttpSession session = request.getSession();
在jsp页面中可以直接用session,而不必用request.getSession()得到
会话:一个浏览器和服务器之后间发生的一系列的请求和响应的过程
用SessionID来标识同一个会话的请求
用Session对象来保存该会话的状态信息
服务器决定于某个客户端开启一个会话,创建一个Session对象
通过Cook或者URL参数形式将SessionID给客户端
例子:

1.Servlet基础精华知识和经典实例

2.

Servlet基础精华知识和经典实例


3.

Servlet基础精华知识和经典实例
4.运行如下

.Servlet基础精华知识和经典实例

Servlet基础精华知识和经典实例

Servlet基础精华知识和经典实例

Servlet基础精华知识和经典实例

Servlet基础精华知识和经典实例

Session对象


作用范围:该次会话期间一直有效(浏览器,客户端未关闭)
Tomcat默认Session有效期:30分钟
在tomcat/conf/web.xml文件中
<session-config>
        <session-timeout>30</session-timeout>
</session-config>



使session无效的方法:
1.session.invalidate()执行后,session无效
2.session的最大等待时间到后,session无效
3.关闭浏览器后,session无效
4.关闭服务器后,session无效
只要浏览器与服务器没有配对的SessionID就表示session无效


浏览器与服务器


浏览器发送一次请求到服务器,服务器首先判断,该请求是否携带一个SessionID值
如果这次请求没有携带一个SessionID值,服务器就知道了,这是第一次来访问该服务器
浏览器与该服务器开始建立会话
服务器会在相应请求的同时,将产生一个SessionID,作为该次会话的标识
再把这个SessionID发给浏览器,浏览器就拥有一个SessionID了
当再次访问该服务器时,浏览器会携带那个SessionID,被传到服务器
服务器首先判断该请求是否携带一个SessionID值,此时有了,代表这不是一个新的会话的请求
如果浏览器两个请求之间的时间太长,超出服务器等待的时间,服务器会删除这个session对象
删除后,再次发送到该服务器,因为服务器里没有这个session对象了,就不能判断请求是否携带SessionID值
也就是说判断不出来,就认为这是一个新的会话开始,又会产生一个SessionID,作为这次新会话的标识
又把这个SessionID发给浏览器,浏览器就拥有一个新的SessionID了
在会话开始时,服务器会自动分配一个空间(session对象),SessionID就在session对象里


javax.servlet.ServletConfig接口
一般用于处理Servlet在配置文件中初始化参数


获得ServletConfig对象的代码:
ServletConfig config = this.getServletConfig();


常用方法:
getInitParameter(String name):返回名字为name的参数的值
String getServletName():返回该Servlet在配置文件中的名字
Enumeration getInitParameterNames():返回所有参数的名字的一个枚举
getServletContext()


javax.servlet.ServletContext接口


一个web应用程序中所有的Servlet都共享同一个ServletContext对象,所以该对象被称之为application对象
ServletContext对象WebRoot/WEB-INF/web.xml文件中的<context-param>标签
获得ServletContext对象的代码:
ServletContext application  = this.getServletContext();
常用方法:
getInitParameter(String name)返回名字为name的参数的值
Enumeration getInitParameterNames():返回所有参数的名字的一个枚举
getRealPath(String str):用于获取文件本地绝对路径(可以先获取一个xml文件路径,再去读)

过滤器(Filter)是一种类
实现了javax.servlet.Filter接口
Filter的步骤:
1.创建一个类:import javax.servlet..Filter
2.自动产生三个方法:
public void init(FilterConfig arg0) throws ServletException
public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException
public void destroy()
3.在WebRoot/WEB-INF/web.xml文件中配置Filter


JSP页面实际上时Servlet
JSP页面可以写Java代码