webapps----project----WEB-INF----classes---com
|----web.xml
<servlet>
<servlet-name>AA</servlet-name>
<servlet-class>com.AA</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AA</servlet-name>
<url-pattern>/Hello.do</url-pattern>
</servlet-mapping>
startup.bat shutdown.bat
catalina.bat start||stop
http://localhost:8888/project/Hello.do
Servlet的生命周期:
初始化,服务,销毁
inti service destroy
在servlet中做什么工作?
1.获取用户提交的数据
2 获取客户端附件的信息
3.处理数据(存储到数据库中,)
4.给用户一个新的响应
5.在响应中添加附加信息。
response.setContentType("text/html;charset=utf-8");
//request.setCharacterEncoding("utf-8");
String str = request.getParameter("key");
String str2 = new String(str.getBytes(),"utf-8");
String[] str = request.getParameterValues("key");
修改server.xml
<connector URIEncoding="utf-8"
String h = request.getHeader("key");
Enumeration e = request.getHeaderNames();
响应:
//设置响应类型
字符型的响应
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html></html>");
response.sendError(500,"fdsafafdsa");
字节型响应
response.setContentType(MIME类型);
OutputStream os = response.getOutputStream();
os.write();
文件的下载:
response.setContentType("bin");
//在响应中添加了附加的信息
response.addHeader("Content-Disposition", "attachment;filename=\""
+ "aa.jpg" + "\"");
Servlet中利用响应完成重定向的工作:
response.sendRedirect(URL);
ServletContext(Servlet上下文对象)
容器提供的对象
1.相对路径转换为绝对路径
String path = "/mp3/1.jpg";
ServletContext ctx = getServletContext();
String realPath = ctx.getRealPath(path);
File file = new File(realPath);
2.可以获取容器的附加信息。
容器名称
容器版本
Servlet规范的版本号
3.全局容器
ServletContext ctx = getServletContext();
User user = new User();
String str = "";
int i=100;
ctx.setAttribute("a1",user);
ctx.setAttribute("a2",str);
ctx.setAttribute("a3",i);
User user = (User)ctx.getAttribute("a1");
ServletContext生命周期,容器启动时自动创建该对象,容器关闭时容器销毁该对象。
做什么工作?
不放业务数据。
系统的配置信息。
数据库的用户名和密码。上传文件的路径。
读取web.xml配置文件中关于servlet初始化参数的方法:
ServletConfig config = getServletConfig();
String value = config.getInitParameter("key");
Cookie和Session:
HTTP协议的特点:无状态和单向性
//创建Cookie对象的key值和value值,只能是英文和数字
Cookie c = new Cookie("key","value");
c.setMaxAge();
response.addCookie(c);
Cookie[] cs = request.getCookies();
for(int i=0;i<cs.length;i++)
{
String key = cs[i].getKey();
if("key".equals(key))
{
cs[i].getValue();
}
}
状态Cookie,持久化Cookie
c.setMaxAge(秒);//持久化Cookie
c.setMaxAge(60*60*24*365);
同一个服务器可以给同一个客户端最大返回30个Cookie(20)
Session的使用:
会话
HttpSession session = request.getSession(不填|true|false);
session.setAttriubte("key",Object obj);
session.setAttribute("key1","fdsafdsa");
session.setAttribute("",user);
User user = (User)session.getAttribute("key");
Session生命周期:
ServletContext(容器启动到关闭)
Session(生命周期是可变,可由设计人员决定其生命周期的时间)
Servlet:
缺点:
显示HTML的时候,麻烦。out.println("<html>");
优点:
Servlet就是一个Java类。编写容器。
调试容易。IDE。
JSP=HTML+Java代码
Java Server Pages(Java服务器端页面)
JSP运行的原理:
1.JSP和Servlet区别:
JSP和Servlet是本质相同的技术。容器负责编译JSP-----Servlet
表现形式。
Servlet---Java类
JSP-------文本(静态资源)
1.JSP以源文件部署到容器中。(Servlet需要编译成class文件后,部署到容器中)
2.JSP部署到容器的根目录下,和静态资源位于相同的目录。(WEB-INF/classes)
3.容器编译JSP的源文件到Servlet class类:有第一个请求访问JSP的时候,容器编译。如果部署到容器中的JSP源文件被修改了,容器会重新的编译JSP到Servlet
4.JSP---Servlet,类名:文件名_jsp.java
5.JSP中的HTML的代码后被JSP引擎放入到Servlet的out.write()函数中。
在JSP中的嵌入Java代码必须放在指定的标记中。
1.JSP的三种原始标签
2.JSP的指令标签
3.JSP的动作标签
4.在JSP2.0规范后,提出EL表达式
5.自动以的标签(JSTL标签库,struts标签库,分页标签库)
JSP中原始的三种标签
<%! %>------声明标签,声明变量和函数(声明的变量是成员变量,函数是和_jspService并列的函数体)
<% %>------脚本标签 编译在_jspService函数体的内部
<%=Java表达式 %>------赋值标签 out.println(add(3,4));
作业1:
以20%概率显示你中奖了!~
作业2:
把背景颜色根据输入的值进行改变用JSP来实现。
JSP的指令标签:
<%@ 标签名 属性=值 属性=值。、。。。 %>
page include
<%@ page language="java"%>
language="java":
import="java.util.*,com.bluedot.User,"
<%@ page import="java.util.*"%>
<%@ page import="com.bluedot.User"%>
pageEncoding="UTF-8"----告诉JSP引擎,在解析我们的JSP的文件的时候用什么编码方式
----
contentType="text/html; charset=utf-8"
response.setContentType("text/html; charset=utf-8");
作业3:
把给客户端产生excel表格的例子改成用JSP来实现。(字符型响应)
<%@ page errorPage="error.jsp"%>
JSP中的内置对象(暗对象):9个
JSP Servlet中的类型
request-------------------------HttpServletRequest
response------------------------HttpServletResponse
application---------------------ServletContext
session-------------------------HttpSession(受指令标签page的session属性控制,默认可以使用)
config--------------------------ServletConfig
out-----------------------------PrintWriter(JspWriter)
exception-----------------------Exception(有条件的出现,当page指令的标签的isErrorPage为true的时候)
page
pageContext