java

来源:互联网 发布:瓜达尔港 知乎 编辑:程序博客网 时间:2024/06/05 04:50

                                         servlet

web服务器端的编程技术。
是继承了javax.servlet.http.HttpServlet类的Java类。
由支持servlet的web服务器(tomcat)调用和启动运行。
一个servlet负责对应的一个或一组urld的访问请求,并返回相应的响应内容。



C/S:客户机和服务器架构,服务器负荷轻,维护升级成本高。
B/S:浏览器和服务器架构,服务器负荷重,维护升级成本低。
B/S:工作原理:
浏览器--服务器--数据库
通过Url来访问服务器,在浏览器里发送请求(传递参数)给服务器,服务器调用dao类(有参数先接收参数)操作数据库。


servlet创建步骤:
1.创建一个继承类(extends javax.servlet.http.HttpServlet):
2.重写三个方法:
生命周期:访问时开始:init()→service()→destroy()
1).public void init(){
super.init();
}
2).protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
super.service(req, resp);
}
3)public void destroy() {
super.destroy(); 
}
3.给servlet配备一个URL地址,供浏览器访问servlet用。
打开WebRoot/WEB-INF/web.xml文件,添加<servlet>和<servlet-mapping>两个标签
<servlet>
<servlet-name>FirstServlet<servlet-name>
<servlet-class>com.xxx.servlet.web.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/first</url-pattern><!-/first代表localhost:80/项目名称/first>
</servlet-mapping>


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




servlet的三个方法:
init()方法:
默认情况下:第一次访问servlet时被调用(该servlet被初始化),且只能被调用一次。
service()方法:
servlet的主方法,每访问一次就调用一次。
destroy()方法:
在服务器关闭的时候,被调用(该servlet被销毁)


网页参数的接收与返回:(关键代码示例)
接收:HttpServletRequest request
String username = request.getParameter("name");
返回:HttpServletResponse response
PrintWriter out = response.getWriter();
out.print("接收到的名字:"+username+"<br>");
网页的编码集:
接收中文的处理:
req.setCharacterEncoding("UTF-8");(gb2312也可以)
username = new String(username.getBytes("ISO-8859-1"),"UTF-8");

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 Servlet对应的页面什么都没有

out.println(“”把文字输出在浏览器中“”);就是给Servlet对应的页面写源码

out.println(“”把文字输出在浏览器中“”);让源码一行一行的显示

<br>才是实现换行


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


HttpServletRequest接口


                                                     1.getMethod()方法:返回客服端请求方式

                                                     2.getRequestURL()方法:返回端口后参数之前那部分内容,且为真实的资源名而不一定与地址栏中的相同

                                                     3.getQueryString()方法:返回资源路径?号后面的所有内容

                                                     4.getScheme()方法:返回协议名称

                                                     5.getContextPath()方法:返回请求url所属的web应用程序的路径

                                                     6.getRequestURL()方法:返回真实的资源路径,不一定与地址栏中的相同但不包括参数部分,且返回类型StringBuffer



---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

get方法:Service()方法就调用doget()方法

post方法:Service()方法就调用dopost()方法


请求 重定向

代码:

response.sendRedirect(“”/ 项目名字/ 转到的页面“”)

return


“/”表示服务器的根目录(端口号之后)

不加“/”表示当前Sverlet所在目录

因为重定向后还会执行下面的代码,所以让return;来结束该方法


浏览器发出两次请求---即该Servlet和/ 项目名字/ 转到的页面地址

请求重定向是把“/ 项目名字/ 转到的页面”的地址发给浏览器,让浏览器进行第二次请求

所以地址栏是“/ 项目名字/ 转到的页面”的地址


getAttribute跳转






JavaWeb中四大域对象的作用范围


ServletRequest :

                           作用范围是整个一次请求链(包括将此请求转发到的其它页面),也即从客户端发来一次请求开始,到本次服务端响应结束。

                           对应内置对象是request,EL中可用requestScope取得此对象。

                    设置该范围属性的写法是:request.setAttribute(string, Object)。

Session :                 

                          作用范围是一次会话。

                          对应内置对象是session,EL中可用sessionScope取得此对象。

                          设置该范围属性的写法是:session.setAttribute(string, Object)

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


Session的关闭

  1. 如果要立即销毁整个session可以调用invalidate(),其中各对象也全部清除。
  2. session到最大等待时间后,session无效。
  3. 关闭浏览器后,session无效。
  4. 关闭服务器的后,session无效。







ServletContext 

  • 作用范围是整个Web应用。
  • 当Web应用被加载进容器时就会创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。
  • 设置该范围属性的写法是:application.setAttribute(string, Object)。
  • 对应内置对象是application,EL中可用applicationScope取得此对象。

  • PageContext 
    • 作用范围是该JSP页面本身,是最小的一个作用范围。
    • 对应内置对象是pageContext,EL中可用pageScope取得此对象。
    • 设置该范围属性的写法是:pageContext.setAttribute(string, Object)。




Filter

filter翻译为过滤器。在web项目中,经常需要在正式处理请求前,做一些特殊的处理或常用的例程,于是就发明了这个filter。

作用:

  • 过滤非法文字和信息。
  • 设置统一字符编码。
  • 对用户进行登录验证 。
  • 改变图片文件格式。
  • 对相应内容做压缩处理。
  • 对XML的输出使用XSLT来进行转换。

步骤一:

  • 通过在web.xml中的元素和元素来配置filter,以决定用户请求的URL应被哪些filter类来处理一次。

步骤二:编写filter的Servlet类。 
  • 我们的filter类需要实现父接口javax.servlet.Filter。
  • 实现父接口的各个方法。包括init(),doFilter(),destroy(),这3个方法。 
    • init()方法和destroy()方法分别用来初始化和销毁时调用。
    • init()方法在 Filter 生命周期中仅执行一次。服务器启动时就会执行。
    • destory()方法在Filter的生命周期中仅执行一次,即Web容器卸载Filter对象之前调用它。主要做释放资源的操作。
  • 对doFilter(req,resp,chain)方法操作。
  • chain.doFilter(request,response)。



总结:作用范围从小到大依次为:PageContext,ServletRequest,Session,ServletContext。







原创粉丝点击