JSP/Servlet Web 学习笔记 DayFour
Servlet概述
Servelt是使用Java Servlet应用程序接口及相关类和方法的Java程序。
Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于Java服务器中。
Java Servlet API 定义了Servlet和服务器之间的标准接口,这使得Servlet具有跨服务器平台的特性。
通常,Servlet采用一种无状态的“请求-响应”模型来访问。它能处理客户端传来的Http请求,从中提取参数,处理业务逻辑,最终返回数据或输出HTML。它还可以访问数据库,进行计算,并和Enterprise JavaBean 组件进行通信。
Servlet的运行原理
见之前的JSP运行原理。
Servlet的生命周期
有javax.servlet.Servlet定义。
装载类--->初始化(init())--->服务(service())--->销毁(destroy())
Servlet常见结构
- @WebServlet("/Name")
- public class Servlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- /**
- * @see HttpServlet#HttpServlet()
* init()- */
- public Servlet() {
- super();
- // TODO Auto-generated constructor stub
- }
- /**
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
* 处理get请求- */
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- doPost(request, response);
- }
- /**
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
* 处理post请求- */
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- }
- }
Servlet获取请求中的参数
类似于JSP,采用getParameter()方法,常用的具体如下:
- public String getParameter(String name); //获取指定名称的参数值
- public String[] getParameterValues(String name); //适用于一个参数名对应多个值的情况
- public java.util.Enumeration getParameterNames(); //返回一个包含请求消息中所有参数名的枚举对象。
- public java.util.Map getParamterMap(); //返回所有参数名和对应参数值的map
数据乱码问题:
POST方法:按HTML页面指定的编码进行编码。
在Servelt类的请求处理方法需先调用HttpServletRequest接口的setCharacterEncoding(String enc)方法使数据按参数编码。
通常使用response.setContentType("text/html;charset=utf-8")即可。
GET方法:参数被拼接到URL后面提交。即上述方法已经不起作用。
在发送这些数据前先手工把他们按页面指定的编码方式编码好:java.net.URLEncoder.encode(String s,String enc)方法。然后再发送。
再Servlet类的请求处理方法中再手工解码:java.net.URLDecoder.decode(String s,String enc)方法。
最好的做法是再URL中不要使用中文等非ASCII字符。
重定向 && 请求分派
绝对URL | 以“/”开头的路径,指的是相对于Web应用根目录的路径。 |
相对URL | 不是以“/”开头的路径,指的是相对于当前路径目录的路径。 |
重定向
相关方法: HttpServletRequest接口提供的sendRedirect()
说明:不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一容器中的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
- public void sendRedirect(String location) throws IOException; //location可使用绝对URL和相对URL
注意:重定向会将当前URL改变为定向后的程序的URL,即Get方法不能通过重定向传递给后者。发起者和被调用者使用各自的request和response实例。
工作原理:
请求分派
相关方法: Servlet API中定义了一个RequestDispatcher接口,俗称请求分派器。它定义了如下两个方法:
- public void forward(ServletRequest request,ServletResponse response) throws ServletException, IOException;
- public void include(ServletRequest request,ServletResponse response) throws ServletException, IOException;
说明:获取RequestDispatcher实例的方法有两种
调用ServletContext接口提供的getRequestDispatcher(String url) URL必须为绝对路径
调用ServletRequest接口提供的getRequestDispatcher(String url) URL可以为相对路径,也可以为相对路径
只能将请求转发给同一个Web应用中的其他组件,不能转发到其他站点的资源。
注意:请求转发过程接受后,浏览器保持初始的URL地址不变。并且发起者和被调用者共用一个request和response实例。
工作原理:
另外:因为公用一个request、response实例,则该方法可以利用setAttribute(String name, Oject obj)以及getAttribute(String name)等方法来利用请求域属性传递对象数据。实例如下:
- boolean isError=true;
- request.setAttribute("error", isError);
- request.getRequestDispatcher("servletcom.jsp").forward(request, response);
- boolean a=(boolean)request.getAttribute("error");
- 跳转的另一端直接获取即可
Servlet的调用
1)URL调用:当在配置文件中指定Servlet映射地址后,可直接从浏览器调用Servlet,如:
http://localhost:8080/helloworld
2)JSP文件中调用:可使用<jsp:include>或者<jsp:forward>语句在JSP页面中调用一个Servlet,如:
<jsp:include page="/Servlet" flush="true"/>
页面执行中,当遇到这一句会跳转到响应的Servlet,当Servlet执行结束后控制权又回到原来的JSP页面中。
也可以用<jsp:forward>进行跳转。
JSP/Servlet Web 学习笔记 DayFour的更多相关文章
- JSP/Servlet Web 学习笔记 DayOne
JSP概述 1)JSP是一种动态网页技术标准,它是在传统的页面HTML文件中插入Java程序段和JSP标记(tag),从而形成JSP文件(*.jsp),也称JSP页面. 2)JSP容器是一个支持JSP ...
- JSP/Servlet Web 学习笔记 DayTwo
JSP指令 a)page指令 定义JSP文件中的全局属性.一个JSP页面可以包含多个page指令.除了Import以外,其他page指令定义的属性/值只能出现一次. 其详细语法为: <%page ...
- JSP/Servlet Web 学习笔记 DaySix —— EL表达式
1)EL从scope中得到参数时可以自动转换类型,因此对于类型转换的限制更加宽松. 2)使用EL表达式,可以简化变量和对象的访问. 3)EL表达式必须以 ${XXXX} 来表示. 4)EL提供点(.) ...
- JSP/Servlet Web 学习笔记 DayFive
ServletConfig <只对当前Servlet有效> (1)在Web容器初始化Servlet实例时,都会为这个Servlet准备一个唯一的ServletConfig实例(俗称Serv ...
- JSP/Servlet Web 学习笔记 DayThree
JSP内置对象 使用JSP语法可以存取这些内置对象来执行JSP网页的Servlet环境相互作用.内置对象其实是由特定的Java类所产生的.每一种内置对象都映射到一个特定的Java类或者端口,在服务器运 ...
- JSP/Servlet Web 学习笔记 DayThree —— 实现一个登陆小界面
项目说明 利用JSP.HTML.JS实现了一个简易的登陆系统.根据前两天的所学,实现了如下功能: a)用户名.密码验证(不基于数据库,只做一个简单的表单数据获取并验证) b)页面访问次数统计 c)验证 ...
- [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Java Web学习笔记之---JSP
Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...
- java web 学习笔记 编码问题总结
java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...
随机推荐
- CUDA三维数组
http://hpcbbs.it168.com/forum.php?mod=viewthread&tid=1643 根据上面链接的帖子研究了下三维数组,就像他自己说的一样是有问题的,我自己修改 ...
- 理解golang中的function types
先找个例子来看一下: package main import "fmt" // Greeting function types type Greeting func(name st ...
- LeetCode426.Convert Binary Search Tree to Sorted Doubly Linked List
题目 Convert a BST to a sorted circular doubly-linked list in-place. Think of the left and right point ...
- Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online
网络赛:2017 ACM/ICPC Asia Regional Shenyang Online 题目来源:cable cable cable Problem Description: Connecti ...
- 【学时总结】 ◆学时·IV◆ 数位DP
[学时·IV] 数位DP ■基本策略■ 说白了就是超时和不超时的区别 :) 有一些特别的题与数位有关,但是用一般的枚举算法会超时.这时候就有人提出了--我们可以用动态规划!通过数字前一位和后一位之间的 ...
- python3 井字棋 GUI - 人机对战、机器对战 (threading、tkinter库)
python3 井字棋 GUI - 人机对战.机器对战 功能 GUI界面 人机对战(可选择机器先走) 机器对战(50局) 流程图 内核 棋盘 [0][1][2] [3][4][5] [6][7][8] ...
- LEA指令与MOV指令区别
Tips: LEA指令与MOV指令的区别: ① MOV指令是 数据 传送指令-------传送数据 LEA指令是 有效地址 传送指令-------取偏移地址 ② MOV OPRD1 ...
- TA-LIB】之MACD
移动平滑异同平均线(Moving Average Convergence Divergence,简称MACD指标)策略.MACD是查拉尔·阿佩尔(Geral Appel)于1979年提出的,由一快及一 ...
- C语言字符篇(一)字符串转换函数
#include <stdlib.h> double atof(const char *nptr); 将字符串转换成双精度浮点数 int atoi(const char *npt ...
- python-3高级特征
1-切片 L = ["qinzb",'fengyong','bingyan'] L[0:3] #截取从索引0开始到索引3结束(不包含索引3) L[:3] #如果索引是从0开始则可省 ...