JavaWeb 之 21.Java基础加强

**编写BaseDao**
    
    1.dao持久层怎么来写的?
    2.编写通用的BaseDao,其他的Dao的持久层继承BaseDao,提供增删改查的方法了。
    
    3.通用的查询的代码?
        * 在BaseDao中提供有参数的构造方法,参数是class对象,子类提供的构造方法,默认调用父类的构造方法,在子类中需要传入具体的Class的类型。
        
    4.在父类中提供构造方法,也可以获取到具体的Class的类型。
        
    5.在Class对象中,提供了一些方法
        * Type getGenericSuperclass()     -- Type接口,实现类Class,子接口是ParameterizedType
        * 在接口ParameterizedType中,提供了一个方法,Type[] getActualTypeArguments()  可以获取实际类型参数(<Book或者User>)。
        
        
**JDK5.0后注解**
    
    1.注释:给程序员们看的,描述方法,参数具体的含义。
    2.注解:给计算机看的,决定计算机执行的类。
    3.注解的写法:@Test    @Override
    
        3.1 JDK中提供的一些注解
            * @Override    -- 标识子类重写父类的方法的格式。(注意:在JDK1.6之后,@Override也可以应用在接口与实现类中)
            * @SuppressWarnings    -- 抑制警告(黄色,不影响运行)   @SuppressWarnings({ "all" })压制所有
            * @Deprecated    -- JDK中提供的一些过时了,但是可以通用,不推荐你使用。
        
    4.自定义注解@MyTest,语法,声明属性。
    
        4.1自定义注解
            * 声明类使用class,声明接口使用interface,声明枚举enum,声明注解也使用关键字@interface
            * 定义属性:数据类型 变量名称 ();
            * 属性的默认值:数据类型 变量名称 () default 值;
            * 属性的数据类型:基本数据类型、String类型、Class类型、注解类型、枚举类型、以上数据类型的一维数组
            * 属性名称是value,value就可以省略不写。但是只能有一个value
            
            * Invalid type Date for the annotation attribute Anno1.d; only primitive type, String, Class, annotation, enumeration are permitted or 1-dimensional arrays thereof
        
    5.注解本身没有任何含义,结合反射,让注解有含义。
        
        5.1JDK的元注解
            * @Retention    -- 自定义的注解进行设置,注解存在的阶段
            * 值的写法:@Retention(RetentionPolicy.SOURCE)
            * 值总结
                * SOURCE        源代码阶段
                * CLASS            编译class阶段
                * RUNTIME        在运行期
                
        5.2模拟@Test单元测试
            * 先获取Class对象,通过Class对象获取Method对象
            * 循环遍历拿到每一个method对象,判断该method是否有@MyTest注解
            * 如果有,让方法运行。
            * boolean flag = method.isAnnotationPresent(MyTest.class);判断方法上是否有注解
            
        5.3模拟的MyJdbcUtil的工具类
        
    6.JDK提供了元注解
        * @Target    -- 决定注解存在的位置。(方法,类,,,)
            TYPE,  FIELD,  METHOD,  PARAMETER,  CONSTRUCTOR,  LOCAL_VARIABLE,  ANNOTATION_TYPE,  PACKAGE;
        
        
**Servlet3.0开发**
    

    1.现在使用都是Servlet2.5版本
    2.Servlet3.0版本比2.5多了哪些功能?
    3.开发Servlet3.0必须使用JavaEE6.0版本,Tomact服务器必须是7.0版本以上
        * 支持注解的开发
            * 配置Servlet    @WebServlet(urlPatterns={"/demo1"})  (例:@WebServlet(urlPatterns={"/demo1"},loadOnStartup=2,initParams={@WebInitParam(name="username",value="root"),@WebInitParam(name="password",value="abc123")})  )
            * 配置过滤器    @WebFilter(urlPatterns={"/*"})
            * 配置监听器    @WebListener
            
        * 支持文件上传
            * 做文件的上传,之前FileUpload组件,apache组织提供的。
            * 前台和后台
                * 前台
                    * 表单中的上传文件项 name="myfile"
                    * 表单中必须使用post提交方式
                    * 表单中必须使用enctype="multipart/form-data"
                * 后台
                    * 获取文件的输入流,io读写。

<h3>Servlet3.0文件上传</h3>
<form action="${ pageContext.request.contextPath }/upload" method="post" enctype="multipart/form-data">
	文件描述:<input type="text" name="filedesc" /><br/>
	上传文件:<input type="file" name="myfile" /><br/>
	<input type="submit" value="上传" />
</form>
@WebServlet(urlPatterns="/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet{
	
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// 在FileUpload组件的时候,能不能使用req.getParameter()方法,答案是不能。
		
		// 如果使用的Servlet3.0进行的文件上传,可以使用req.getParameter()方法
		// 设置request的post请求的编码
		req.setCharacterEncoding("UTF-8");
		// 接收参数
		String filedesc = req.getParameter("filedesc");
		System.out.println("文件描述:"+filedesc);
		
		// 处理文件的上传项
		Part part = req.getPart("myfile");
		
		// 文件的上传,操作Part对象的一些api
		// 获取上传文件的大小
		long size = part.getSize();
		System.out.println("文件的大小"+size);
		// 获取就是<input type="file" name="myfile" />  name属性的值
		String name = part.getName();
		System.out.println(name);
		
		// 就是没有获取文件名称的方法	form-data; name="myfile"; filename="hello.txt"
		String header = part.getHeader("Content-Disposition");
		System.out.println(header);
		
		// 获取文件名称
		int index = header.lastIndexOf("filename=\"");
		String filename = header.substring(index+10, header.length()-1);
		System.out.println("文件的名称:"+filename);
		
		// 文件上传
		InputStream in = part.getInputStream();
		
		// Part提供了一个方法,写入到位置
		part.write("c:/upload/"+filename);
		
	}

}


        * 支持异步开发(了解)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值