j2ee上机任务汇总

j2ee上机任务汇总,第1张

前言:

这里主要是自己大二的学校课程下的上机任务[下]!
本篇也是比较草草了事, 感谢你的阅读, 看看就好!

war包: 第17个war包:

补充知识war和exploded的小坑

  1. war模式:将WEB工程以包的形式上传到服务器 ;对于本地,就是把war包上传到了tomcat的文件目录下面
  2. war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;对于本地,就是把war上传到了idea自己的Tomcat目录下了

实验要求:

<pre>
0 在项目启动和运行时,注意观察生命周期方法的初始化方法的运行结果
	0.1 过滤器的初始化
	0.2 控制器的初始化
	0.3运行过程中的监听器输出
自行完成相应的动作和思考
读完程序中的文档,即注释,如果有相关问题,则直接回答问题。

	
1 本例中的javabean在哪里完成定义的?在哪里用到了?
	1.1这个javabean写得规范吗?
	1.2javabean有哪些规范?
	1.3请自行将该bean改造成规范的javabean
2 过滤器链如何配置?
3 监听器如何实现相应的监听动作?
4 用户会话如何设置过期时间?
5 服务器上,在控制器,即Servlet中实现包含和转发是如何实现的?客户端知道吗?
6 响应对象如何实现让客户端重定向,再发请求?
7 对于过滤器和控制器的配置,web.xml方式和注解方式,应该如何实现,应该如何选择?
8 检测用户登录的过滤器如何实现用户对目录访问的拦截??
9 本例中,如何检验Servlet的转发和包含动作?
	9.1请求/ForwardServlet
	9.2请求/IncludeServlet
10 思考,如何去观察监听器的方法动作的完成?自行尝试一下呢?

n 此例有待进一步读解和完善-----

pre>

1 本例中的javabean在哪里完成定义的?在哪里用到了?
1.1这个javabean写得规范吗?不规范!
1.2javabean有哪些规范?没实现 Serializable接口!,没有getter,setter方法,
1.3请自行将该bean改造成规范的javabean

