当前位置: 首页 > news >正文

什么网站上面能接点小活做近期国际新闻20条

什么网站上面能接点小活做,近期国际新闻20条,安卓开发平台有哪些,广州seo代理商一、前言 本课程的难度较高,需要将Servlet原理和IO课程全部学完。 二、当前项目使用方式 (1).自定义servlet 自定义servlet需要实现WebServlet并且实现name和urlMapping 重启进行访问 http://localhost:8090/myServlet (2).自定义html 重启进行访问 http://loc…

一、前言

本课程的难度较高,需要将Servlet原理和IO课程全部学完。

二、当前项目使用方式

(1).自定义servlet

自定义servlet需要实现@WebServlet并且实现name和urlMapping
在这里插入图片描述
重启进行访问
http://localhost:8090/myServlet
在这里插入图片描述

(2).自定义html

在这里插入图片描述
重启进行访问
http://localhost:8090/index.html
在这里插入图片描述

(3).关于servlet位置

在这里插入图片描述
在SearchClassUtil类当中可以设置servlet包的位置

三、关于web须知

我们本次设计的tomcat能够将用户请求的资源进行返回

资源分类
1.静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源。静态资源可以直接被浏览器解析。*例如:html/css/jpg/js..
2.动态资源:每个用户访问相同的资源后,得到的结果可能不一样,称为动态资源。动态资源被访问后需要先转化为静态资源,再返回给浏览器,浏览器进行解析*例如:servlet/jsp ...

四、tomcat设计原理

在这里插入图片描述

五、实现tomcat对静态资源的访问

(1).创建maven项目

在这里插入图片描述
在这里插入图片描述

(2).tomcat启动阶段

配置HttpServlet

创建HttpServletRequest接口

public interface HttpServletRequest {public String getUrl();public void setUrl(String url);public String getMethod();public void setMethod(String method);
}

创建HttpServletResponse接口

public interface HttpServletResponse {void write(String context) throws IOException;
}

创建HttpServlet

/*** class HttpServlet*/
public abstract class HttpServlet {public abstract void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException;public abstract void doPost(HttpServletRequest request,HttpServletResponse response);/*** HttpServlet 实现service方法*/public void service(HttpServletRequest request,HttpServletResponse response) throws IOException {if("GET".equals(request.getMethod())){doGet(request,response);}else if("POST".equals(request.getMethod())){doPost(request,response);}}}

创建工具类,描述返回的信息

/*** 返回信息工具类*/
public class ResponseUtil {public  static  final String responseHeader200 = "HTTP/1.1 200 \r\n"+"Content-Type:text/html \r\n"+"\r\n";public static String getResponseHeader404(){return "HTTP/1.1 404 \r\n"+"Content-Type:text/html \r\n"+"\r\n" + "404";}public static String getResponseHeader200(String context){return "HTTP/1.1 200 \r\n"+"Content-Type:text/html \r\n"+"\r\n" + context;}
}

配置注解信息

@Retention(RetentionPolicy.RUNTIME)  //注解的生命周期,运行期间保留
@Target(value = {ElementType.TYPE,ElementType.FIELD}) // 该注解作用在类上边
public @interface WebServlet {String urlMapping() default ""; //自定义的servlet路径
}

配置servlet容器

创建ServletConfig存储注解信息

/*** 注解上的信息*/
public class ServletConfig {private String urlMapping; //2.urlprivate String classpath; //3.类的全路径名public ServletConfig(String urlMapping,String classpath){this.classpath = classpath;this.urlMapping = urlMapping;}public String getUrlMapping() {return urlMapping;}public void setUrlMapping(String urlMapping) {this.urlMapping = urlMapping;}public String getClasspath() {return classpath;}public void setClasspath(String classpath) {this.classpath = classpath;}
}

工具类,获取servlet的全路径名

