栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

j2ee上机任务汇总(下)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

j2ee上机任务汇总(下)

前言:

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

war包: 第17个war包:

补充知识war和exploded的小坑

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

实验要求:

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 此例有待进一步读解和完善-----

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;


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 过滤器链如何配置?

  
  
    FilterChina01
    cn.edu.cuit.filterChain.FilterChain01
  
  
    FilterChina01
    /ServletForFilterChain
  
  
    FilterChina02
    cn.edu.cuit.filterChain.FilterChain02
  
  
    FilterChina02
    /ServletForFilterChain
  

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

先访问下:

http://localhost:8080/17/ServletForFilterChain

出现乱码一般解决方案:

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

为了监听器listener能运行起:

web.xml配置一下:



    com.feng.listener.OnLineCountListener

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

启动项目直接访问下面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)context.getAttribute("users");
        //第一个用户登录时,列表肯定为空
        if(users.isEmpty()){
            users = new ArrayList();		// 初始化列表     
            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中配置的一分钟

  
    
    1
  

一分钟后, 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;


public class OnLineCountListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

	private ServletContext application = null;	// 上下文对象
	private ArrayList 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());
//		List users = (List) this.application.getAttribute("users");
		System.out.println("监听器日志:/t监听器完成上下文对象的获取");
		System.out.println("监听器日志:/t监听器完成用户列表的初始化");
	}

	
	public void contextDestroyed(ServletContextEvent sce) {
	}

	
	public void sessionCreated(HttpSessionEvent se) {
		session.setMaxInactiveInterval(5);
		System.out.println("监听器日志:/t一个Session创建了!");
	}

	
	public void sessionDestroyed(HttpSessionEvent se) {
		session = se.getSession();
		user = (String) session.getAttribute("username");
		users = (ArrayList) 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) 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到的

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

乱码情况:

改一下:

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

第19个war包:

实验要求:

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

自行完成相应的动作和思考
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";和
8 JSP页面如何使用javascript脚本?然后在**页面**中通过