Servlet相关
来源:互联网 发布:重返北上广 知乎 编辑:程序博客网 时间:2024/06/06 08:34
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>
500错误:服务器内部错误。
404错误:找不到网页,网页地址错误。
一个类被修改后要重新启动Tomcat发布。
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");
表单信息的提交与页面对表单信息的获取主要步骤:
1.新建一个jsp网页,绘制一个简单的用户登录表单。
2.新建一个servlet类,在service()方法中进行参数的获取(request)和返回显示(response).(注意该servlet类url地址的注册)
3.通过表单属性actoin提交输入信息到服务器,并转到所创建的servlet类。
4.servlet获取参数,并在网页中显示。
提交网页数据,遍历数据库,返回显示遍历判断结果:
1.新建jsp网页,servlet类。(参考上一个例子)
2.创建操作数据库的类(UserDao)(注意驱动,连接参数等的配置)
3.在UserDao中创建查询的方法。(用户名和密码作为条件,同时满足(and))
String sql = "select * from userInfor where userName = ? and userPassword = ? ";
4.在servlet类中的service方法中获取网页数据。(方法参考上一个例子)
5.通过UserDao user = UserDao.getInstance();
Map<String,String> map = new HashMap<String, String>();
map.put(key,value);分别键入键值对数据(userName和userPassword)启用UserDao中的查询方法遍历数据库。
6.根据查询结果判断用户信息是否存在,在网页中显示判断结果。
404资源未找到;500服务器内部错误;
协议:request.getProtocol()
输出:HTTP/1.1
服务器信息 getServletConfig().getServletContext().getServerInfo()
输出:JavaServer Web Dev Kit/1.0 EA (JSP 1.0; Servlet 2.1; Java 1.2; Windows NT 5.0 x86; java.vendor=Sun Microsystems Inc.)
客户端IP: request.getRemoteAddr()
输出:192.168.0.106
客户端主机名:request.getRemoteHost()
输出:abc
编码:request.getCharacterEncoding()
输出:GB2312
所发送的字节数:request.getContentLength()
输出:-1
数据类型:request.getContentType()
输出:null
Authorization头:request.getAuthType()
输出:basic或者digest
请求类型:request.getMethod()
输出:通常是GET或者POST。但偶尔也会出现HEAD,PUT,Delete,OPTIONS,或者TRACE.
URL中的附加路径信息:request.getPathInfo()
输出:URL中Servlet路径之后、查询字符串之前的那部分。
request.getPathTranslated()
映射到服务器实际路径之后的路径信息。
request.getQueryString()
这是字符串形式的附加到URL后面的查询字符串,数据仍旧是URL编码的。在Servlet中很少需要用到未经解码的数据,一般使用getParameter访问各个参数。
request.getRemoteUser()
如果提供了Authorization头,则代表其用户部分。它代表发出请求的用户的名字。
request.getRequestedSessionId()
输出SessionId
request.getRequestURI()
请求URL
request.getServletPath()
URL中调用Servlet的那一部分,不包含附加路径信息和查询字符串。
request.getHeader("Accept")
访问Accept的HTTP头。
request.getHeader("Host")
输出:192.168.0.1:8080
request.getHeader("Referer")
request.getHeader("Accept-Language")
request.getHeader("Accept-Encoding")
request.getHeader("User-Agent")
request.getHeader("Connection")
request.getHeader("Cookie")
返回协议名称:request.getScheme()
输出:HTTP
Web服务器名字:request.getServerName()
输出:192.168.0.1
服务器监听的端口:request.getServerPort()
输出:8080
原文地址:获取request里的所有参数名及其参数值作者:橡皮擦
request里有两个方法
request.getParameterMap();
request.getParameterNames();
我想用这两种方法获取。
1。用request.getParameterNames();
Enumeration enu=request.getParameterNames();
while(enu.hasMoreElements()){
String paraName=(String)enu.nextElement();
System.out.println(paraName+": "+request.getParameter(paraName));
}
2。request.getParameterMap();
访问URL:http://127.0.0.1:8080/test.jsp?a=1&b=2&c=3
test代码:
Map map=request.getParameterMap();
Set keSet=map.entrySet();
for(Iterator itr=keSet.iterator();itr.hasNext();){
Map.Entry me=(Map.Entry)itr.next();
Object ok=me.getKey();
Object ov=me.getValue();
String[] value=new String[1];
if(ov instanceof String[]){
value=(String[])ov;
}else{
value[0]=ov.toString();
}
for(int k=0;k<value.length;k++){
System.out.println(ok+"="+value[k]);
}
}
在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是:
标记容器是否在启动的时候就加载这个servlet。
当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。
正数的值越小,启动该servlet的优先级越高。
标准Servlet写法:
1.新建一个Servlet
2.写上名字,选择doGet()方法和doPost();
3.点next,给servlet
请求转发(内部跳转):Request.getRequestDispatcher(“/转到的页面”).forware(request,response)不加/表示当前Servlet所在目录,加了表示项目根目录
请求重定向:response.sendRedirect(“/项目名/转到的页面”);
请求域:(Httprequuset
四个方法:
1.void setAttribute(String name,Object obj);
2.Object getAttribute();
3.Void removeAttribute(String name)
4.
2.会话域-session:HttpSession = request.getSession();
作用范围:该次会话期间一直有效
Tomcat默认session有效期:30分钟
session失效:
1.Session.invalidata()执行后,次session无效
2.Session最大等待时间到后
3.关闭浏览器后
4.关闭服务器后
只要浏览器和服务器没有配对的SessionId就表示session无效
浏览器发送一次请求到服务器,服务器首先判断,该请求是否携带一个SessionID值
如果这次请求没有携带一个SessionID值,服务器就知道了,这是第一次来访问该服务器
浏览器与该服务器开始建立会话
服务器会在相应请求的同时,将产生一个SessionID,作为该次会话的标识
再把这个SessionID发给浏览器,浏览器就拥有一个SessionID了
当再次访问该服务器时,浏览器会携带那个SessionID,被传到服务器
服务器首先判断该请求是否携带一个SessionID值,此时有了,代表这不是一个新的会话的请求
如果浏览器两个请求之间的时间太长,超出服务器等待的时间,服务器会删除这个session对象
删除后,再次发送到该服务器,因为服务器里没有这个session对象了,就不能判断请求是否携带SessionID值
也就是说判断不出来,就认为这是一个新的会话开始,又会产生一个SessionID,作为这次新会话的标识
又把这个SessionID发给浏览器,浏览器就拥有一个新的SessionID了
在会话开始时,服务器会自动分配一个空间(session对象),SessionID就在session对象里
Filter:是一个类(过滤器)
创建一个类implements javax.servlet.Filter
- servlet相关
- servlet相关
- servlet相关
- Servlet相关
- Servlet相关
- Servlet相关
- servlet相关
- servlet相关
- Servlet相关
- servlet相关编码设定
- Servlet的相关认识
- Servlet页面跳转相关
- Servlet相关对象
- Servlet相关知识
- servlet的相关东西
- servlet相关知识点
- Servlet相关知识
- Servlet相关概念
- DatePicker 设置最小日期是当前时间报错:java.lang.IllegalArgumentException: fromDate:xxx does not preced toDate: xx
- 2017-07-04(状压DP:POJcorn field 3254)
- Zookeeper的watcher
- C 语言相关函数入门
- android Activity的跳转
- Servlet相关
- 【版本控制】eclipse和svn的搭配使用(检出,分享,冲突的处理)
- 剑指offer——二叉树的下一个结点(好题)
- 人脸识别算法,人证合一的应用
- AsyncTask源码深入分析和巧记线程池
- Android系统架构-AndroidStudio文件架构-1
- Android自定义Span示例
- c++实训单元五-自定义数据类型
- Redis主从复制