[java bean浅析 | 小小的博客乐园 (ladfeng.top)](https://ladfeng.top/2022/04/01/java bean/)

改造后:

package com.feng.bean;

import java.io.Serializable;

/**
 * @author ladidol
 *  这是一个javabean,用于数据封装 
 * 
  • 思考下:它的规范是什么? */ public class User implements Serializable { private String name = null; private String pass = null; public User(String name,String pass) { this.name = name; this.pass = pass; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", pass='" + pass + '\'' + '}'; } /*有了有参构造函数后, 就会把无参给覆盖掉, 所以需要再建一个*/ public User() { } }
  • 2 过滤器链如何配置?

      
      <filter>
        <filter-name>FilterChina01filter-name>
        <filter-class>cn.edu.cuit.filterChain.FilterChain01filter-class>
      filter>
      <filter-mapping>
        <filter-name>FilterChina01filter-name>
        <url-pattern>/ServletForFilterChainurl-pattern>
      filter-mapping>
      <filter>
        <filter-name>FilterChina02filter-name>
        <filter-class>cn.edu.cuit.filterChain.FilterChain02filter-class>
      filter>
      <filter-mapping>
        <filter-name>FilterChina02filter-name>
        <url-pattern>/ServletForFilterChainurl-pattern>
      filter-mapping>
    

    不难发现:想要形成过滤链,对多个过滤器都包含的同一个请求,按web.xml中文件的配置顺序执行filter

    先访问下:

    http://localhost:8080/17/ServletForFilterChain
    

    出现乱码一般解决方案:

    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=utf-8");
    

    为了监听器listener能运行起:

    web.xml配置一下:

    
    <listener>
        <listener-class>com.feng.listener.OnLineCountListenerlistener-class>
    listener>
    

    这个项目主要访问一下这个请求:

    启动项目直接访问下面url:

    http://localhost:8080/17/listener/login.jsp
    

    同时修改提交url为../servlet/LoginAllServlet

    登录三个人;

    重复登录:

    	/**
    	 * 
  • 控制器核心动作 */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 中文乱码处理 request.setCharacterEncoding("utf-8"); // 在项目启动第一次时创建,该项目只创建一次,唯一的,获取上下文对象 context = this.getServletContext(); boolean flag = false; // 用户登录标志 String url="../listener/login.jsp"; // 获取用户参数 String username=request.getParameter("username"); //获取用户列表,第一次获取时候为空,直接从上下文对象中获取 users =(ArrayList<String>)context.getAttribute("users"); //第一个用户登录时,列表肯定为空 if(users.isEmpty()){ users = new ArrayList<String>(); // 初始化列表 users.add(username); // 添加一个用户到列表中 // 以下动作将触发监听动作 context.setAttribute("users", users); // 将第一个用户的名字保存到ServletContext对象中 System.out.println("--------第一个用户登录------"); //非第一个用户登录 }else{ // 遍历,看是否已经存在该用户 for(String user : users){ //如果该用户已经登录,请求error.jsp不让其再登录 if(username.equals(user)){ url = "../listener/error.jsp"; System.out.println("--------该用户重复登录------"); flag = true; break; } } if (!flag) { // 用户已经存在,标识未登录 //如果该用户没登录,就将该用户的名字保存到ServletContext对象中 System.out.println("--------非重复登录------"); users.add(username); } } // 在控制台输出已经登录的用户 int i = 0; for (String user : users) { System.out.println("==========" + i+1+" : " + user +"=========="); i++; } // 响应对象完成重定向,这个动作会让客户端再次发请求来完成 response.sendRedirect(url); }
  • 为了保证将多次登录的user信息保存, 并于下次访问是有用户列表展示, 就必须把用户存在servletcontext上下文中

    private ServletContext context  =null;  // 上下文对象
    

    给每个用户的对话session给设置过期时间:

    web中配置的一分钟

      <session-config>
        
        <session-timeout>1session-timeout>
      session-config>
    

    一分钟后, Session就会销毁:

    如果要创建多个Session, 可以多开几个浏览器窗口访问这个登录url

    session的创建和销毁

    走一下转发:

    RequestDispatcher接口所定义的forward()方法可以将HTTP请求转送给其他Web资源(例如Servlet、JSP或HTML)进行处理,并产生HTTP回应。

    这里有include和forward的区别:

    forward方法是把请求的内容转发到另外的一个servlet/jsp.
    include是把另一个servlet/jsp处理过后的内容拿过来与此时servlet的内容一同输出.

    (13条消息) 请求转发的forward , include 的区别 _yukunzgp的博客-CSDN博客

    转发

    <%@include file="需要访问的jsp文件.jsp" %>
    <%@forward file="需要访问的jsp文件.jsp" %>
    
    http://localhost:8080/17/myInclude.jsp
    http://localhost:8080/17/myForward.jsp
    

    emm不知道为啥这个el的隐藏对象:${sessionScope.Include }${sessionScope.Forward }获取不出来

    好兄弟救命!!!

    监听器:

    package com.feng.listener;
    
    import com.feng.bean.User;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpSessionAttributeListener;
    import javax.servlet.http.HttpSessionBindingEvent;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    /**
     * @author fhzheng
     *  监听器实现如下监听 
     * 
  • 1.ServletContextListener 上下文变更监听器 *
  • 2.HttpSessionListener 会话变更监听器 *
  • 3.HttpSessionAttributeListener 会话属性变更监听器 *
  • 4.当相应的对象发生变更时,就触发监听事件 * */ public class OnLineCountListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener { private ServletContext application = null; // 上下文对象 private ArrayList<String> users = null; // 用户列表 private HttpSession session = null; // 用户会话对象 private String user = null; /** *
  • 上下文的初始化 */ public void contextInitialized(ServletContextEvent sce) { this.application = sce.getServletContext(); this.application.setAttribute("users", new ArrayList<String>()); // List users = (List) this.application.getAttribute("users"); System.out.println("监听器日志:/t监听器完成上下文对象的获取"); System.out.println("监听器日志:/t监听器完成用户列表的初始化"); } /** *
  • 上下文的销毁 */ public void contextDestroyed(ServletContextEvent sce) { } /** *
  • session的创建 */ public void sessionCreated(HttpSessionEvent se) { session.setMaxInactiveInterval(5); System.out.println("监听器日志:/t一个Session创建了!"); } /** *
  • session的销毁 */ public void sessionDestroyed(HttpSessionEvent se) { session = se.getSession(); user = (String) session.getAttribute("username"); users = (ArrayList<String>) session.getServletContext().getAttribute("users"); for (String u : users) { if (u.equals(user)) { users.remove(u); break; } } session.invalidate(); System.out.println("监听器日志:/t一个Session被销毁掉了!"); } /** *
  • 属性的添加 */ public void attributeAdded(HttpSessionBindingEvent se) { users = (ArrayList<String>) application.getAttribute("users"); users.add(se.getValue().toString()); this.application.setAttribute("users", users); System.out.println("监听器日志:/t一个属性添加完成了"); } /** *
  • 属性的移除 */ public void attributeRemoved(HttpSessionBindingEvent se) { System.out.println("属性有移除"); } /** *
  • 属性的替换【更新】 */ public void attributeReplaced(HttpSessionBindingEvent se) { System.out.println("属性有更新"); } }
  • emmm就先随便讲到这里吧!

    第18个war包:

    实验要求:

    emm大部分是jsp, 看看就行!主要最近没精力再学jsp了, 就可能草率一些了大部分都可以google到的

    <pre>
    0请问,JSP页中的HTML代码,注释,脚本,表达式,定义分别是什么?它们的标志是什么?
    自行完成相应的动作和思考
    读完程序中的文档,即注释,如果有相关问题,则直接回答问题。
    	1 思考,JSP中的中文乱码是如何产生的,应该如何避免这类问题?
    	2 在JSP页中,如何使用javabean?
    	3 在JSP页中,如何实现类似于servlet中的转发和包含?forward和include
    	4 在JSP页中,向用户显示结果时,如何实现换行 *** 作?
    	5 在JSP页中,pageContext对象有哪些作用域可供 *** 作?
    	6使用Date对象时,需要注意什么?
    
    pre>
    

    乱码情况:

    改一下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"%>
    

    第19个war包:

    实验要求:

    优先简单的就回答在里面了

    <pre>
    自行完成相应的动作和思考
    0.读完程序中的文档,即注释,如果有相关问题,则直接回答问题。
    
    1 再次思考,如何组织javabean?
    2 一般情况下,javabean有哪些具体的规范?
    3 在jsp页中,如何引用bean,如何自动完成bean的属性域的 *** 作?
    4 在jsp页中,如何实现对它页的引入 or 嵌入?forward和include
    5 访问/register/index.jsp,思考如何把界面上的内容换成自己的内容?
    6 JAVA代码和HTML代码混编出来的jsp页面,给你的最深刻的印象是什么?
    7 JSP页面如何使用CSS样式?@import "css/all.css";和<link href="login.css" type="text/css" rel="stylesheet" />
    8 JSP页面如何使用javascript脚本?然后在**页面**中通过<script>标签的src属性引入
    9  请将productManage系统界面修改得一致,界面自主发挥,原则上打上自己的标签
    10 在email目录下,邮箱的检测使用的后台javabean功能增强的方式来完成,如何解耦成独立的工具类来检测?
    	10.1 思考,如何在前台直接用javascript脚本来完成检测?
    	10.2置于前台检测和置于后台检测,有何差别?,前台可能更快一些?
    pre>
    

    js检测邮箱格式

    在jsp中使用javabean:

    //由下题知道
    
    
    
    
    
    
    
    
    Bean的使用

    编号:
    书名:
    作者:

    用镶嵌的java代码实现 <% Article article1=new Article(); article1.setId(50); article1.setTitle("JAVAEE挂科就是拥有不一样的计算机人生经历"); article1.setAuthor("小小小"); %>

    编号1:<%=article1.getId() %>
    书名1:<%=article1.getTitle() %>
    作者1:<%=article1.getAuthor() %>


    人有点麻, 我们就简单访问一下吧!

    第20个war包:

    实验要求:

    <pre>
    自行完成相应的动作和思考
    0.读完程序中的文档,即注释,如果有相关问题,则直接回答问题。
    
    1 数据的封装是用什么来实现的
    2从控制器过来就有数据,而直接访问employee.jsp就没有数据,为啥?在控制器里面实例化的javabean
    3在有数据和没有数据的情况下,el表达式的表现如何?就没有显示
    4使用el表达式时,有哪两种方式来获取相应的值?
    5在el表达式中的值,是一个对象吗?好像是
    6如何直接用el表达式显示浏览器请求的头信息里的键值?
    pre>
    

    EL表达式完全攻略 (biancheng.net)

    一些el表达式小应用

    
    	语言accept-language: ${header['accept-language']}
    	
    会话编号session id: ${pageContext.session.id}
    雇员信息employee:     ${requestScope.employee.name},
        ${employee.address.country},
        ${employee.address.state},
        ${employee.address.city},


    首都信息
        capital: ${capitals["中国"]},
        capital: ${capitals["加拿小"]},
        capital: ${capitals["奥地不利"]},
        capital: ${capitals["奥小利亚"]},
    第21个war包:
    自行完成相应的动作和思考
    0.读完程序中的文档,即注释,如果有相关问题,则直接回答问题。
    
    1思考,javabean的规范是什么?详情请看之前的博客
    2思考,javabean成员的访问 *** 作是如何做到一致性的?
    3在jsp页里,如何获取基路径,它是什么?
    4在jsp页里,使用绝对路径有什么好处?
    5结合之前的servlet里的内容,思考,用servlet来做控制器处理请求和这里直接用jsp页来处理请求,有何异同?
    答:emmm不知道, 感觉就是一个向前端一个像后端
    6思考jsp页的优势是什么?但不便之处在哪里?主要是简化了servlet, 但是加大了项目的复杂度和耦合度
    7页面中的css样式如何 *** 作? 导入就行
    8页面中的数据怎么来?前端输入
    9页面的渲染【对最终用户呈现完整的面页】包括哪些动作?
    10在jsp中,使用javabean时,是如何实现自动装配的?它的先决条件是什么?emm暂时没找到!
    
    

    1 对base href=“路径”,基路径的理解_lllllzllll的博客-CSDN博客_base href

    String path = request.getContextPath();//获取上下文
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    

    2相对路径和绝对路径的优缺点_tianhandigeng1498的博客-CSDN博客_相对路径和绝对路径的优缺点

    3到层用包装类

    自动装配:

    
    
    
    
    第22个war包:

    实验要求:

    笔者没学jsp, 所以大致过一遍:

    <pre>
    自行完成相应的动作和思考
    0.读完程序中的文档,即注释,如果有相关问题,则直接回答问题。
    
    1 本项目,只有jsp页面,主要学习el和jstl
    2 请问el是如何判空的
    3 那么jstl的引入指令是什么?
    4 比较el和jstl标签的差别
    5 使用jstl需要额外引入的包是什么?
    6 使用jstl可以在界面上实现哪些逻辑,思考,如果是在html中,这些逻辑控制由什么来完成?
    7 动态java web project额外导入jar包的方法是什么?在哪里获取这些需要的jar包?
    pre>
    

    JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:

    <%@ taglib prefix="fn" 
               uri="http://java.sun.com/jsp/jstl/functions" %>
    

    如何给动态 web 工程添加额外 jar 包(详细)

    EL.jsp:

    
        比较运算符
        
            4 > 3 ${4 > 3}
    4 < 3 ${4 < 3}
    4 ≥ 3 ${4 >= 3}
    4 ≤ 3 ${4 le 3}
    4 = 4 ${4 == 4} Empty 运算符 empty " " ${empty " "}
    empty "" ${empty ""}
    empty " sometext " ${empty " sometext "}

    jstl01.jsp:

    	
    		欢迎测试你的第一个使用到JSTL的网页

    你使用的浏览器是:




    jstlCcatch01.jsp:

    在jsp中捕获异常!

    
       
       <%
            String eFormat="not number,不是一个数的格式";
            int i=Integer.parseInt(eFormat);
       %>
       
       ${error_Message}
    
    

    jstLCout01.jsp:

        
        



    第23个war包:
    自行完成相应的动作和思考
    0.读完程序中的文档,即注释,如果有相关问题,则直接回答问题。
    
    1 请问jstl标签是如何引入的?基本的使用步骤是什么?
    2 复习,在jsp页中,基路径如何提取?
    3 在jstl里的choose...when...otherwise标签一般什么场合下用?
    4用户退出,一般如何在技术处理?
    5在jstl里,如何迭代处理列表或是数组里的数据?
    6在jstl里,forEach签和forTokens签的异同有哪些?
    7在jstl里,if签适合什么场合下使用?
    8使用import可以包含jsp文件的哪些内容?
    9使用jstl里的out签和使用el输出上,有何差别?
    10在jsp里如何实现重定向跳转,跳转时如何带上参数?
    11在jstl里,如何用choose...when...otherwise实现多路分支选择
    12在jstl里,set签设置的值的作用域是如何指定的?
    13在jsp页面,如何自己向自己传参?
    14请自行整理各页面中的知识点,试着组织成一条线,写好小结
    
    
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    

    emm有点多了, 自行看老师的war包, jsp过时了, 可以随便看看!

    第24个war包:

    实验要求:

    <pre>
    自行完成相应的动作和思考
    0.读完程序中的文档,即注释,如果有相关问题,则直接回答问题。
    
    1.有哪些控制器?
    2.有哪些javabean?
    3.有哪些页面,为何有些用html,有些用jsp
    pre>
    

    纯前端代码就用html, 掺杂点其他的, 就jsp

    计算器:

    要用到, session存计算结果数据,

    // 准备
    Computer computer = null;
    HttpSession session = request.getSession(true);
    try {//存进session中去
        computer=(Computer)session.getAttribute("ok");
        if (computer==null) {
            computer = new Computer();
            session.setAttribute("ok", computer);
        }
    } catch (Exception e) {
        computer = new Computer();
        session.setAttribute("ok", computer);
    }
    
    ...
    
    
    computer.setNum1(num1);//存结果表达式
    computer.setNum2(num2);
    computer.setOperator(operator);
    computer.setResult(result);
    

    展示结果:

    运算情况是:
    ${sessionScope.ok.num1} ${sessionScope.ok.operator } ${sessionScope.ok.num2}= ${sessionScope.ok.result}

    文件读写:

    简易io文件读取异常处理

    三角形:

    对请求简单使用

    END

    本篇也是比较草草了事, 感谢你的阅读, 看看就好!

    欢迎分享,转载请注明来源:内存溢出

    原文地址: https://www.outofmemory.cn/langs/736186.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-04-28
    下一篇 2022-04-28

    发表评论

    登录后才能评论

    评论列表(0条)

    保存