结合登录页面案例总结JavaWeb体系

JavaWeb体系

在这里插入图片描述

登录页面

  • Html:用来描述网页的语言

    • 构成:

      结构 html

      格式 css

      动效 Js

  • Web服务器

用来接收客户端发送的请求和响应客户端的请求

主流,常见的是 Tomcat

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
  1. 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
  1. 对象转换为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));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值