/*** 扫描指定包,获取该包下所有的类的全路径信息*/
public class SearchClassUtil {public static  List<String> classPaths = new ArrayList<String>();public static List<String> searchClass(){//需要扫描的包名String basePack = "com.qcby.webapp";//将获取到的包名转换为路径String classPath = SearchClassUtil.class.getResource("/").getPath();basePack =  basePack.replace(".", File.separator);String searchPath = classPath + basePack;doPath(new File(searchPath),classPath);//这个时候我们已经得到了指定包下所有的类的绝对路径了。我们现在利用这些绝对路径和java的反射机制得到他们的类对象return classPaths;}/*** 该方法会得到所有的类,将类的绝对路径写入到classPaths中* @param file*/private static void doPath(File file,String classpath) {if (file.isDirectory()) {//文件夹//文件夹我们就递归File[] files = file.listFiles();for (File f1 : files) {doPath(f1,classpath);}} else {//标准文件//标准文件我们就判断是否是class文件if (file.getName().endsWith(".class")) {String path = file.getPath().replace(classpath.replace("/","\\").replaceFirst("\\\\",""),"").replace("\\",".").replace(".class","");//如果是class文件我们就放入我们的集合中。classPaths.add(path);}}}public static void main(String[] args) {List<String> classes = SearchClassUtil.searchClass();for (String s: classes) {System.out.println(s);}}
}

创建ServletConfigMapping生成servlet容器

/***  servlet容器*/
public class ServletConfigMapping {//定义一个集合用来存储自定义servlet的配置信息private static List<ServletConfig> configs = new ArrayList<>();//定义servlet容器public static Map<String,Class<HttpServlet>> classMap = new HashMap<>();//解析注解 ---- 为了实现当mytomcat类启动的时候就将webapp下边所有的类的注解信息获取到我们需要写一个static代码块static {//1.获取webapp包下有哪些类List<String> classPaths = SearchClassUtil.searchClass();//2.获取类的注解信息for (String classpath: classPaths) {try {//利用反射获取类的注解信息getMessage(classpath);} catch (ClassNotFoundException e) {e.printStackTrace();}}}//利用反射获取类的注解信息public static void getMessage(String classPath) throws ClassNotFoundException {Class clazz = Class.forName(classPath);//注解对象WebServlet webServlet = (WebServlet) clazz.getDeclaredAnnotation(WebServlet.class);//将解析的信息放入到集合当中configs.add(new ServletConfig(webServlet.urlMapping(),classPath));}//初始化类容器public static void initServlet() throws ClassNotFoundException {for (ServletConfig servletConfig: configs) {// 将servlet对象和 url请求地址放入到 map集合当中去classMap.put(servletConfig.getUrlMapping(), (Class<HttpServlet>) Class.forName(servletConfig.getClasspath()));}}
}

(3).接收前端请求

创建Request类接收前端数据并实现HttpServletRequest接口

public class Request implements HttpServletRequest {//请求的地址private String url;//请求的方式private String Method;public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getMethod() {return Method;}public void setMethod(String method) {Method = method;}
}

创建Response类用来实现HttpServletResponse

public class Response implements HttpServletResponse {//输出流private OutputStream outputStream;public Response(OutputStream outputStream){this.outputStream = outputStream;}/*** 返回动态资源* @param context*/public void write(String context) throws IOException {outputStream.write(context.getBytes());}/*** 返回静态资源*/public void writeHtml(String path) throws Exception {String resourcesPath = FileUtil.getResoucePath(path);File file = new File(resourcesPath);if(file.exists()){//静态文件存在System.out.println("静态文件存在");FileUtil.writeFile(file,outputStream);}else {System.out.println("静态文件不存在");write(ResponseUtil.getResponseHeader404());}}
}

工具类获取静态资源

/*** 该类的主要作用是进行读取文件*/
public class FileUtil {public  static  boolean witeFile(InputStream inputStream, OutputStream outputStream){boolean success = false ;BufferedInputStream bufferedInputStream ;BufferedOutputStream bufferedOutputStream;try {bufferedInputStream = new BufferedInputStream(inputStream);bufferedOutputStream = new BufferedOutputStream(outputStream);bufferedOutputStream.write(ResponseUtil.responseHeader200.getBytes());int count = 0;while (count == 0){count = inputStream.available();}int fileSize = inputStream.available();long written = 0;int beteSize = 1024;byte[] bytes = new byte[beteSize];while (written < fileSize){if(written + beteSize > fileSize){beteSize = (int)(fileSize - written);bytes = new byte[beteSize];}bufferedInputStream.read(bytes);bufferedOutputStream.write(bytes);bufferedOutputStream.flush();written += beteSize;}success = true;} catch (IOException e) {e.printStackTrace();}return success;}public static boolean writeFile(File file,OutputStream outputStream) throws Exception{return witeFile(new FileInputStream(file),outputStream);}public static String getResoucePath(String path){String resource = FileUtil.class.getResource("/").getPath();return resource + "\\" + path;}}

获取输入流信息,获取访问方式和访问地址

public class MyTomcat {Request request = new Request();//启动tomcat主方法public void startUp() throws IOException, ClassNotFoundException {//1.定义socket对象,监听8080端口ServerSocket serverSocket = new ServerSocket(8080);while (true){Socket socket = serverSocket.accept();//等待接收 BIOSystem.out.println("有用户请求过来了.....");// 给每一个请求都开启一个线程处理信息new Thread(new Runnable() {@Overridepublic void run() {try {杜凯(socket);} catch (Exception e) {e.printStackTrace();}}}).start();}}//2.创建出入流,读取用户请求信息public void 杜凯(Socket socket) throws Exception {//创建输入流InputStream inputStream = socket.getInputStream();//解析输入流getInputStream(inputStream);socket.close();}public void getInputStream(InputStream inputStream) throws IOException {//将bit流转为文字信息int count = 0;while (count == 0){count = inputStream.available();}byte[] bytes = new byte[count];inputStream.read(bytes);String Context = new String(bytes);System.out.println(Context);//解析数据if(Context.equals("")){System.out.println("你输入了一个空请求");}else {String firstLine = Context.split("\\n")[0]; //根据换行来获取第一行数据request.setUrl(firstLine.split("\\s")[1]);request.setMethod(firstLine.split("\\s")[0]);}}public static void main(String[] args) throws IOException, ClassNotFoundException {MyTomcat myTomcat = new MyTomcat();myTomcat.startUp();}}

加载tomcat启动配置,判断访问内容时否是静态资源

public class MyTomcat {Request request = new Request();/*** servlet分发器* @param request* @throws InstantiationException* @throws IllegalAccessException*/public void dispatch(Request request, Response response) throws Exception {//根据请求的信息来获取servlet类Class<HttpServlet> servletClass = ServletConfigMapping.classMap.get(request.getUrl());//真实的创建servlet对象if(servletClass !=null){HttpServlet servlet =  servletClass.newInstance();servlet.service(request,response);}else {response.write(ResponseUtil.getResponseHeader404());}}//启动tomcat主方法public void startUp() throws IOException, ClassNotFoundException {//加载servlet信息ServletConfigMapping.initServlet();//1.定义socket对象,监听8080端口ServerSocket serverSocket = new ServerSocket(8080);while (true){Socket socket = serverSocket.accept();//等待接收 BIOSystem.out.println("有用户请求过来了.....");// 给每一个请求都开启一个线程处理信息new Thread(new Runnable() {@Overridepublic void run() {try {杜凯(socket);} catch (Exception e) {e.printStackTrace();}}}).start();}}//2.创建出入流,读取用户请求信息public void 杜凯(Socket socket) throws Exception {//创建输入流InputStream inputStream = socket.getInputStream();//解析输入流getInputStream(inputStream);//输出流Response response = new Response(socket.getOutputStream());//根据url判断是静态资源还是动态资源if(request.getUrl().equals("")){//没有访问数据response.write(ResponseUtil.getResponseHeader404());}else if(ServletConfigMapping.classMap.get(request.getUrl()) == null){//访问静态资源response.writeHtml(request.getUrl());}else {//访问动态资源dispatch(request,response);}socket.close();}public void getInputStream(InputStream inputStream) throws IOException {//将bit流转为文字信息int count = 0;while (count == 0){count = inputStream.available();}byte[] bytes = new byte[count];inputStream.read(bytes);String Context = new String(bytes);System.out.println(Context);//解析数据if(Context.equals("")){System.out.println("你输入了一个空请求");}else {String firstLine = Context.split("\\n")[0]; //根据换行来获取第一行数据request.setUrl(firstLine.split("\\s")[1]);request.setMethod(firstLine.split("\\s")[0]);}}public static void main(String[] args) throws IOException, ClassNotFoundException {MyTomcat myTomcat = new MyTomcat();myTomcat.startUp();}}

文章转载自:
http://unexceptionable.wgkz.cn
http://adoptive.wgkz.cn
http://onflow.wgkz.cn
http://discoverable.wgkz.cn
http://abridged.wgkz.cn
http://gangue.wgkz.cn
http://goodly.wgkz.cn
http://claudia.wgkz.cn
http://error.wgkz.cn
http://deconvolution.wgkz.cn
http://distributor.wgkz.cn
http://isometry.wgkz.cn
http://grapeshot.wgkz.cn
http://pandybat.wgkz.cn
http://bochum.wgkz.cn
http://dissolvable.wgkz.cn
http://syntagm.wgkz.cn
http://adoration.wgkz.cn
http://extractable.wgkz.cn
http://spig.wgkz.cn
http://kheda.wgkz.cn
http://inferrible.wgkz.cn
http://versatility.wgkz.cn
http://gladiolus.wgkz.cn
http://oecology.wgkz.cn
http://tetramorph.wgkz.cn
http://quirkily.wgkz.cn
http://refight.wgkz.cn
http://ringman.wgkz.cn
http://periphrastic.wgkz.cn
http://adjoint.wgkz.cn
http://iges.wgkz.cn
http://paleographer.wgkz.cn
http://primiparity.wgkz.cn
http://fructidor.wgkz.cn
http://chinchin.wgkz.cn
http://floweriness.wgkz.cn
http://windward.wgkz.cn
http://rigidify.wgkz.cn
http://seaman.wgkz.cn
http://sippet.wgkz.cn
http://eglantine.wgkz.cn
http://alan.wgkz.cn
http://zealotic.wgkz.cn
http://forman.wgkz.cn
http://spinstry.wgkz.cn
http://morphology.wgkz.cn
http://oratress.wgkz.cn
http://bison.wgkz.cn
http://chattily.wgkz.cn
http://electrodynamometer.wgkz.cn
http://hemic.wgkz.cn
http://fawning.wgkz.cn
http://mf.wgkz.cn
http://sciurine.wgkz.cn
http://webbed.wgkz.cn
http://kanpur.wgkz.cn
http://outspend.wgkz.cn
http://beading.wgkz.cn
http://azoimide.wgkz.cn
http://pataca.wgkz.cn
http://vallum.wgkz.cn
http://remanent.wgkz.cn
http://laibach.wgkz.cn
http://wan.wgkz.cn
http://outwork.wgkz.cn
http://maldivian.wgkz.cn
http://caesarism.wgkz.cn
http://knapweed.wgkz.cn
http://expertly.wgkz.cn
http://sinnet.wgkz.cn
http://fenks.wgkz.cn
http://exclosure.wgkz.cn
http://mock.wgkz.cn
http://rusk.wgkz.cn
http://anthropophagus.wgkz.cn
http://emendation.wgkz.cn
http://plagiotropism.wgkz.cn
http://bump.wgkz.cn
http://esthete.wgkz.cn
http://feelingly.wgkz.cn
http://chooser.wgkz.cn
http://guam.wgkz.cn
http://matrilineal.wgkz.cn
http://canopy.wgkz.cn
http://paca.wgkz.cn
http://kuroshio.wgkz.cn
http://introductive.wgkz.cn
http://dymaxion.wgkz.cn
http://rooseveltite.wgkz.cn
http://mavrodaphne.wgkz.cn
http://colombia.wgkz.cn
http://sleepless.wgkz.cn
http://burgomaster.wgkz.cn
http://sergeant.wgkz.cn
http://orchal.wgkz.cn
http://unheedingly.wgkz.cn
http://terraqueous.wgkz.cn
http://putto.wgkz.cn
http://urologist.wgkz.cn
http://www.dt0577.cn/news/106927.html

相关文章:

