JavaWeb体系
登录页面
-
Html:用来描述网页的语言
-
构成:
结构 html
格式 css
动效 Js
-
-
Web服务器
用来接收客户端发送的请求和响应客户端的请求
主流,常见的是 Tomcat
1.登录功能LoginServlet
1.Servlet
是Sun公司制定的一套技术标准,包含与Web应用相关的 一系列接口,是Web应用实现的方式。具体的Servlet容器负责提供标准的实现,创建Servlet实例对象。
规则:通过继承HttpServlet来完成Servlet的开发
public class LoginServlet extends HttpServlet{
}
方法
- doGet:处理get请求的方法
@Override
//抛出异常
protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
super.doGet(req,resp);
}
- doPost:处理post请求的方法
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
在web.xml中的配置
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.ruhig.ajax.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
获取请求参数值HttpServletRequest
该接口的父接口是ServletRequest,HttpServletRequest封装了Http请求的相关信息,由Servlet容器创建HttpServletRequest的实现类对象并传入Servic(ServletRequest req, ServletResponse res)方法中。
-
HttpServletRequest对象的主要功能
获取请求参数、在请求域中绑定数据、将请求转发给另一个url地址
响应结果HttpServletResonse
该接口的父接口是ServletResponse,HttpServletResonse封装了Http响应的相关信息,由Servlet头·容器创建HttpServletResonse实现类对象并传入Service(ServletRequest req, ServletResponse res)方法中。
-
HttpServletResonse对象的主要功能
使用PrintWriter对象向浏览器输出数据、实现请求的重定向
2.Service
实际开发中,重写doGet,doPost或Service方法处理请求
登录的具体实现
1.在登录页面中输入用户名和密码,点击登录按钮提交登录请求;
2.在LoginServlet中通过request对象获取到页面表单提交的用户名和密码;
3.调用Dao对象,将用户提交的用户名和密码与数据库的用户表的数据进行匹配;
4.得出结果,完成响应;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.atguigu.login.beans.User;
import com.atguigu.login.dao.UserDao;
import com.atguigu.login.dao.UserDaoImpl;
/*
* 处理登录请求的Servlet
*
* Servlet是sun公司制定的标准。Tomcat(web应用服务器、Servlet容器)实现了这些标准。
*
* HttpServlet
*/
public class LoginServlet extends HttpServlet{
/**
* 常用的方法:doGet doPost service
*
* 第一种方法 重写
* doGet:处理客户端的get方式的请求
* doPost:处理客户端的post方式的请求
*
* 第二种方法 重写
* service:根据具体的请求方法去调用对应的doGet、doPost方法
*
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//登录功能的实现。
System.out.println("登录请求来了~~~~~~~~~~~");
//获取到用户输入的用户名的密码,进行登录业务的处理
/*
* HttpServletRequest: 请求对象。Servlet容器会在请求到达后,创建出一个request对象,将
* Http请求相关的信息全部都封装到该对象中。
*/
//获取用户输入的用户名和密码
String username = req.getParameter("username");
String password = req.getParameter("password");
//调用Dao对象,将用户提交的用户名和密码与数据库的用户表的数据进行匹配
UserDao dao = new UserDaoJdbcImpl();
User user = dao.findUserByUsernameAndPassword(username, password);
//设置响应头信息
resp.setContentType("text/html;charset=utf-8");
//获取输出流
PrintWriter out = resp.getWriter();
if(user == null ) {
//登录失败
out.println("登录失败!!!!");
}else {
//登录成功
out.println("登录成功!!!!");
}
out.close();
2.登录页面中提示错误
1.请求重定向redirect
Servlet接收到浏览器端请求并处理完成后,给浏览器端一个特殊的响应,这个特殊的响应要求浏览器去请求一个新的资源,整个过程中浏览器端会发出两次请求,且浏览器地址栏会改变为新资源的地址。
- 实现重定向的API
reponse.sendRedirect("重定向的地址");
2.请求转发
Servlet接收到浏览器端请求后,进行一定的处理,先不进行响应,而是在服务器端内部“转发”给其他Servlet程序继续处理。在这种情况下浏览器端只发出了一次请求,浏览器地址栏不会发生变化,用户也感知不到请求被转发了。
转发请求的Servlet和目标Servlet共享同一个request对象。
- 实现转发的API
RequestDispatcher rd=request.gstRequestDispatcher("转发的地址");
rd.foward(request,response);
重定向和转发的区别
重定向 | 转发 | |
---|---|---|
发送请求次数 | × | √ |
浏览器地址 | 变 | 不变 |
共享request对象数据 | × | √ |
访问目标资源 | × | √ |
传递Request中绑定的数据 | × | √ |
3.jsp页面
是一个动态网页技术标准,其构成有HTML,Java,Jsp。是运行在java服务器中的页面,也就是JavaWeb中的动态页面,本质是Servlet。
相比于Servlet,JSP更加善于处理显示页面,而Servlet跟擅长处理业务逻辑,两种技术各有专长,所以一般我们会将Servlet和JSP结合使用,Servlet负责业务,JSP负责显示。Servlet处理完的数据,转发到Jsp,Jsp负责数据的的展示。
4.EL表达式
- EL是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。
- EL表达式用于代替JSP表达式(<%= %>)在页面中做输出操作。仅仅用来读取数据,而不能对数据进行修改。
5.Js简单应用
3.注册功能:Ajax异步的表单校验
Ajax:不发生页面跳转、异步载入内容并改写页面内容的技术。
-
异步请求对象:XMLHttpRequest对象用来封装请求报文,我们向服务器发送的请求信息全部都需要封装到该对象中。
1.Xhr对象的获取:
<script type="text/javascript"> //获取XMLHttpRequest的通用方法 function getXMLHttpRequest(){ var xhr; try{ xhr=new XMLHttpRequest(); }catch(e){ try{ xhr=new ActiveXObject("Msxml2.XMLHTTP"); }catch (e) { xhr=new ActiveXObject("Microsoft.XMLHTTP"); } } return xhr; }
2.发送异步请求Get
//获取xhr对象 var xhr=getXMLHttpRequest(); //设置请求信息 xhr.open("get","AjaxServlet?&t="+Math.random(),true); //发送请求 xhr.send(); //监听请求状态 xhr.onreadystatechange=function (){ //当响应完成 if (xhr.readyState ==4){ //且状态码为200时 if (xhr.status ==200){ //接收响应信息(文本形式) var text=xhr.responseText; //弹出消息 alert(text); } }; };
3.发送异步请求Post
//获取xhr对象 var xhr=getXMLHttpRequest(); //设置请求信息 xhr.open("post","2.jsp",true); //设置请求头 xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //发送请求 xhr.send("hello=111111"); //监听请求状态 xhr.onreadystatechange=function (){ //当响应完成时 if (xhr.readyState==4){ //且状态码为200时 if (xhr.status==200){ var text=xhr.responseText; //弹出消息 alert(text); } };
使用Jquery、Vue等框架来发送异步请求
- 以Jquery举例
//用户名进行异步校验
$(function() {
$("#username").blur(function (){
var value=$(this).val();
alert(value);
$.ajax({
url:"checkusername",
type:"POST",
data:"username="+value,
success:function (data){
$("username_msg").html(data);
}
});
});
});
4. 登录成功后跳转主页面
1.Cookie
服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求。
-
缺点
1.Cookie作为请求或响应报文发送,无形中增加了网络流量。
2.Cookie是明文传送的安全性差。
3.各个浏览器对Cookie有限制,使用上有局限
如果Cookie很多,则无形的增加了客户端与服务端的数据传输量。而且由于浏览器对Cookie数量的限制,注定我们不能再Cookie中保存过多的信息,于是Session出现。
2.Session会话
-
作用
在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie,这个JSESSIONID对应这个服务器中的一个Session对象,通过它就可以获取到保存用户信息的Session。
-
工作原理
1.创建时机是在request.getSession()方法第一次被调用时; 2.Session被创建后,同时会有一个名为JSESSIONID的Cookie被创建; 3.这个Cookie的默认时效是当前会话; 4.总之,Session机制也是依赖于Cookie来实现的。
3.URL重写
将JSESSIONID的值以固定格式附着在URL地址后面,以实现保持JSESSIONID,进而保持会话状态。这个固定格式是:URL;jsessionid=xxxxxxxxx
5.主页面访问权限控制
Fliter
过滤器是一个驻留在服务器中的WEB组件,可以截取客户端和WEB资源之间的请求和响应信息。
当服务器收到特定的请求后,会先将请求交给过滤器,程序员可以在过滤器中对请求信息进行读取修改等操作,然后将请求信息再发送给目标资源。目标资源作出响应后,服务器会再次将响应转交给过滤器,在过滤器中同样可以对响应信息做一些操作,然后再将响应发送给服务器。
6.在线统计人数
Listener
监听JavaWeb程序中的事件
7.xml
以一个统一的格式,组织有关系的数据,为不同平台下的应用程序服务
解析
通过解析器读取XML文档,解释语法,并将文档转化成对象
//1.创建解析器对象
SAXReader saxReader = new SAXReader();
//2.解析xml文件获取document对象
Document document = saxReader.read("students.xml");
//3.得到根元素
Element root = document.getRootElement();
解析方式及其对比
8.Json
是一种数据交换格式。JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言中进行传递,通过工具又可以转换为其他语言中的对象。
1.在JS中操作JSON
//创建JSON对象
var json = {“name1”:”value1”,”name2”:”value2” , “name3”:[1,”str”,true]};
var json = [{“name1”:”value1”},{“name2”:”value2”}];
//JSON对象转换为JSON字符串
JSON.stringify(JSON对象)
// JSON字符串转换为JSON对象
JSON.parse(JSON字符串)
2.在Java中操作JSON
- JSON字符串转换成一个Java对象。
- 导入第三方的工具,目前主流的解析JSON的工具大概有三种json-lib、jackson、gson。三种解析工具相比较json-lib的使用复杂,且效率较差。而Jackson和gson解析效率较高。使用简单,这里我们以gson为例讲解
//JSON字符串转换为对象
String json = "{\"name\":\"张三\",\"age\":18}";
Gson gson = new Gson();
//转换为集合
Map<String,Object> stuMap = gson.fromJson(json, Map.class);
//如果编写了相应的类也可以转换为指定对象
Student fromJson = gson.fromJson(json, Student.class);
123456
- 对象转换为JSON字符串
Student stu = new Student("李四", 23);
Gson gson = new Gson();
//{"name":"李四","age":23}
String json = gson.toJson(stu);
Map<String , Object> map = new HashMap<String, Object>();
map.put("name", "孙悟空");
map.put("age", 30);
//{"age":30,"name":"孙悟空"}
String json2 = gson.toJson(map);
List<Student> list = new ArrayList<Student>();
list.add(new Student("八戒", 18));
list.add(new Student("沙僧", 28));
list.add(new Student("唐僧", 38));
//[{"name":"八戒","age":18},{"name":"沙僧","age":28},
{"name":"唐僧","age":38}]
String json3 = gson.toJson(list);
// 如果将一个数组格式的json字符串转换成java对象需要用到
//Gson提供的一个匿名内部类: TypeToken
TypeToken tk= new TypeToken<List<User>>(){};
List<User> list2 = gson.fromJson(json,tk.getType());
System.out.println(list2.get(0));