首页 javaWEB servlet编程

servlet编程

方式一(重定向或外部跳): 使用response对象的sendRedirect(“跳转的页面”) response.se…

方式一(重定向或外部跳):

使用response对象的sendRedirect(“跳转的页面”)
response.sendRedirect(“跳转的页面”);

方式二(请求转发或内部跳):

请求转发器:通过request对象的getRequestDispatcher(“跳转的页面”)方法;获取请求转发器对象RequestDispatcher,使用该对象的forward()方法或者include()方法进行转发。

request.getRequestDispatcher(“页面路径”).forward(request,response);

外部跳和内部跳的区别:

内部跳,浏览器的地址栏不会发生改变;外部跳,客户端地址栏发生改变

内部跳,客户端请求一次;外部跳,客户端会重新发送一次新的请求。

内部跳,request中的数据可以传递到下一个页面;外部跳,request中数据会丢失。

乱码出现时期:

请求时 request

应答时 response

通过两个对象的setCharacterEncoding(“编码”)方法进行字符集指定:

request对象的该方法是对请求体中的数据进行编码。所以对post请求有效。而且还要在获取参数前调用该方法。

response对象的该方法对响应数据进行编码。也必须在getWriter之前调用。

如果表单是get方式提交,处理中文时,必须一个一个的处理;

get方式提交,中文会在浏览器的地址栏被编码(ISO-8859-1)

所以处理中文如下:

public void doPost(HttpServletRequest request,HttpServletRespons
e  response){
String name = request.getParamter(“txtname”);//name现在是乱码

//处理get方式的编码
name = new String(name.getBytes(“iso-8859-1”),”gbk”);
}

解决乱码问题中,设置请求内容的字符编码?

reqeust.setCharacterEncoding(“utf-8”);

解决乱码问题中,设置输出内容及字符编码?

response.setContentType(“text/html;charset=utf-8”)

或者

response.setCharacterEncoding(“utf-8”);

什么是会话?

生活中:两个人,一次问答的过程,称为一次会话。

Web程序中:浏览器和服务器(TOMCAT),一次请求和响应的过程,成为会话。

什么是会话跟踪?

在多次会话的过程中,服务器要记录客户端的相关信息。这就叫做会话跟踪。

为什么需要会话跟踪?

因为Web程序使用的HTTP协议进行通信;http协议是一个无状态的协议,不会保留客户端的信息;如果需要让服务器保留客户端相关信息,就必须使用会话跟踪技术。

HttpServletRequest getSession() 方法用于表示创建会话,是会话跟踪的核心对象,在Servlet中获取跟踪对象HttpSession,其语法如下:

HttpServlet session = request.getSession();

或者

HttpServlet session = request.getSession(boolean value);

如果没有与当前请求关联的会话,则 getSession() 方法用于创建会话。

如果布尔值为 true 且当前没有与请求关联的会话,则使用 getSession(boolean value) 创建会话。如果布尔值为 false,如果没有与当前请求关联的会话,返回null

方法名描述

setAttribute(name,value)    将数据存放在session

getAttribute(name)          根据名字从session中获取数据

removeAttribute(name)       根据名字从session中删除指定的数据

getMaxInactiveInterval()    返回session的最大有效时间(单位秒)默认30分钟

setMaxInactiveInterval      (秒数)设置session的最大有效时间(时间值越小性能越高)

invalidate()                使session立即失效(session中的数据被清除);

一般用在退出系统。

URL(统一资源定位) 重写技术将一个唯一的会话 ID 添加到 URL 结尾,以标识该会话。例如,重写以下 URL 传递会话 jsessionid=5EF46DFRD98EFEFHOKH

原始 URLhttp://server:port/servlet/Rewritten

重写的 URL

http://server:port/servlet/Rewritten?jsessionid=5EF46DFRD98EFEFHOKH

注意:当客户端禁用所有Cookie写入时,必须使用URL重写,才能完成会话跟踪

由于Servlet默认是以多线程模式执行的,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值,就会经常出现一些莫名奇妙的问题。

Servlet与线程安全

Public class Security extends HttpServlet {
PrintWriter out = null;
public Security(){super();}
public void destroy(){super.destroy();}
protected void service(……);
out = response.getWriter();
String userName = reqeust.getParameter(“user”);
try{        //为了突出并发问题,让线程睡眠5秒
Thread.sleep(5000);
 }catch(Exception e){
e.printStackTrace();
}
out.print(“<br /> 用户:” + userName);
}
Public void init() throws ServletException {
}
}.


实现SingleThreadModel接口

Public class security extends HttpServlet implements SingleThreadModel {}

 

2、同步对共享数据的操作

Synchronized(this){
Out = response.getWriter();
 try{        //为了突出并发问题,让线程睡眠5秒
Thread.sleep(5000);
 }catch(Exception e){
e.printStackTrace();
}
}

3、避免使用实例变量

Public class security extends HttpServlet implements SingleThreadModel {}

 

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

nodejs 整理记录

nodejs 整理记录

下载包 https://blog.csdn.net/m0_59878114/article/details/120274...
websocket测试html

websocket测试html

<!DOCTYPE html> <html> <head> <meta cha...
bigdemical两个数比较大小

bigdemical两个数比较大小

/*int result = bigdemical1.compareTo(bigdemical2) result = -...
Beetl2.7 中文文档

Beetl2.7 中文文档

Beetl目前版本是2.7.23,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等...
纯CSS实现多个便签在一行展示,拖动滚动

纯CSS实现多个便签在一行展示,拖动滚动

div <h2>请注意需要在移动端预览,PC端拖拽无效果</h2> <div class=...
返回顶部