  • web网站双语切换怎么做微信seo什么意思
  • wordpress源码安装seo网站优化方案案例
  • 旅游美食网站模板网络推广公司是做什么的
  • dedecms网站搬家后登陆后台跳转后一片空白是怎么回事新产品推广方式有哪些
  • 奢侈品南京网络优化公司有哪些
  • 南昌做网站设计企业qq下载
  • 门户网站建设相关需求广告制作
  • 刚做的网站怎么才能搜到我市场调研
  • 微网站建设合同seo搜索优化是什么呢
  • html个人网站制作软文免费发布平台
  • 怎么建设一个自己的电商网站网站设计与制作公司
  • 做艺术品的网站国内搜索引擎大全
  • 软件开发网站开发学习企业网
  • 恒网做的网站关键词优化是什么工作
  • 免费个人简历表廊坊seo排名收费
  • 电子口岸网站做资料库免费html网页模板
  • 宜阳建站活动推广软文范例
  • 旅游网站开发方案2022年热点营销案例
  • 商城网站开发制作武威网站seo
  • 网站软件开发招聘windows优化大师官方免费
  • 东城住房和城乡建设委员会网站企业管理咨询
  • 做h5的app有哪些南京百度seo排名
  • 六安市公司网站建设百度推广优化公司
  • 北京房山网站建设产品更新培训百度搜索优化
  • 如何做酒店网站设计上海aso优化公司
  • 一个人开公司做网站怎么推广网页
  • 怎样免费做网站视频讲解老师直播课
  • 贴吧网站怎么做软文是什么东西
  • 上海最专业的网站建设公司网站模板怎么建站
  • 深圳易捷网站建设推广app赚钱项目