servlet的请求方式
Html页面中的from表单的请求方式可以是get和post
a标签的请求方式默认是get
Get请求不安全 参数会显示在url中 参数数据量较小
Post请求安全 是将请求的数据存到请求体中
请求如何到参数
使用a标签 herf=“selectStu?name=zs&id=10”
可得到name和id值
Form表单 参数是 内部的input框的值
请求和响应
当发送请求之后 ,服务器会给浏览器做出对应的响应结果,此时会有各种响应结果 100 404 400 500
如果程序发生错误 500 可以使用异常处理,当发生500错误的时候 跳转到一个指定的错误界面。
HttpServletRequest
设置编码
请求的参数
获取请求头信息
HttpServletResponse 响应对象
主要是将servlet获取到的数据显示给浏览器看
查看servlet的class文件
默认响应的文件类型是mime类型中的 text/html
设置编码
响应内容
重定向和请求转发的区别:
重定向是两次请求 url是最后的路径 数据会丢失request
请求转发是一次请求 url是第一次的路径 数据丢失 request
Servlet的四大作用域
作用域的作用:用来保存数据(键值对形式保存)
application、session、request、pageContext
application(ServletContext)
1、生命周期:当Web应用被加载进容器时创建代表整个web应用的application对象,当服务器关闭或Web应用被移除时,application对象跟着销毁。
2、作用范围:整个Web应用。
3、作用:存储公共数据(上下文)
session 域 (HttpSession)
1、生命周期:在第一次调用 request.getSession() 方法时,服务器会检查是否已经有对应的session,如果没有就在内存 中创建一个session并返回。
2、作用范围:一次会话。
3、作用:保存登录的用户信息、购物车信息等
request域 --(HttpServletRequest)
1、生命周期:在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。
2、作用范围:整个请求链(请求转发也存在)。
3、作用: 在整个请求链中共享数据。最常用到:在Servlet 中处理好的数据交给Jsp显示,此时参数就可以放置在Request域中带过去。
pageContext域—(PageContext)
1、生命周期:当对JSP的请求时开始,当响应结束时销毁。
2、作用范围:整个JSP页面,是四大作用域中最小的一个。
3、作用:这个对象代表页面bai上下文,该du对象主要用于访问JSP之间的共享数据。使用zhipageContext可以访问daopage、request、session、application范围的变量。
四大作用域的使用:
Request作用域 :
session 作用域 :
浏览器窗口的一次开启和关闭有效
一次会话的前提是服务器没有重新启动
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String parameter = request.getParameter("name");
HttpSession session = request.getSession();
//判断是否为新用户
if(session.isNew()) {
System.out.println("新用户:"+request.getRemoteHost());
}else {
System.out.println("老用户");
}
//获取创建Session时的时间
long creationTime = session.getCreationTime();
System.out.println("创建Session时间为:"+new Date(creationTime));
//给作用域存值
session.setAttribute("name", parameter);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session = request.getSession();
String attribute =(String)session.getAttribute("name");
System.out.println("名字:"+attribute);
}
Session的默认失效时间是30分钟
一个全新的浏览器来请求一次,就会创建一个新的session ,同一个浏览器关闭的情况下多次请求指挥创建一个session
Application 实际是 ServletContext
在tomcat服务器开启期间都有效
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取application对象
ServletContext application=this.getServletContext();
//给application作用域存值
application.setAttribute("name", "张三");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取application对象
ServletContext application=this.getServletContext();
//通过键name获取值
String attribute = (String)application.getAttribute("name");
System.out.println("获取的值:"+attribute);
}
cookie
Cookie分为两种,属于窗口和子窗口的(未设置生命周期)、属于文本文件的(设置了生命周期)。
使用cookie 来实现 浏览器上保存用户和密码 第二次登录的时候 就自动获取用户名和密码 设置时间
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置编码
request.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//创建cookie
Cookie cookname=new Cookie("username","wangkaile");
Cookie cookwd=new Cookie("passwd","123456");
//设置失效时间
cookname.setMaxAge(60);
cookwd.setMaxAge(60);
//将用户名和密码保存到浏览器中
response.addCookie(cookname);
response.addCookie(cookwd);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置编码
request.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String str;
String[] user=new String[2];
//获取服务中存储的cookie
Cookie[] cookie=request.getCookies();
if(cookie!=null) {
for (int i = 0; i < cookie.length; i++) {
user[i]=cookie[i].getValue();
}
str="<table width=\"300px\" height=\"100px\">\r\n" +
" <form action=\"www.baidu.com\">\r\n" +
" <tr>\r\n" +
" <td>用户名:</td>\r\n" +
" <td><input type=\"text\" value='"+user[0]+"' name=\"name\" required/></td>\r\n" +
" </tr>\r\n" +
" <tr>\r\n" +
" <td>密码:</td>\r\n" +
" <td><input type=\"password\" value='"+user[1]+"' name=\"passwd\" required/></td>\r\n" +
" </tr>\r\n" +
" <tr>\r\n" +
" <td align=\"right\"><input type=\"submit\" value=\"登录\" id=\"yuan\"/></td>\r\n" +
" <td align=\"left\"><button id=\"yuan\"><a href=\"register.html\" >注册</a></button></td>\r\n" +
" </tr> \r\n" +
" </form>\r\n" +
" </table>";
}else {
str="<table width=\"300px\" height=\"100px\">\r\n" +
" <form action=\"Login\">\r\n" +
" <tr>\r\n" +
" <td>用户名:</td>\r\n" +
" <td><input type=\"text\" name=\"name\" required/></td>\r\n" +
" </tr>\r\n" +
" <tr>\r\n" +
" <td>密码:</td>\r\n" +
" <td><input type=\"password\" name=\"passwd\" required/></td>\r\n" +
" </tr>\r\n" +
" <tr>\r\n" +
" <td align=\"right\"><input type=\"submit\" value=\"登录\" id=\"yuan\"/></td>\r\n" +
" <td align=\"left\"><button id=\"yuan\"><a href=\"register.html\" >注册</a></button></td>\r\n" +
" </tr> \r\n" +
" </form>\r\n" +
" </table>";
}
PrintWriter pw = response.getWriter();
pw.write(str);
}
Javaweb项目的三层架构
web项目的打包和部署
将eclipse写的Javaweb项目,放到tomcat中进行部署(启动)
步骤:
将Javaweb项目使用eclipse打包为war
将warbao放到tomcat的webapps下 就可以了
启动tomcat 会自动将war进行解压为一个新项目
切记:不可以将eclipse中的web项目直接拷贝到tomcat的webapps下启动
总结:
Javaweb项目:B/s架构的web应用程序 Cs bs Servlet :
作用在服务器端的java应用程序 Tomcat的servletapi.jarServlet 的作用: 获取请求 响应数据 Servlet的创建: 继承 httpservlet
、genericservlet 类 实现 servlet 接口 Servlet的工作流程:
浏览器发送请求 ------Tomcat容器 -------url 找servlet (实例化 初始化 执行(业务层、dao))-------响应给浏览器htm---------销毁 Servlet的生命周期 : 实例化 构造方法
初始化 init 执行 service doget dopost 销毁 destory Servlet的四个作用域:
作用域对象的作用是什么? 以键值对的形式保存数据的
Page request session application Servlet的web程序的编写顺序 :
Jdk、编码、Tomcat ------创建web项目-----创建servlet-----配置servlet(注解、容器)-----service ------dao 一个请求对应一个servlet Servlet此时既当爹又当妈 service的调用 html数据的显示
Servlet响应数据到浏览器的时候:设置编码 设置响应文件的类型 MIME MIME类型如果浏览器能够直接显示
就显示,否则下载 Javaweb项目的打包和部署
War 包 到Tomcat的webapps下 ,启动 自动解压为项目